数学から、90 度の角度の余弦は 0 であることがわかっていますが、Python はそれよりも少し大きいと言います。
import math
math.cos(math.radians(90))
6.123233995736766e-17
Python と数字の「0」の間の問題は何ですか?
数学から、90 度の角度の余弦は 0 であることがわかっていますが、Python はそれよりも少し大きいと言います。
import math
math.cos(math.radians(90))
6.123233995736766e-17
Python と数字の「0」の間の問題は何ですか?
私の後に繰り返して:
コンピュータは実数を処理できません。
Python は倍精度の IEEE 浮動小数点数を使用します。これは 2 進数で 53 桁の精度に丸められ、範囲に制限があります。π/2 は無理数であるため、コンピューターはそれを表現可能な最も近い数 (または表現可能な近い数 — 一部の操作では正確な丸めが行われ、一部の操作では 1/2 ULP を超えるエラーが発生します) に丸められます。
したがって、コンピューターに を計算するように要求したことはありcos(π/2)
ません。実際に を計算するように要求したことになります。cos(π/2+ε)
ここで、ε は π/2 を計算するための丸め誤差です。結果は再び丸められます。
可能性 1:プログラムが数値計算ではなく記号計算を行っている。これは、Excel ではなく、Mathematica や Maxima などのプログラムに当てはまります。
可能性 2:プログラムがデータを隠している (最も可能性が高い)。Excel は、要求した数字のみを表示します。
>>> '%.10f' % math.cos(math.radians(90))
'0.0000000000'
Python には、float を出力するための微調整された関数があり、テキストとの間の往復に耐えられるようになっています。これは、Python がデフォルトで、たとえば よりも多くの数字を出力することを意味しますprintf
。
可能性 3:使用しているプログラムに、キャンセルされた 2 つの丸めエラーがありました。