您的位置:首页 > 编程语言 > Java开发

牛顿迭代法对大数进行开平方操作(java版)

2011-12-29 15:01 239 查看
求f(x)=0的一实根,

可以采用牛顿迭代法,根据迭代公式

x(n+1)= x(n)-f(x(n))/f '(x(n))

注意后面是f(x)的导数

对大数a进行开平方操作呢,可以认为是求

x^2-a=0在x>0时候的一实根

java提供了现成的BigDecimal类,直接调用其api即可

上简单代码

import java.math.*;
public class Yaowei {
public static void main(String[]args) throws Exception{
final String a = "1234567896554987987465455642132132133213213213";
BigDecimal a1 = new BigDecimal(a.substring((int)(a.length()/2)));
int i = 0;
final double flag = 0.001;
while((i++) < 100)
{
BigDecimal temp = Yaowei.calc(a1);
if (a1.subtract(temp).doubleValue() < flag)
{
a1 = temp;
System.out.println(i);
break;
}
a1 = temp;
}
System.out.println(a1);
}
private static BigDecimal calc(BigDecimal b){
return b.subtract((b.multiply(b).subtract(new BigDecimal("1234567896554987987465455642132132133213213213"))).divide(new BigDecimal("2").multiply(b),3,BigDecimal.ROUND_HALF_EVEN));
}

}


这个方法也可以判断某个大数是不是完全平方数,

迭代收敛后再验证一下即可
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: