Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Sylence

Community-Fossil

  • »Sylence« ist der Autor dieses Themas

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

1

03.09.2010, 15:28

C# Math.cos vs. C++ cos

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?

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

2

03.09.2010, 15:37

C# rechnet eben mit einer höheren Präzision. Math.Cos gibts nur für Double, C# castet dein float also direkt zurück in ein Double. Wenn du das mit C++ machst bekommst du das Ergebnis: 0.86602539649920685, was äquivalent zu dem von C# ist.
@D13_Dreinig

Sylence

Community-Fossil

  • »Sylence« ist der Autor dieses Themas

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

3

03.09.2010, 15:46

ah... Math.Cos gibts wirklich nur mit double... ok das erklärts dann natürlich... vielen Dank :)

Werbeanzeige