4

数学から、90 度の角度の余弦は 0 であることがわかっていますが、Python はそれよりも少し大きいと言います。

import math
math.cos(math.radians(90))
6.123233995736766e-17

Python と数字の「0」の間の問題は何ですか?

4

2 に答える 2

7

私の後に繰り返して:

コンピュータは実数を処理できません。

Python は倍精度の IEEE 浮動小数点数を使用します。これは 2 進数で 53 桁の精度に丸められ、範囲に制限があります。π/2 は無理数であるため、コンピューターはそれを表現可能な最も近い数 (または表現可能な近い数 — 一部の操作では正確な丸めが行われ、一部の操作では 1/2 ULP を超えるエラーが発生します) に丸められます。

したがって、コンピューターに を計算するように要求したことはありcos(π/2)ません。実際に を計算するように要求したことになります。cos(π/2+ε)ここで、ε は π/2 を計算するための丸め誤差です。結果は再び丸められます。

Excel (または別のプログラム) が正しい結果を表示するのはなぜですか?

可能性 1:プログラムが数値計算ではなく記号計算を行っている。これは、Excel ではなく、Mathematica や Maxima などのプログラムに当てはまります。

可能性 2:プログラムがデータを隠している (最も可能性が高い)。Excel は、要求した数字のみを表示します。

>>> '%.10f' % math.cos(math.radians(90))
'0.0000000000'

Python には、float を出力するための微調整された関数があり、テキストとの間の往復に耐えられるようになっています。これは、Python がデフォルトで、たとえば よりも多くの数字を出力することを意味しますprintf

可能性 3:使用しているプログラムに、キャンセルされた 2 つの丸めエラーがありました。

于 2013-02-16T11:30:17.273 に答える