八度 - 显示"真实'零

时间:2017-09-04 14:57:53

标签: octave

有时Octave会显示一个非常接近于零的数字,而不是" real"零。

e.g:

>> sin(pi)
ans =   1.2246e-016

我理解这是由于浮点运算问题等等,但它很烦人......

有没有办法获得预期的0而不是几乎为零的值?

修改

更现实的例子是:

>> cos(pi) + i*sin(pi)
ans = -1.0000e+000 + 1.2246e-016i

对结果应用一些舍入函数不会有帮助,我也不想在计算中插入舍入函数。

难道不能告诉Octave"不那么精确"

其他不太复杂的工具(如SpeedCrunch)可以做到这一点,开箱即用":

cos(pi) + i*sin(pi)
= -1

1 个答案:

答案 0 :(得分:3)

定义

有点模棱两可
  

非常接近零

但是你可以使用round函数,它舍入到最接近的整数

round(sin(pi))

当然这对sin函数不起作用,因为所有返回值都在[-1 1]之间。

因此,如果数字小于某个范围,您可以定义通用函数来截断数字。

function retval = bound (num,boundval)

  if  (abs(num) < boundval)
    retval = 0;
  else
    retval = num;
  endif
endfunction

如果num参数在[-bound bound]

的范围内,则此函数将设置返回零

您可以将其用作例如

bound(myvar,0.001);