c++ - 将巴比伦平方根算法推广到 n 次根

标签 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 是根的幂?例如,如果 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 .我建议您阅读它,因为它提供了更深入的解释。

关于c++ - 将巴比伦平方根算法推广到 n 次根,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32673276/

相关文章:

c++ - 当 C++ 中也有非模板函数时,调用专门的模板函数

java - 在java中测试公式中的括号是否匹配,我的算法是否正确?

java - 面试问题:优化一种函数,该函数可以找到给定范围内包含x或y的数字数量,但不能同时找到两者?

c++ - 这段检查平衡括号的代码是如何工作的?

python - 如何在加权图中找到权重总和最大的路径?

c++ - 关于C++中STL容器的问题

c++ - 如何清除arduino输出串口窗口中的垃圾字符?我需要使用软件串行发送和接收字符

c++ - 接口(interface)和实现设计结构?

c++ - 如何检查网络地址是否在Qt中是本地的

algorithm - 队列平均 O(1) 入队和出队