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