浮点系统中的二次公式

问题描述 投票:0回答:1

假设我们正在求解二次方程 ax2 + bx + c = 0,其中 a = 1.22、b = 3.34 和 c = 2.28,使用基数 β = 10 和精度 p = 3 的归一化浮点系统。 (a) b2 − 4ac 的计算值是多少? (b) 在实数(精确)算术中判别式的精确值是多少? (c) 判别式计算值的相对误差是多少?

试图在网上找到它但失败了

floating-point precision
1个回答
0
投票

如果二阶多项式

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  

关键是近浮点值的减法有严重的计算精度损失的风险。

© www.soinside.com 2019 - 2024. All rights reserved.