Matlab,k=1.000000000000000,但k==1返回0
我已经读过了,但是我仍然无法理解为什么代码不能像预期的那样工作 在我的代码中,我检查Matlab,k=1.000000000000000,但k==1返回0,matlab,floating-point,Matlab,Floating Point,我已经读过了,但是我仍然无法理解为什么代码不能像预期的那样工作 在我的代码中,我检查k是否近似等于1,但它仍然不起作用: 如果近似值(k、1、eps) 显示(“近似相等”); 其他的 K k==1 大约(k,1,每股收益) abs(k-1)
k
是否近似等于1
,但它仍然不起作用:
如果近似值(k、1、eps)
显示(“近似相等”);
其他的
K
k==1
大约(k,1,每股收益)
abs(k-1)
这不是显示字符串,而是结果(我已启用了格式long
):
这真令人费解!我还试图将错误增加k*1e20
,但结果仍然是1e20
。。。在这里做什么
注意:虽然与问题不太相关,但以下是近似值的定义:
函数r=近似值(a、b、tol)
r=a=b-tol;
结束
编辑:我更改了近似值
功能以避免灾难性取消:
函数r=近似值(a、b、tol)
r=a=b;%假设tol为正
结束
尝试显示:
k - 1.000000000000000
我想你会发现有一个很小但非零的残值。我可能会指出,我无法复制这个(R2015a OS X 64位)。您使用的是什么版本的Matlab?@dfri我在Windows 32位上使用R2015b。请更改您的代码以打印至少17位有效数字,这将允许我们重现您的问题。Daniel Oh可以找到打印17个有效数字的代码,实际上是k=0。999999999999967
@dfri我删除了approx
(现在是r=b
)的减法,发现approx(k,1,1e-15)=1
但是approx(k,1,1e-16)=0
。由于eps~2e-16
我正在考虑在我的ifs中使用大约(k,1,10*eps)
。听起来对吗?
k - 1.000000000000000