Start von Schleifendurchgang n+1 möglich, bevor Durchgang n abgearbeitet wurde?
-
Hallo,
habe folgendes seltsames Problem. Ich habe eine Funktion akku(akkumulator, double, double) geschrieben, mit der ich das Produkt von zwei Gleitkommazahlen in einen langen Akkumulator berechne und zu einem grossen Akkumulator (4288 Bits) addiere. Diese 4288 Bits decken den kompletten Bereich von möglichen double-Multiplikationen ab und die Summe der double-Multiplikationen kann somit die ganze Zeit exakt dargestellt werden. Der Algorithmus ist soweit verifiziert. Ich vergleiche die Werte mit einer weiteren Referenz-Bibliothek. Wenn ich die Methode abwechselnd mit der Methode von meiner Referenzbibliothek in einer Schleife aufrufe, stimmen beide Akkumulatoren überein.
Wenn ich jedoch selbstgeschriebene Methode allerdings in einer for-Schleife oft hintereinander ausführe, dann stimmen die Werte im Akkumulator nicht mehr vollständig.Ist es möglich, dass der Methodenaufruf von Durchgang n+1 gestartet wird, bevor Durchgang n komplett abgearbeitet wurde und somit Inkonsistenzen auftreten?
Kompilieren tue ich mit ICC und den Parametern:
icc -Qoption,cpp,--extended_float_types -O2
Mit GCC passiert genau das gleiche. Hat jemand einen Erklärungsversuch für dieses Verhalten?
Besten Dank und Gruss,
Heinz