c – 将巴比伦平方根算法推广到第n个根

我一直在寻找根算法,并遇到了巴比伦算法.我非常喜欢它,因为它简单易懂.但问题是它只需要平方根,当我正在创建一个能够以任何权力取得数字根的函数时.我只是尝试采取正整数.

这是功能:

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

请参阅此处获取reference.我建议您阅读它,因为它提供了更深入的解释.

点赞