質問

私はC#で(... 3.1415)PIで動作するために必要な以来、私は値を取得するためにMath.PIを使用しています。通常、私はちょうどMath.PI/2.0または2.0*Math.PIのような値を使用しますが、今私はちょうどXNAはMathHelperクラスを提供していることに気づきました。このことについての素晴らしい事は、私は極めて些細なステップは、さらに多くの些細な作り、MathHelper.PiOver2MathHelper.TwoPiを呼び出すことができます。 ; - )

私は、これら2つのクラスが、交換可能だったと仮定が、私はそのMath.PI/2.0 != MathHelper.PiOver2に気づきました。私は、これは次のようになり、なぜ調査してみましたが、私は何も見つかりませんでした。だから、私はここに私の運を試すだろうと思いました。 PIを使用してに関しては、MathクラスとMathHelperクラス間のいずれかの違いがありますか?一方が他方よりも優先されていますか?または私は言葉だけで十分に残して、ちょうど一貫して私のプログラムを通じて、どちらか一方を使用するようにしてください?

役に立ちましたか?

解決

彼らはどのように等しくありませんか?彼らは十分に接近している場合、これはただのフローティングポイントと平等をテストすることは不可能に近いです伝統的な問題がある可能性があります。

また、それらは同じものですか?私の意見は、ほとんどのゲーム計算はにMath.PIは、二重になるよう山車、で行われたました。

EDIT: MathHelper確かに山車を使用しません

他のヒント

桁に見てます:

3,1415926535897900000000000000000 //にMath.PI

3,1415930000000000000000000000000 // MathHelper.PI

WindowsのCalcの

から

3,1415926535897932384626433832795 // PI <時間>

1,5707963267949000000000000000000 //にMath.PI / 2

1,5707963705062900000000000000000 // MathHelper.PiOver2

1,5707960000000000000000000000000 // MathHelper.Pi / 2

1,5707963267948966192313216916398 // WindowsのCalcのからPI / 2

<時間>

問題の説明:精度の損失

ベストPI / 2 =にMath.PI / 2

ベストPI / 2にMath.PI / 2ではありません!

にMath.PIの定数を使用していないゲームの開発では、精度の損失は無視できる程度である、あなたはゲームオブジェクトの動きに違いは見られませんしています...パフォーマンスがより重要です。 MathHelper.PiOver2を使用すると、あなたのダブル部門との変換をfloatへの二重を保存します。この威力は非常に少しの助けとなるようだが、その差が顕著な計算集約的な問題(パーティクルシステム)があります。

scroll top