Ich vesrtehe die Lösung immer nich nicht so ganz
Die Lösung ist einfach: Da Compiler offenbar bei Kettenoperationen unterschiedliche Ergebnisse erzeugen ist die Strategie eben diese Kettenoperationen zu vermeiden - und zwar immer wenn die Stellenzahl/maximale Genauigkeit von float ausgelutscht werden könnte.
Die andere Lösung wäre eine Bibliothek zum Berechnen mit beliebigen Genauigkeiten (arbitrary precision) zu benutzen. bc könnte hierfür ein Beispiel sein. Und da es OpenSource ist kann man auch reinschauen.
Das ist aber teuer - Programme die so rechnen werden langsam. Also nur im Bedarfsfall.