Matlab syms可变精度?
只是在matlab中存在一些可变精度的问题 我有密码:Matlab syms可变精度?,matlab,variables,precision,symbolic-math,arithmetic-expressions,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=0.0049999,但我得到的是val=0.0050 有人知道为什么吗 谢谢 编辑:添加额外代码 x = 0.1; syms y; S = solve(x+1==(1+y)/(1-y),y); y =
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=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可以工作并显示正确的舍入,但是第二个不行 这与可读性以及如何进行有关。如果将此行添加到代码末尾:
sprintf('%22.20f',val)
您将获得:
ans =
0.00499999999999999924
编辑尽管它在技术上涉及Python,但它简要概述了浮点表示的局限性 您是否可以只将显示数字的首选项设置为短而不是长?如果您排除了这一可能性,它会有所帮助。它是否只是因为打印整数的格式而看起来是四舍五入的?我发布的代码只是一个小片段,实际函数在一个循环中。如果我把你的指纹放在环上面,它就行了。然而,在循环中,我仍然遇到取整问题。。。我现在将在OP中发布代码。
N
和I
在您的附加代码中如何关联?对不起,N
是一个I
!你期望什么样的产出?我得到了0.0049999999999924
,-0.0950000000000000111
和-0.089999999667
我得到了四舍五入值,特别是0.10
。我从循环中取出代码,发现了一个问题。如果我有如果abs(val-1)==1
然后是中断
和结束
,我得到了舍入问题。否则就不行了。有什么想法吗?你从哪里得到0.1
?此外,您需要这些数字做什么?