在matlab中遇到一些变精度问题。
我有代码:
x = 0.1;
syms y;
S = solve(x+1==(1+y)/(1-y),y);
y = double(S);
val = abs(((2^2)*(y^2))/(2*(y-1)^2))
但是val总是四舍五入。
我应该val = 0.0049999
,但我得到的是val = 0.0050
。
任何人都知道为什么?
感谢。
编辑:添加额外代码
x = 0.1;
syms y;
S = solve(x+1==(1+y)/(1-y),y);
y = double(S);
val = abs(((2^2)*(y^2))/(2*(y-1)^2))
sprintf('%22.20f',val)
for i=1:2
val= val+((2^i)*(y^i))/(i*(y-1)^i);
sprintf('%22.20f',val)
end
第一个sprintf工作并显示正确的舍入,但第二个没有!!
答案 0 :(得分:1)
它与floating-point representation和Matlab displays such numbers的可读性有关。如果您将此行添加到代码的末尾:
sprintf('%22.20f',val)
你会得到:
ans =
0.00499999999999999924
修改强>
即使它在技术上处理Python,this website提供了关于浮点表示的局限性的简要概述。
答案 1 :(得分:0)
您是否有可能只是将显示数字的首选项设置为短而不是长?如果你把它作为一种可能性消除它会有所帮助。