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)
任何帮助将非常感激.
答案是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)