【发布时间】:2012-02-09 23:20:56
【问题描述】:
我正在尝试将两个数字相除,一个分子 N 除以一个除数 D。 我正在使用 Newton-Raphson 方法,该方法使用牛顿法来找到 D 的倒数(1/D)。那么除法的结果可以通过将分子N乘以倒数1/D得到N/D。
Newton-Raphson 算法可以找到here
因此,算法的第一步是从 1/D 的初始猜测开始,我们称之为 X_0。
X_0 定义为 X_0 = 48/17-39/17*D
但是,我们必须首先对除数 D 应用位移以使其缩放为 0.5 ≤ D ≤ 1。同样的位移应应用于分子 N 以使商不改变。
然后我们使用公式 X_(i+1) = X_i*(2-D*X_i) 找到 X_(i+1)
由于分子 N、除数 D 和结果都是浮点 IEEE-754 32 位格式,我想知道如何正确应用这种缩放,因为我的 1/D 值不会收敛到一个值,它只是接近 -Inf 或 +Inf(取决于 D)。
我发现有效的是,如果我使 X_0 小于 1/D,算法似乎总是收敛。因此,如果我只使用一个查找表,我总是在其中存储一堆 1/D 值,并且我始终可以确保我有一个存储的 1/D 值,其中 D > Dmin,那么我应该没问题。但这是标准做法吗?
【问题讨论】:
标签: algorithm