Frage

Seit ich zur Arbeit mit PI benötigt (3,1415 ...) in C # Ich habe Math.PI verwendet, um den Wert zu erhalten. Normalerweise würde ich nur Werte verwenden, wie Math.PI/2.0 oder 2.0*Math.PI, aber jetzt habe ich gerade bemerkt, dass XNA eine MathHelper-Klasse bietet. Das Schöne daran ist, ich MathHelper.PiOver2 und MathHelper.TwoPi nennen kann, so dass ein extrem trivial Schritt noch trivial zu machen. ; -)

Ich nahm diese beiden Klassen waren austauschbar, aber ich merkte, dass Math.PI/2.0 != MathHelper.PiOver2. Ich habe versucht, zu erforschen, warum dies wäre, aber ich fand nichts. Also, ich dachte, ich würde mein Glück versuchen hier. Im Hinblick auf die PI verwenden, gibt es irgendwelche Unterschiede zwischen der Mathematik und der MathHelper Klasse? Ist eine über den anderen bevorzugt? Oder sollte ich gerade gut genug verlassen allein und so stellen Sie sicher, konsequent ein verwenden oder das andere in meinem Programm?

War es hilfreich?

Lösung

Wie nicht gleich sind sie? Wenn sie nahe genug sind, könnte dies nur das traditionelle Problem sein, dass mit Gleitpunkte Gleichheit testen, fast unmöglich.

Auch sie sind vom gleichen Typ? Meiner Meinung nach wurde die meisten Gaming-Berechnungen wurden mit Schwimmern gemacht, wo, wie Math.PI eine doppelt so hoch sein würde.

EDIT: MathHelper in der Tat nicht schwimmt verwenden

Andere Tipps

Blick auf Ziffer:

3,1415926535897900000000000000000 // Math.PI

3,1415930000000000000000000000000 // MathHelper.PI

3,1415926535897932384626433832795 // PI von Windows-Calc


1,5707963267949000000000000000000 // Math.PI / 2

1,5707963705062900000000000000000 // MathHelper.PiOver2

1,5707960000000000000000000000000 // MathHelper.Pi / 2

1,5707963267948966192313216916398 // PI / 2 von Windows-Calc


Erklärung des Problems: Der Verlust der Genauigkeit

Best PI / 2 = Math.PI / 2

Best PI / 2 nicht Math.PI / 2!

In der Spieleentwicklung nicht die Math.PI Konstante verwenden, ist der Verlust an Genauigkeit vernachlässigbar ist, werden Sie nicht den Unterschied in der Bewegung der Objekte im Spiel sehen ... Die Leistung ist wichtiger. die MathHelper.PiOver2 Mit finden Sie ein Doppel Division und zu einem Doppel float Umwandlung speichern. Dies könnte scheint sehr wenig Hilfe zu sein, aber es gibt rechenintensive Probleme (Partikelsysteme), wo der Unterschied signifikant ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top