获得非常小的数字而不是零

时间:2014-11-07 06:04:14

标签: matlab floating-point

我正在做一些计算,我最终得到了这个问题,而这个问题并没有达到零。在我的等式中,理论部分表明结果为零但是Matlab抛出非常小的非敏感数z = -4.4409e-16z这里应为零。在here中,已经讨论了为什么会发生这种问题。我试图将此值传递给cos()以获得一个结果,实际上我得到了一个。我的问题是,现在Matlab将此值视为零还是按原样处理?另一个问题是我应该将该值假设为零,以便我可以将此值重新指定为零?

1 个答案:

答案 0 :(得分:4)

它不是零,它是你看到的价值。虽然没有严格的规则可以决定可以将其视为零(如果不是零),但是有一个函数可以为给定的数据类型返回一个有用的数字来帮助你决定重要的是什么,eps

D = eps(X), is the positive distance from ABS(X) to the next larger in
magnitude floating point number of the same precision as X.

或者你可以在没有输入变量的情况下调用它:

eps, with no arguments, is the distance from 1.0 to the next larger double precision 
number, that is eps with no arguments returns 2^(-52).

例如,

>> eps
ans =
   2.2204e-16
>> eps('double')
ans =
   2.2204e-16
>> eps('single')    
ans =
  1.1921e-07

因为通常会按顺序计算多个浮点运算,所以得到的值可能更高(在您的情况下)。如果您并不十分关注精度,那么您可以将eps的倍数视为零。