e = realmin;
x = 1 - e;
fprintf('x is %g',x);
を生成しx is 1ます。ただし、x1から小さなイプシロンを引いた値に設定しようとしています。これは。に等しくなり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 long1.0000000000000001 - eps(1) == 10false