我试图使用汇编代码计算x的浮点平方根,使用newton-raphson方法首先找到平方根(1 / sqrt(x)),然后乘以x得到sqrt(x) .

但是,我正在阅读关于newton-raphson分区的维基百科页面,看起来根据你如何计算X_ {i 1},你需要在中间步骤中有不同的精度 .

来自Wikipedia

从计算的观点来看,表达式X_ {i 1} = X_i X_i(1-DX_i)和X_ {i 1} = X_i(2-DX_i)不相等 . 为了在使用第二个表达式的同时获得具有n位精度的结果,必须计算X_i和(2-DX_i)之间的乘积,其具有所需精度的两倍(2n位) . 相比之下,X_i和(1-DX_i)之间的乘积只需要以n位的精度计算 . “

所以,我有两个问题:

  • 我不明白为什么必须以两倍所需的精度(2n位)计算X_i和(2-DX_i)之间的乘积,以获得精度为n位的结果 . 有人可以解释一下原因吗?

  • Newton-Raphson Square Root是否有类似的东西?例如,我正在计算X_ {i 1} = X_ (3/2 - 1/2 N X_ ^ 2)但这也可以计算为X_ X_ (1 / 2 - 1/2 N X_ ^ 2) . 一个表达式是否需要更高的中间精度,就像Newton-Raphson分部一样?是否有一种不同的格式我应该只需要n位精度来获得n位精度的结果?

我正在寻找错误<= 1 ulp的结果