//求解立方根
/*思路:
用牛顿迭代法,即可解决。
设 r 是的根,选取 x0 作为 r 的初始近似值:
过点(x0, f(x0))做曲线y = f(x)的切线L,L的方程为 y = f(x0) + f′(x0)(x−x0),求出L与x轴交点的横坐标 x1 = x0−f(x0)/f′(x0),称 x1为 r 的一次近似值。
过点(x1, f(x1)) 做曲线 y = f(x) 的切线,并求该切线与x轴交点的横坐标 x2 = x1−f(x1)/f′(x1),称 x2 为 r 的二次近似值。
重复以上过程,得 r 的近似值序列。其中, xn + 1 = xn−f(xn)/f′(xn) 称为 r 的 n + 1 次近似值,上式称为牛顿迭代公式。
首先确定我们的函数 f(x):
f(x) = x3−m
其中 m 是一个常数,程序的输入。求导函数:
f′(x) = 3x2
*/
#include <iostream>
#include<iomanip>
using namespace std;
double getCubeRoot(double m)
{
double x0, xn = 1;
const double err = 0.01;
double y = xn*xn*xn;
while (y-m>err||y-m<-err)
{
x0 = xn;
xn = x0 - (x0*x0*x0 - m) / (3 * x0*x0);
y = xn*xn*xn;
}
return xn;
}
int main()
{
double m,result;
cin >> m;
result = getCubeRoot(m);
//cout << result << endl;//默认输出是6精度的
cout << fixed << setprecision(1) << result << endl;// 加了fixed意味着是以固定点方式显示,所以这里的精度指的是小数位,输出为6.0
return 0;
}
华为OJ题目(十五):求解立方根
最新推荐文章于 2020-07-13 23:38:07 发布