0%

算法-不用库函数计算立方根

计算浮点型数字的立方根

最近遇到一道题,题目描述这样
不使用库函数,计算一个数字的立方根
麻烦的点是输入是double类型
假若规定输入的是整形,那很好做了,遍历计算就好,但是浮点型有点懵,遍历是不行了,因为每一步的跨度是不知道的。
有想过先算原来浮点型的精度位数,然后以精度为遍历,貌似可行。但是感觉有点硬,不够优雅.
最后上网查看一下比较正常的做法,恍然大雾,忘了泰勒级数了

求解 $ f(x) = x^3 = 0 $

$ f(x) = x^3 - a = 0 $
利用泰勒展开,即f(x)在$x_0$处的函数值为
$ f(x) = f(x_0) + f \prime(x_0)(x - x_0) = x_0^3 - a + 3x_0^2(x - x_0) $
$ x = \frac{2x_0^2 - a}{3x_0^2} $

1
2
3
4
5
6
double fun(double n) {
double x = 1.0;
while(abs(x*x*x - n) > 1e-9)
x = x - ((x*x*x - n) / (3*x*x));
return x;
}

还有一种方法是用二分法求解