【发布时间】:2015-09-19 21:09:25
【问题描述】:
我一直在寻找根算法,偶然发现了巴比伦算法。我真的很喜欢它,因为它简单易懂。但问题是它只取平方根,当我制作一个可以取任意幂的数字的根的函数时。我只是想取正整数。
函数如下:
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),你会得到什么? -
巴比伦方法的图形解释是调整矩形边的长度直到得到一个正方形,同时保留给定的面积。您可以通过调整立方体、超立方体等边缘之一的长度并(一次)调整其他边缘以使其更接近实际图形,轻松将其抽象到更高的维度。
-
在 x = 64 时将` w = x/z` 更改为
w = x/(z*z)给我 3.812388。 -
抱歉,应该也将
z - w > e更改为std::abs(z-w) > e。