e = realmin;
x = 1 - e;
fprintf('x is %g',x);
を生成しx is 1
ます。ただし、x
1から小さなイプシロンを引いた値に設定しようとしています。これは。に等しくなりrealmin
ます。
切り上げを停止するにはどうすればよいですか?
realmin
との指数の違いを考えてみましょう。1
違いは約308
です。つまり、Matlabは表現するのに約308桁(おそらく最後の1桁を除いてすべて9桁)が必要です1-realmin
が、Matlabはもちろん、10進数の15桁または16桁しか提供しない倍精度浮動小数点数でネイティブに機能します。
「問題」は、浮動小数点の微妙な点の1つを理解できないことの1つです。に最も近い表現可能な倍精度数1 - realmin
はです1
。
必要な関数はMatlabのeps
です。一方は、返品の評価として、または必要に応じて(セット1 - eps(1)
で)表されます。ここで少し紛らわしい表現です。format long
1.000000000000000
1 - eps(1) == 1
0
false