牛顿迭代法对大数进行开平方操作(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即可
上简单代码
这个方法也可以判断某个大数是不是完全平方数,
迭代收敛后再验证一下即可
可以采用牛顿迭代法,根据迭代公式
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)); } }
这个方法也可以判断某个大数是不是完全平方数,
迭代收敛后再验证一下即可
相关文章推荐
- Java从零开始学二十九(大数操作(BigIntger、BigDecimal)
- Java对二叉搜索树进行插入、查找、遍历、最大值和最小值的操作
- Java操作Hbase进行建表、删表以及对数据进行增删改查,条件查询
- Java连接数据并进行操作
- 【Java】通过DES加密和解密工具,对字符串进行加密和解密操作
- java 集合框架(TreeSet操作,自动对数据进行排序,重写CompareTo方法)
- JavaWEB开发时FCKeditor类似office界面的ajax框架,加入后就能做界面类似office,能进行简单的文本编辑操作+配置手册
- Java操作Hbase进行建表、删表以及对数据进行增删改查,条件查询
- 【java基础:JDBC】采用DBUtils工具集进行数据库的增删改操作的demostration
- Java中的大数操作(相加,相减,相乘)
- Java连接本地MySQL数据库进行增删改查操作
- java 操作FTP进行文件操作
- Java操作Hbase进行建表、删表以及对数据进行增删改查,条件查询
- java操作Cookie,进行添加、读取、删除操作
- java使用jdbc对mysql数据库进行操作的步骤和代码
- java jacob 操作word 文档,进行写操作,如生成表格,添加 图片
- 基础--JAVA对Mysql进行连接、插入、修改、删除操作
- java大数操作积累
- java 对两个list进行“交集,并集,差集,去重复并集”的操作
- 用 Java 对 hbase 进行CRUD增删改查操作