• ベストアンサー

sin(π)が0にならないです

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

質問者が選んだベストアンサー

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

浮動小数を使う限り誤差の問題が避けられないのは常識. sin(M_PI) を 0 にするなら「sin を呼び出す前に引数が M_PI なら 0 を返す」ようにするのが安全.

その他の回答 (3)

回答No.4

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

参考URL:
http://ml.tietew.jp/cppll/cppll/article/4285
  • titokani
  • ベストアンサー率19% (341/1726)
回答No.3

M_PIの値がπとは厳密には違うわけですから、どうにもなりません。 sin(180°)=0にするのなら、可能ですが。

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.2

もしくは、しきい値を決めておき、sinの計算結果がその値以下(もしくは未満)ならば ゼロとみなす、という案もありかなと思います。 【付録】sin(M_PI)がゼロにならない理由 πは無理数である。有限小数では表わせない。 M_PIはπを近似した値である。πと正確に一致しているわけではない。 つまり、sin(M_PI) ≠ sin(π) = 0 である。

関連するQ&A

専門家に質問してみよう