Frage zum Casten
-
Hallo,
bezieht sich der Cast auf alle sich in der Klammer befindlichen
Variablen, Konstanten?unsigned int y;
unsigned int x;(unsigned long)(x*250000/y)
-
hermes schrieb:
Hallo,
bezieht sich der Cast auf alle sich in der Klammer befindlichen
Variablen, Konstanten?Er bezieht sich auf das Ergebnis des Ausdrucks in den Klammern.
-
Dann muss ich in diesem Fall alle Variablen
in der Klammer Casten um während der Berechnung
keinen Überlauf zu bekommen.Anstatt
(unsigned long)(x*250000/y)dann
((unsigned long)x*250000UL/(unsigned long)y)
-
sizeof( unsigned long ) == sizeof( unsigned int )
Zumindest auf einem 32-Bit System. Daher ist das nicht unbedingt der beste Weg einen Überlauf zu umgehen.
-
Das ist keine Antwort auf meine Frage.
-
Deine Frage hat curry-king schon beantwortet.
-
Ok
-
hermes schrieb:
Dann muss ich in diesem Fall alle Variablen
in der Klammer Casten um während der Berechnung
keinen Überlauf zu bekommen.Es reicht, wenn du _einem_ Argument die gewünschte Genauigkeit verpasst. Die restlichen Werte werden dann auch mit dieser Präzision gehandelt.
int * long / int
wird zB komplett in einer long Pipeline berechnet.