Matlabは倍精度浮動小数点数を使用して実数を格納します。これらは、 m ^ 2 ^ e
の形式の番号で、 m
は 2 ^ 52
と 2 ^ 53 < code>(仮数)、 e
は指数です。このフォームの場合、数値を浮動小数点数と呼ぶことにしましょう。
計算に使用されるすべての数値は、浮動小数点数でなければなりません。多くの場合、これは式の 2
と 0.5
のように正確に行うことができます。しかし、他の数字、特に小数点以下の数字のほとんどの数字については、これは不可能であり、近似を使用する必要があります。この場合、数値は最も近い浮動小数点数に丸められます。
So, whenever you write something like 0.04
in Matlab, you're really saying "Get me the floating-point number that is closest to 0.04
. In your expression, there are 2 numbers that need to be approximated: 0.04
and 0.4
.
さらに、浮動小数点数の加算や乗算などの演算結果は、浮動小数点数ではない可能性があります。常に m * 2 ^ e
の形式ですが、仮数が大きすぎる可能性があります。したがって、操作の結果を丸めることから追加のエラーが発生します。
一日の終わりには、あなたのような単純な式は、オペランドのサイズの約2 ^ -52倍、つまり約10 ^ -17だけ離れています。
要約すると、式がゼロに評価されない理由は2つあります。
- 始める数字の中には、入力した数字と異なるもの(近似値)があります。
- 中間結果は正確な結果の近似でもあります。