我在理解这些双精度的精度如何影响Matlab中算术运算的结果时遇到了一些麻烦.我认为既然a和b都是双倍的,他们就可以进行高达那么精确的操作.我意识到可能存在舍入错误,但由于这些数字完全在64位数字表示内,所以我认为这不是问题.
a = 1.22e-45
b = 1
a == 0
ans = 0 %a is not equal to zero
(a + b) == 1
ans = 1
Run Code Online (Sandbox Code Playgroud)
为什么它能够携带足够的精度来识别!= 0但是当加到1时它没有显示任何变化.
我有等式y = 3(x + 1)^ 2 + 5(x + 1)^ 4.
使用Horner方案,我可以用这种形式评估这个多项式,y = 8 + x(26 + x(33 + x(20 + 5x))),因此需要8次算术运算.
我也可以用这种形式评估它,y =(x + 1)^ 2*((5x + 10)x + 8),需要7次操作.
我被告知这可以在5次操作中完成,但Horner的算法应该是最有效的,它只能在7次操作中完成.我错过了什么吗?