除算なしの立方根のニュートン反復


8

Newtonの方法を検索1/バツに適用するために平方根を計算する際に除算を回避することはかなりよく知られたトリックであり、おそらく除法なしで逆数を見つけるためにNewtonの方法を使用します。

StackOverflowスレッドを救出する際、リンクの腐敗から立方根のニュートン反復を効率的にシードすることで、立方根の除算なしの反復も可能であるはずだと考えました。

たとえば、次のように解決するとします。

バツ−3=a2

次に、およびです。上記の方程式のニュートン反復は単純です:バツ=a−2/3a3=aバツ

xn+1=バツん−バツん−3−a2−3バツん−4=43バツん−13a2バツん4

ここでも、少なくとも分数定数がFP乗算用に事前評価されている場合は、除算演算を回避します。

だから、ある種のことは可能ですが、私は(確かに浅い)Webの検索でそのような方法についての具体的な議論を見つけられませんでした。要するに、賢い人はすでにより良いアイデアを発見しており、あなたの大切な同僚の1人がそれを見て、または考え抜いていたのではないかと思います。

回答:


8

立方根は平方根ほど重要ではありません(たとえば、ベクトルを正規化するため)。そのため、それらについてはあまり説明しません。

一般的に、あなたはニュートン法を適用した場合、あなたが反復を取得する (1 - α - 1)のx + βバツα−β あなただけのように式を選択する必要がありますので、αが負の整数である、それだけで、キューブと平方根、だけでなく、他の合理的な力のためにこの作品ではありません。

(1−α−1)バツ+βαバツ1−α、
α

あなたのスキームは、唯一の間隔に倍精度に収束する7回の反復を必要とする一定の初期推定から出発して1:a∈[12、1]1

ここに画像の説明を入力してください

考慮すべきもう1つの興味深いことは、既存のライブラリが実装するものです。

  • MPFRは整数の立方根を使用して立方根を作成します(http://www.mpfr.org/algo.html、36ページ前後)
  • math/special_functions/cbrt.hpp
    バツん+1=バツん2b+バツん3b+2バツん3。
    〜20div{s,p}{s,d}

a−2/313バツ3−a[12、1]


[1/8、1]

321/3[12、1]
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.