0

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

4

2 回答 2

1

它与浮点表示以及Matlab 如何显示这些数字以提高可读性有关。如果将此行添加到代码的末尾:

sprintf('%22.20f',val)

你会得到:

ans =

0.00499999999999999924

编辑
尽管它在技术上处理 Python,但该网站提供了关于浮点表示的限制的简要概述。

于 2013-09-03T16:36:38.360 回答
0

您是否可能只是将显示数字的偏好设置为短而不是长?如果您消除了这种可能性,那将有所帮助。

于 2013-09-03T22:24:46.937 回答