【发布时间】:2013-09-06 23:22:20
【问题描述】:
只是在 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 工作并显示正确的舍入,但第二个没有!
【问题讨论】:
-
N和i在您的附加代码中有何关联? -
抱歉,
N是i! -
你期望什么输出?我得到
0.00499999999999999924、-0.09500000000000000111和-0.08999999999999999667 -
我得到了四舍五入的值,特别是
0.10。我把我的代码从循环中拿出来,发现了一个问题。如果我有if abs(val-1) == 1后跟break;和end,我会遇到舍入问题。否则不行。有什么想法吗? -
您从哪里获得
0.1?此外,您需要这些数字做什么?
标签: matlab variables precision symbolic-math arithmetic-expressions