dポイントプレゼントキャンペーン実施中!

C言語でsin(π)の値を出したいのですが0になりません。
1.224647e-16という値が出てきます。
sin(M_PI)と入力しています。
これを何とか0にする方法はないでしょうか?
ご回答お願い致します。

A 回答 (4件)

浮動小数を使う限り誤差の問題が避けられないのは常識.


sin(M_PI) を 0 にするなら「sin を呼び出す前に引数が M_PI なら 0 を返す」ようにするのが安全.
    • good
    • 0

そもそも、C言語(など)の浮動小数点型は


sin(0.1) == sin(0.1)
がなりたたない場合があるほど(参考URL参照)です。
doubleやfloatを使うときは常に誤差を考えないといけません。
適当な閾値以下は0とみなす...というように実装することが多いです。

参考URL:http://ml.tietew.jp/cppll/cppll/article/4285
    • good
    • 0

M_PIの値がπとは厳密には違うわけですから、どうにもなりません。


sin(180°)=0にするのなら、可能ですが。
    • good
    • 0

もしくは、しきい値を決めておき、sinの計算結果がその値以下(もしくは未満)ならば


ゼロとみなす、という案もありかなと思います。

【付録】sin(M_PI)がゼロにならない理由
πは無理数である。有限小数では表わせない。
M_PIはπを近似した値である。πと正確に一致しているわけではない。
つまり、sin(M_PI) ≠ sin(π) = 0 である。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!