1
e = realmin;
x = 1 - e;

fprintf('x is %g',x);

を生成しx is 1ます。ただし、x1から小さなイプシロンを引いた値に設定しようとしています。これは。に等しくなりrealminます。

切り上げを停止するにはどうすればよいですか?

4

1 に答える 1

5

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

于 2013-03-06T15:32:02.230 に答える