簡體   English   中英

將巴比倫平方根算法概括為n根

[英]Generalizng the Babylonian Square Root Algorithm to nth roots

我一直在尋找根算法,並遇到了巴比倫算法。 我非常喜歡它,因為它簡單易懂。 但問題是它只需要平方根,當我正在創建一個能夠以任何權力取得數字根的函數時。 我只是嘗試采取正整數。

這是功能:

double functions::rot(double x, double y) {
    double z = x;
    double w = 1;
    double e = 0.000001; 
    while (z - w > e){
        z = (z + w) / 2;
        w = x / z;
    }
    return z;
}

y就是力量。 有沒有人有辦法改變這個算法,所以y是根的力量? 例如,如果y = 3,則采用立方根。

w = x / z更改為w = x / z*z的注釋僅為1/3 (雙關語意)正確。 您還需要另外兩個更改,我認為這些更改在此Python代碼中很明顯:

def rot(x, y): # 
    z = x
    w = 1
    e = 0.000001
    while (z - w > e):
        z = ((y - 1) * z + w) / y
        w = x / (z ** (y - 1)) # a ** b is a to the power of b in Python
                               # you might want to use modular exponentiation in C++
                               # (or not if y is double...)
    return z


print(rot(64, 3)) # prints 4
print(rot(59, 6)) # prints 1.9730678338673044

請參閱此處以供參考 我建議你閱讀它,因為它提供了更深入的解釋。

牛頓的方法類似於巴比倫方法,可用於提取任何能量的根。 我們假設k ,根和輸入的n都是正整數; u的賦值中的兩個除法都是整數除法(忽略余數):

function iroot(k, n)
    k1, u, s := k-1, n, n+1
    while u < s
        u := (u * k1 + n / (u ** k1)) / k
        s := u
    return s

警告:未經測試的偽代碼。 函數iroot在自身乘以k次時返回不超過n的最大整數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM