@Wofram
>die Auswertung des Ausdrucks erfolgt von links nach rechts, deshalb
>läuft dir dein Datentyp bei
>temp * ((unsigned long)((65535.0 * 32768.0)
>schon über für temp>2, bevor die Division das ganze "verkleinert"
Deswegen ist der konstante ausdruck komplett umklammert, damit dieser
erst vollständig gerechnet wird! also kein überlauf...
>mag sein das der Compiler mit konstant folding etwas anderes macht
>(ich wär mir da nicht so sicher), wie auch immer das läuft darauf
>hinaus, daß beim Debuggen (ohne Optimierung) was anderes als Ergebnis
>rauskommt, als beim späteren Programm mit Optimierung. Sowas bewusst zu
>programmieren halte ich für fahrlässig, zumindest wenn es später weiter
>verwendet wird.
Einfach sowohl in der debug als auch release version constant folding
aktivieren. Während dem debuggen stört diese optimierung nicht, da der
code nicht umsortiert wird.
Meiner Erfahrung nach führt der gcc schon ohne optimierung constant
folding automatisch aus.