Hallo zusammen.
Ich häng schon seit längerer Zeit an einem kleinen Problem. Und zwar portiere ich C++ nach C#. Das ist soweit auch kein Problem. Jedoch ist mir dabei aufgefallen, dass Unit Tests aus dem C++ Projekt nicht durchlaufen und bin der Sache mal genauer auf den Grund gegangen. Rausgekommen ist dabei, dass es sehr kleine Rundungsfehler sind, die sich aber mit der Zeit natürlich aufaddieren.
C++
|
Quellcode
|
1
2
|
double temp = cos( 0.52359879f );
printf( "%.17f", temp );
|
C#
|
Quellcode
|
1
2
|
double temp = Math.Cos( 0.52359879f );
Debug.WriteLine( temp.ToString( "G17") );
|
Ergebnis:
c++ 0.86602538824081421
c# 0,86602539649920685
Wie man sieht ist der Unterschied nicht sonderlich groß (0,000000008 ) aber trotzdem läppert sich das...
Kann mir jemand diesen Unterschied erklären?
Oder kennt jemand einen Möglichkeit aus dem CIL-Code eines Assemblys Assembler zu generieren, damit ich mir mal angucken könnte, was da anders läuft?