Erzwingung von Gleitkommaberechnungen für deterministische Ergebnisse in .NET
Angetrieben durch das Streben nach konsistenten Ergebnissen auf allen Maschinen in .NET kämpfen Entwickler mit der Herausforderung des Gleitkomma-Determinismus. Ohne integrierte Lösungen wie Javas fpstrict scheint das Problem unüberwindbar zu sein. Während einige auf umständliche Festkomma-Mathematik zurückgegriffen haben, haben andere das Potenzial der expliziten Umwandlung erkundet.
Wie vom CLR-Ingenieur David Notario vorgeschlagen, kann das Einfügen expliziter Umwandlungen nach jeder Gleitkommaoperation zu vorhersehbarem Verhalten führen. Allerdings weist Eric Lippert darauf hin, dass der C#-Compiler der Laufzeit lediglich einen „Hinweis“ gibt, um die Eingrenzung zu ermöglichen. Es bleibt unklar, ob dieser Hinweis zu den notwendigen IL-Konvertierungen führt.
Wenn wir uns die C#-Spezifikationen und die CLR-Spezifikationen genauer ansehen, bestätigen wir Folgendes:
Trotzdem reicht die explizite Umwandlung allein nicht aus, um die Reproduzierbarkeit auf allen Maschinen zu gewährleisten. Die CLR ermöglicht möglicherweise die Speicherung von Ergebnissen in FPU-Registern mit höherer Präzision während Zwischenberechnungen. Auch die Zuweisung zu einem statischen Feld oder Array-Element kann eine Kürzung erzwingen.
Andere Faktoren, wie z. B. FPU-Einstellungen, können dennoch zu Abweichungen führen. Um eine wirklich reproduzierbare Arithmetik zu gewährleisten, wird Entwicklern empfohlen, stattdessen die Verwendung von Ganzzahlen in Betracht zu ziehen.
Das obige ist der detaillierte Inhalt vonWie können wir deterministische Gleitkommaergebnisse in .NET erzielen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!