牛顿迭代法

创新工厂的笔试题:

不用库函数sqrt(),求一个整型数N的开方,要求精度达到0.001即可。


在这里首先介绍一下牛顿迭代法:

假设一个方程为

f(x) = 0;

那么假设其解为x0,则用泰勒级数展开之后可得:

f(x) = f(x0) + f'(x0)(x - x0) = 0

其中x为其近似解。

根据上式推导出:

x = x0 - f(x0) / f'(x0)

这是一个递推公式,此处可以假设x0为近似解,递推无数次之后,都可以得到近似于正确解的值x


现在来看这道笔试题:

f(x) = x * x - N

我们可以假设一个近似解d = 1.0,根据牛顿迭代法,递推无数次之后可以得到精确的近似解。

因此:

x = d - f(d) / f'(d)

   = d - (d * d - N) / (2d)

   = (d + N / d) / 2

将上式用函数迭代至精度满足要求即可。


最终函数相当简单:

double SQRT(unsigned int N) {
	double d = 1.0;
	while (abs(d * d - N) > 1e-9) {
		d = (d + N / d) / 2;
	}
	return d;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值