假设我们正在求解二次方程 ax2 + bx + c = 0,其中 a = 1.22、b = 3.34 和 c = 2.28,使用基数 β = 10 和精度 p = 3 的归一化浮点系统。 (a) b2 − 4ac 的计算值是多少? (b) 在实数(精确)算术中判别式的精确值是多少? (c) 判别式计算值的相对误差是多少?
试图在网上找到它但失败了
如果二阶多项式
ax2 + bx + c = 0
求解为:
(-b ± sqrt(b*b - 4*a*c))/(2*a)
和
a = 1.22
、b = 3.34
和c = 2.28
,其中base β = 10且精度p = 3,我们有
(-3.34 ± sqrt(3.34*3.34 - 4*1.22*2.28))/(2*1.22)
(-3.34 ± sqrt(r3(11.1556) - r3(11.1264)))/(2*1.22)
(-3.34 ± sqrt( 11.2 - 11.1 ))/ 2.44
(-3.34 ± sqrt( 0.100 ))/ 2.44
(-3.34 ± r3( 0.3162277660168... ))/ 2.44
(-3.34 ± 0.316 ) / 2.44
a)
的计算值是多少?b2 − 4ac
如果
r3()
是最接近的 3 位有效小数位:
d1 = 0.1
(b) 判别式在实数(精确)算术中的精确值是多少?
d0 = 3.34*3.34 - 4*1.22*2.28
(c)判别式计算值的相对误差是多少?
rel_err = (d1 - d0)/d0
代替
b*b - 4*a*c
,代码可以使用数学上的相等:
(b - 2*sqrt(a*c)) * (b + 2*sqrt(a*c))
并得出不同的 computed 判别式。
(3.34 - 2*sqrt(1.22*2.28)) * (3.34 + 2*sqrt(1.22*2.28))
(3.34 - 2*sqrt(r3(2.7816)) * (3.34 + 2*sqrt(r3(2.7816))
(3.34 - 2*sqrt( 2.78 ) * (3.34 + 2*sqrt( 2.78 )
(3.34 - 2*r3(1.6673332...) * (3.34 + 2*r3(1.6673332...)
(3.34 - 2* 1.67 ) * (3.34 + 2* 1.67 )
(3.34 - 3.34 ) * (3.34 + 3.34 )
0 * ...
0
关键是近浮点值的减法有严重的计算精度损失的风险。