华为OJ题目(十五):求解立方根

//求解立方根

/*思路:
用牛顿迭代法,即可解决。

设 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;
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值