アルゴリズムは次のとおりです。この平方根アルゴリズムの名前は何ですか?次のように
res <- 0
for i from 15 downto 0 do:
change the ith bit of result to 1
if res^2 > x then:
change the ith bit of res back to 0
return res
私は完全にそれがどのように動作するかを理解し、私は、このメソッドが呼び出されたのか分かりません。私は平方根の計算方法のためにwikiを見てきましたが、無駄です。これは数字単位の方法ですか?
(関連:How to compute the integer square root of a number in x86-64, without using div?)
他の領域(特にアナログ/デジタル変換)では、この手順を「逐次比較」と呼びます。しかし、平方根では、ニュートンの方法は「逐次近似」とも呼ばれます。あなたはそれを区別するためにこのメソッドを "2進逐次近似"と呼ぶことができます。これは、ニュートンの方法がより高速に収束するため、平方根には使用されません。 –
これは、基底2の実装にbitwise opsを使って、wikipediaが[digit by digit algorithm](https://en.wikipedia.org/wiki/Integer_square_root#Digit-by-digit_algorithm)を呼び出すのはかなり明確です。最近のx86ハードウェアでは、最も高速な整数sqrtはFPのdouble精度のハードウェアを使用することです。 Haswellでは、 'double'への/からの変換は、それぞれの方法で4サイクルの待ち時間と' sqrtsd'のための16サイクルの待ち時間です。 (そして、3命令/ 5命令しかないので、何か他のことがあれば、この待ち時間を容易に隠すことができます。) –
CPUは乗算命令を持たない時代から古代の遺物のように見えます。 (resと2の2つの異なる値を使って、0x8000と0x40000000で初期化されます:1ビット右に1つのres-shiftet、もう1つのres²は各ループで2ビットずつ)、その後に 'res^2 'を簡単に避けることができます6502などのCPUで簡単に実装できること – Tommylee2k