题目描述
•计算一个数字的立方根,不使用库函数
详细描述:
•接口说明
原型:
public static double getCubeRoot(double input)
输入:double 待求解参数
返回值:double 输入参数的立方根,保留一位小数
输入描述:
待求解参数 double类型
输出描述:
输入参数的立方根 也是double类型
题解
设函数f(x) = x3 - A,若求A的平方根,则有f(x) = 0
由牛顿迭代公式 x = x0 - f(x0) / f `(x0)
得到下一个近似值xn+1 = xn - (xn3 - A) / (3xn2) = xn - (x3 - A)/xn2 /3 = xn - (xn - A/xn/xn)/3 = (A/xn/xn + 2 * xn)/3
代码实现:
#include <bits/stdc++.h>
double func(double guess,double x)
{
if(std::abs(guess * guess * guess - x) < 0.0000001)
return guess;
else
return func((x / guess / guess + 2 * guess) / 3, x);
}
int main(int argc, char * argv[])
{
double dInput;
std::cin >> dInput;
double guess = 1;
printf("%.1f", func(guess, dInput));
return 0;
}

京公网安备 11010502036488号