我一直在寻找根算法,并遇到了巴比伦算法。我真的很喜欢它,因为它简单易懂。但问题是它只取平方根,当我制作一个可以取任意幂数的根的函数时。我只是尝试取正整数。
函数如下:
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/