Ich untersuche derzeit ein Zufallsproblem und habe herausgefunden, dass die Ursache darin liegt, dass beim Schleifen und Akkumulieren von Gleitkommazahlen in einem ungeordneten Container das Durchlaufen von Reihenfolgeunterschieden dazu führt, dass das numerische Ergebnis aufgrund der Gleitkommarundung abweicht. Eine intuitive Demonstration finden Sie unten im Python-Spielzeugcode:
Code: Select all
a = 0.016836150909
b = 0.018234567891
c = 0.015432109876
result1 = (a + b) + c
result2 = (a + c) + b
print(f"(a + b) + c = {result1}")
print(f"(a + c) + b = {result2}")
print(f"Equal? {result1 == result2}") # print False
Jetzt habe ich mich gefragt, ob es für Benutzer von GCC unter Linux eine Möglichkeit gibt, mit dem Hash-Seed zu spielen, durch den die Schleifenreihenfolge von undered_map bestimmt wird? Das heißt,
ich möchte in der Lage sein, den numerischen Unterschied, der durch die Nichtübereinstimmung der Reihenfolge verursacht wird, ohne Änderungen am Quellcode zu reproduzieren.
Hinweis: Ich habe einmal erfahren, dass GCC Tunables anbietet, mit denen Entwickler das Laufzeitverhalten ändern können. Kann hier irgendein Tunable helfen?