有时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
答案 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);