matlab syms变量精度?

时间:2013-09-03 16:25:04

标签: matlab variables precision symbolic-math arithmetic-expressions

在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工作并显示正确的舍入,但第二个没有!!

2 个答案:

答案 0 :(得分:1)

它与floating-point representationMatlab displays such numbers的可读性有关。如果您将此行添加到代码的末尾:

sprintf('%22.20f',val)

你会得到:

ans =

0.00499999999999999924

修改
即使它在技术上处理Python,this website提供了关于浮点表示的局限性的简要概述。

答案 1 :(得分:0)

您是否有可能只是将显示数字的首选项设置为短而不是长?如果你把它作为一种可能性消除它会有所帮助。