6

JavaScript のすべての数学関数は、度の代わりにラジアンを使用します。それでも、彼らは不平等であるか、私は基地から離れています。

度からラジアンへの変換は次のとおりです。

var rad = angle * Math.PI / 180

90 度の角度は1.57079633 ラジアンに等しい

90 度のコサインは0です。1.57079633
ラジアンのコサインは -3.20510345 × 10-9 です。

Javascript では、丸め誤差を避けるために、すべてが 1 つのステップで行われることに注意してください。

var cos = Math.cos(angle * Math.PI / 180);

ここで明らかな何かが明らかに欠けていますが、コードを台無しにしています。

4

6 に答える 6

12

丸め誤差を回避するために、すべてが1つのステップで実行されます

丸め誤差をどのように回避しますか?これは、丸め誤差が別の変数で使用できないことを意味します。それだけです。

円周率の真の値は浮動小数点数として正確に表すことができないため、円周率/2の真の値も表すことができません。したがって、0を取得するために必要な正確な値を指定することはできません。Math.cosしかし、ちょっと-10-9非常に小さい数です。つまり、10,000 kmの長さの線を描画すると、関連する軸から1cm離れた方向に移動することになります。

これは、浮動小数点数を処理するときに期待する必要がある種類のことです。平等と比較しないでください-ある程度の許容範囲内で比較してください。

于 2010-09-19T13:01:58.553 に答える
1

丸め誤差は常に発生します。そして、浮動小数点はとにかく数学的に正確ではなく、有効数字の特定の量に対してのみ正確です。

1/1000000000のオーダーのエラーが発生したときに「ねじ込まれない」ように、コードを変更します。

于 2010-09-19T13:02:53.257 に答える
1

コンピューターで深刻な合計を行う私たちのほとんどにとって、0は-3.20510345 ×10 ^ -9に等しく、浮動小数点数を操作するときに期待できる精度の妥当な程度になります。これは、SOで定期的に取り上げられるトピックです。

于 2010-09-19T13:03:02.237 に答える
1

ええ、ここでは型変換でデータを失っているだけです。

ラジアンで表した 90 度は、正確には 1.57079633 と等しくありません。小数点以下の桁数が多い場合は、期待どおりに変換されます。

このようなことには常に注意が必要です。前述のように、10^-9 はゼロに十分近い値です。

また、MSDNから取得:

さらに、Double 型の精度が失われるため、Double 値を使用した算術演算および代入演算の結果は、プラットフォームによって若干異なる場合があります。たとえば、リテラル Double 値を割り当てた結果は、32 ビット バージョンと 64 ビット バージョンの .NET Framework で異なる場合があります。次の例は、リテラル値 -4.42330604244772E-305 と値が -4.42330604244772E-305 の変数が Double 変数に割り当てられている場合のこの違いを示しています。この場合の Parse(String) メソッドの結果は、精度が失われないことに注意してください。

于 2010-09-19T13:10:58.260 に答える
-3

私は気がついた:

-3.20510345×10-9は-0.00000000320510345と同じで、ゼロに非常に近い値です。

Googleのラジアンへの変換は四捨五入されており、その四捨五入によりエラーが発生します。

私の推測では、数値の精度が低いことで有名なJavascriptも誤ったラジアンを作成するため、そのコサインはかなり離れています。

ただし、これをどのように解決するかはわかりません。他の角度では機能しないため、丸めは受け入れられません。

于 2010-09-19T13:06:17.450 に答える