Wie prüfen, ob die Addition zweier unsigned long in einen unsigned long passt?
-
Hi,
hab mir überlegt, man könnte nach double konvertieren.
Geht das auch effektiv ohne Konvertierung``?
-
_? schrieb:
Hi,
hab mir überlegt, man könnte nach double konvertieren.
Geht das auch effektiv ohne Konvertierung``?einfach addieren.
c=a+b;
und dann
if(c<a)//oder if(c<b), ist egal, welchen du testest
dann hats nicht geklappt
-
Das gefällt mir sehr gut!
Hätte ich eigentlich selbst drauf kommen können.
Hätte, wollte, konnte nicht ...Danke Volkard!
-
Schöner wär allerdings
#include <limits.h> /* ... */ if(ULONG_MAX - a >= b) { /* passt */ }
...dann muss man sich nicht auf den Überlauf verlassen, dessen Verhalten im C-Standard undefiniert ist. (Siehe ISO/IEC 9899:19999, 3.4.3)
-
Überlauf von unsigned ist, wenn ich mich richtig erinnere, im Gegensatz zu signed Variablen, sehr wohl definiert?
-
Genmutant schrieb:
Überlauf von unsigned ist, wenn ich mich richtig erinnere, im Gegensatz zu signed Variablen, sehr wohl definiert?
Nur nicht verwirren lassen:
6.2.5 schrieb:
The range of nonnegative values of a signed integer type is a subrange of the
corresponding unsigned integer type, and the representation of the same value in each
type is the same. A computation involving unsigned operands can never overflow,
because a result that cannot be represented by the resulting unsigned integer type is
reduced modulo the number that is one greater than the largest value that can be
represented by the resulting type.
-
Gibt es da auch etwas für mehrere Summanden, oder muss man sich paarweise durchhangeln?
-
_! schrieb:
Gibt es da auch etwas für mehrere Summanden, oder muss man sich paarweise durchhangeln?
int check_range ( unsigned arguments, ... ) { va_list list; // ...