Hallo zusammen,
ich habe einen Ausdruck in der Form:
1 | y = x * (a2 - a1) / (b2 - b1);
|
wobei a1, a2 und b1, b2 Konstanten sind.
"Theoretisch" könnte der Compiler ja (a2-a1)/(b2-b1) vorab ausrechnen
und den Ausdruck vereinfachen zu
wobei k die zur Kompilierzeit ausgerechnete Konstante ist.
Spannend wird das Ganze, wenn es nicht um float oder double geht,
sondern um int (in meinem Fall int32_t)
Offensichtlich ist der gcc hier klug genug, zwar (a2-a1) und (b2-b1)
vorab auszurechnen (ich nenn sie mal da und db) und den Ausdruck zu
zu vereinfachen, andernfalls hätte man einen sehr erheblichen (u.U.
totalen) Genauigkeitsverlust. Die Klammern hab ich gesetzt um die
Reihenfolge der Berechnung zu verdeutlichen.
Frage: Kann man sich auf dieses Verhalten verlassen? Wenn ja, steht das
irgendwo dass der gcc so vorgeht? Gibts da irgendwelche "Fallen" in die
man tappen könnte?
Danke, michi