如果您没有数学库,您可以使用这种方式来计算三次根:
立方根
double curt(double x) {
if (x == 0) {
// would otherwise return something like 4.257959840008151e-109
return 0;
}
double b = 1; // use any value except 0
double last_b_1 = 0;
double last_b_2 = 0;
while (last_b_1 != b && last_b_2 != b) {
last_b_1 = b;
// use (2 * b + x / b / b) / 3 for small numbers, as suggested by willywonka_dailyblah
b = (b + x / b / b) / 2;
last_b_2 = b;
// use (2 * b + x / b / b) / 3 for small numbers, as suggested by willywonka_dailyblah
b = (b + x / b / b) / 2;
}
return b;
}
它源自sqrt
下面的算法。这个想法是,从 的立方根开始越来越b
小。因此,两者的平均值更接近 的三次根。x / b / b
x
x
平方根和立方根(在 Python 中)
def sqrt_2(a):
if a == 0:
return 0
b = 1
last_b = 0
while last_b != b:
last_b = b
b = (b + a / b) / 2
return b
def curt_2(a):
if a == 0:
return 0
b = a
last_b_1 = 0;
last_b_2 = 0;
while (last_b_1 != b and last_b_2 != b):
last_b_1 = b;
b = (b + a / b / b) / 2;
last_b_2 = b;
b = (b + a / b / b) / 2;
return b
与平方根相反,last_b_1
并且last_b_2
在三次根中需要,因为 b 闪烁。您可以修改这些算法来计算第四根、第五根等。
感谢我 11 年级的数学老师 Herr Brenner 告诉我这个算法sqrt
。
表现
我在具有 16mhz 时钟频率的 Arduino 上对其进行了测试: