将巴比伦平方根算法概括为n根

时间:2015-09-19 21:09:25

标签: c++ algorithm

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

这是功能:

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 = 3,则采用立方根。

1 个答案:

答案 0 :(得分:0)

牛顿的方法类似于巴比伦方法,可以用来提取任何力量的根。我们假设 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 的最大整数。