Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab syms可变精度?_Matlab_Variables_Precision_Symbolic Math_Arithmetic Expressions - Fatal编程技术网

Matlab syms可变精度?

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 =

只是在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 = 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
?此外,您需要这些数字做什么?