稳定性(数值分析)

1 matlab

我试图找到满足以下等式的最大机器数x:x + a = a,其中a是给定的整数.(我不允许使用eps.)

这是我的代码(不是真的有效):

function [] = Largest_x()

a=2184;
x=0.0000000001
while (x+a)~=a
    x=2*x;
end
fprintf('The biggest value of x in order that x+a=a \n (where a is equal to %g) is : %g \n',a,x);
end
Run Code Online (Sandbox Code Playgroud)

任何帮助将非常感激.

Jon*_*nas 9

答案是eps(a)/2.

eps是下一个浮点数的差异,所以如果你向浮点数加一半或更少,它就不会改变.例如:

100+eps(100)/2==100
ans =
     1

%# divide by less than two
100+eps(100)/1.9==100
ans =
     0

%# what is that number x?
eps(100)/2
ans =
   7.1054e-15
Run Code Online (Sandbox Code Playgroud)

如果您不想依赖eps,可以将数字计算为

2^(-53+floor(log2(a)))
Run Code Online (Sandbox Code Playgroud)