2015-10-27 18 views
6

私は流星を使用しています。サーバーとクライアントの両方でJavascriptを使用します。クライアント/ブラウザ/アプリのサーバー上Math.sin()はserver/clientで異なる結果を返しますか?

-9986.46139381927

-9986.46115497749

なぜこれがある:

私はMath.sin(356644061314425) * 10000を実行すると、私が手に?どうすればこれを防ぐことができますか?

編集:提案された重複した質問は度/ラジアンを参照します。私は私がもっとランタイムの問題だと思う。

+0

小数点以下3桁を表示するように設定します;) –

+0

おそらく浮動小数点数を使用しています。ご存じのように、フロートはある時点では正確ではありません。 –

+0

[特殊な数学の誤った結果が重複している可能性がありますか?](http://stackoverflow.com/questions/8691800/unusual-math-with-incorrect-results) –

答えて

6

「私はこれをどうやって防ぐのですか?あなたはできません "。

"これはなぜですか?" Math.sinのjavascript実装が決定されていないということです。

http://www.ecma-international.org/ecma-262/5.1/#sec-15.8.2.16

を見る具体「罪(x)は、xの正弦に実装依存の近似を返す。引数はラジアンで表現されます。」 (私のイタリック体)。

しかし私の実験では、現代のブラウザでは現在のところ、他のブラウザとは異なる(そして一見正確な)Chromeを使用して、2つの実装のうちの1つしか使用しないことが示唆されています。