Gewährleistung des Gleitkomma-Determinismus in .NET
Trotz der Bedeutung des Gleitkomma-Determinismus fehlen in .NET explizite Optionen, um ihn durchzusetzen. Jüngste Diskussionen haben jedoch eine mögliche Lösung nahegelegt: Gleitkommawerte durch explizite Umwandlungen wieder auf ihre native Präzision zu zwingen.
Explizite Umwandlung als Determinismusmechanismus
Gemäß CLR-Ingenieur David Notario, explizites Casting sollte das Einfügen von einschränkenden Anweisungen wie conv.r4 auslösen, wodurch die Werte effektiv auf ihre native Größe gekürzt werden. Dies deutet darauf hin, dass die Umwandlung aller Ausdrücke und Unterausdrücke in Float deterministische Ergebnisse gewährleisten würde.
Der „Hinweis“ der Laufzeit
Die Aussage von Eric Lippert deutet jedoch auf eine Nuance hin der Gießvorgang. Er behauptet, dass der C#-Compiler der Laufzeit einen „Hinweis“ liefert, wenn eine explizite Umwandlung erfolgt. Dieser Hinweis, so schlägt er vor, weist die Laufzeitumgebung an, alle hochpräzisen Modusberechnungen zu beenden.
Die Compiler- und CLR-Spezifikationen
Bei Prüfung stellt sich heraus, dass die C#-Spezifikation dies nicht explizit tut Erwähnen Sie, dass explizites Casting das Einfügen von conv.r4 erzwingt. Unit-Tests im Compiler bestätigen dieses Verhalten jedoch. Die CLR-Spezifikation gibt andererseits eindeutig an, dass conv.r4 Werte auf ihre native Größe kürzt.
Kürzungsgarantien
Während die explizite Umwandlung die Kürzung gewährleistet, ist dies der Fall keine Garantie für reproduzierbare Ergebnisse auf allen Maschinen. Andere Faktoren, wie z. B. FPU/SSE-Einstellungen, können das Verhalten von Gleitkommaoperationen beeinflussen. In Abschnitt 12.1.3 der CLR-Spezifikation werden die Auswirkungen von Denormalen und NaNs erörtert.
Alternative Ansätze
Zusätzlich zum expliziten Casting werden Arrays Werte zugewiesen (double[] oder float[]) oder auf statische oder Instanzfelder schneidet auch Gleitkommawerte ab. Für eine wirklich reproduzierbare Arithmetik werden jedoch ganze Zahlen empfohlen.
Das obige ist der detaillierte Inhalt vonWie kann explizites Casting den Gleitkomma-Determinismus in .NET sicherstellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!