Wir konvertieren eine C++-Mathematikbibliothek nach C#. Die Bibliothek mischt die Verwendung von Floats und Doubles (Casting zwischen ihnen manchmal) und wir versuchen, das gleiche zu tun, um die genau die gleichen Ergebnisse in C# zu erhalten, die wir in C++ hatten, aber es erweist sich als sehr schwierig, wenn nicht unmöglich.
Ich denke, das Problem ist eines oder mehrere der folgenden, aber ich bin kein Experte:
-
Die Umwandlung von Floats in Double und Double in Floats führt zu unvorhersehbaren Ergebnissen und wird in C++ und C# unterschiedlich gehandhabt.
-
C++ und C# gehen unterschiedlich mit der Genauigkeit von Fließkommazahlen um und können sich nicht gegenseitig imitieren.
-
Irgendwo in .NET gibt es eine Einstellung, mit der es wie C++ funktioniert, aber ich kann sie nicht finden (beide sind 32-Bit)
Kann mir jemand die möglichen Probleme erklären und mir vielleicht einen Link zu einer maßgeblichen Dokumentation von Microsoft geben, die ich verwenden kann, um die Situation und den Grund für die Unterschiede zu erklären?
EDIT
Wir verwenden VC6 und .NET4.0
Wegen eines NDA kann ich keine Beispiele für die Berechnungen geben, aber ich kann einige Zahlen für die Unterschiede aufzeigen... wahrscheinlich sehr nutzlos für sich selbst:
8.085004000000000 (C#) vs.
8.084980000000000 (C++)
8.848165000000000 (C#) vs.
8.848170000000000 (C++)
0.015263214111328 (C#) vs.
0.015263900756836 (C++)
Es sei darauf hingewiesen, dass diese Zahlen auch zusammengesetzte Probleme enthalten. Dies sind die Ergebnisse von Berechnungen.