- ベストアンサー
Math.sin()メソッドについて
Math.sin(Math.PI)の帰り値が0になってくれません。どなたかわかる人 原因も沿えて教えてください。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
Math.PI の仕様は次のようになっています。 The double value that is closer than any other to pi, the ratio of the circumference of a circle to its diameter. πに最も近い値ということですね。元々無理数ですから、64ビットの浮動小数点形式では、どうしても表わしきれないわけです。 一方Math.sin()の方はコンピュータのネイティブコードを呼び出すことになっています。したがって、この値はライブラリ関数の 実装に依存することになりますが、上記の数値精度および演算誤差から、どうしても数値精度程度の誤差は生じてしまいます。 コンピュータというものはそういうものだと割り切って考えるしかないのかもしれません。 これぞという解決法にはお目にかかったことが無いように思います。一般的には、数値にある程度の許容量を設け、その中に入って いれば同等に扱うというようなやり方をしているように思います。例えば、問題のケースであれば、値が±1E-10の間にあればゼロと みなすというようなやり方です。 その精度では満足できないということであれば、もっと桁数の多い新たな数値型のクラスを定義するしかないと思います。
お礼
ありがとうございます。やはり解決法はなかったのですね。