Java中虽然可以用Math.sqrt获得某值的平方根,但是该值必须是double类型的。可是有些项目对数值精度要求比较高,我们一般会用BigDecimal来存储,BigDecimal并不提供计算平方根的方法,于是我们只能自己动手丰衣足食了!下面介绍使用牛顿迭代法计算某值的平方根。

牛顿迭代法(Newton's method)又称为牛顿-拉夫逊(拉弗森)方法(Newton-Raphson method),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法。公式为:(x+a/x)/2

这种方法可以很有效地求出根号a的近似值:例如,我想求根号2等于多少。假如我猜测的结果为4,虽然错的离谱,但你可以看到使用牛顿迭代法后这个值很快就趋近于根号2了:

(4 + 2 / 4) / 2 = 2.25

(2.25 + 2 / 2.25) / 2 = 1.56944..

(1.56944.. + 2/1.56944..) / 2 = 1.42189..

(1.42189.. + 2/1.42189..) / 2 = 1.41423..

Java实现代码如下:

public static BigDecimal sqrt(BigDecimal value, int scale){

BigDecimal num2 = BigDecimal.valueOf(2);

int precision = 100;

MathContext mc = new MathContext(precision, RoundingMode.HALF_UP);

BigDecimal deviation = value;

int cnt = 0;

while (cnt < precision) {

deviation = (deviation.add(value.divide(deviation, mc))).divide(num2, mc);

cnt++;

}

deviation = deviation.setScale(scale, BigDecimal.ROUND_HALF_UP);

return deviation;

}

开方在java中怎么计算_JAVA BigDecimal使用牛顿迭代法计算平方根(开方)相关推荐

  1. java bigdecimal 开方_JAVA BigDecimal使用牛顿迭代法计算平方根(开方)

    Java中虽然可以用Math.sqrt获得某值的平方根,但是该值必须是double类型的.可是有些项目对数值精度要求比较高,我们一般会用BigDecimal来存储,BigDecimal并不提供计算平方 ...

  2. Java中使用Rational类实现分数精确的计算,

    Java中使用Rational类实现分数精确的计算, 在Java中实现分数的精确计算(Rational类) 在Java中想要进行有分数精确的计算,例如1/3=0.33333333-,这个数字不能用do ...

  3. mysql 立方根函数_Java实现牛顿迭代法求解平方根、立方根

    一.简介 牛顿迭代法(Newton's method)又称为牛顿-拉夫逊(拉弗森)方法(Newton-Raphson method),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法. ...

  4. 圆的周长在java中怎么表示_Java基础之计算圆的周长

    最简单的程序 圆形的周长公式: C=πd=2πr π是圆周率,约等于3.14,公式中r为圆的半径,d为圆的直径 在数学领域,称之为公式,在计算机领域,习惯称之为算法. 算法描述的是,如果要解决一个问题 ...

  5. 开方在java中怎么计算_不使用java JDK已有的API实现任意数字的开方

    在java面试中,我们经常被要求,不使用java jdk自带的API来实现任意数字的开方实现,本文作者总结了下这个需求的实现方法,并将实现代码放上,供朋友们参考,不喜勿喷,谢谢.package com ...

  6. Java中的运算神器 BigDecimal,了解一下?

    前言 我们都知道浮点型变量在进行计算的时候会出现丢失精度的问题.如下一段代码: System.out.println(0.05 + 0.01); System.out.println(1.0 - 0. ...

  7. java中椭圆类_Java中的Graphics2D类基本使用的教程

    Java中的Graphics2D类基本使用的教程 Java语言在Graphics类提供绘制各种基本的几何图形的基础上,扩展Graphics类提供一个Graphics2D类,它拥用更强大的二维图形处理能 ...

  8. java中日期怎么_Java 中的日期处理

    最初学习 Java 时是采用学校教材和市面上的一些 Java 视频教程进行学习,到了工作中才发现有些 API 或包已经过时了.最近使用 Java 中的日期处理时发现 java.util.date 与 ...

  9. java中保留小数位_Java中保留两位小数的方法

    Java中保留4位小数的方法: import java.math.BigDecimal; import java.text.DecimalFormat; import java.text.Number ...

  10. 在java中原始时间_Java 日期时间

    Java 日期时间 java.util包提供了Date类来封装当前的日期和时间. Date类提供两个构造函数来实例化Date对象. 第一个构造函数使用当前日期和时间来初始化对象. Date( ) 第二 ...

最新文章

  1. MySQL和Linux试题_Linux运维必会的MySql题之(一)
  2. unix cut命令
  3. 【Java】System.out.println(Integer.MAX_VALUE+1);背后的二进制故事与启示
  4. 在机器学习中为什么要进行 One-Hot 编码?
  5. WEB.NET error:请添加一个名为 jquery (区分大小写)的 ScriptResourceMapping 解决方案
  6. 遍历数组是什么意思_漫画:寻找无序数组的第k大元素(修订版)
  7. C#的Access数据库的连接类
  8. c#调用java的webservice方法,C# 调用 Java WebService | 思考的极致
  9. 首次在matable中安装libsvm碰到的问题和解决方法---- mxGetIr 已过时 错误
  10. 2021SC@SDUSC Zxing开源代码(十一)Data Matrix二维码(四)
  11. c语言程序书写遵循的规则,C程序书写时应遵循的规则
  12. 4个网页翻译工具,一键就能将网页英文翻译成中文
  13. 英语每日一句: What’s your point? 你到底想说什么?
  14. 三国群英传M玩亚服好还是台服好?服务器选择推荐
  15. 宏基因组(鸟枪法测序)—微生物同源基因引物设计
  16. JS的map方法和Map对象
  17. ionic4滑动加载(ion-infinite-scroll)
  18. 防红直连php,全新网址缩短防封 QQ/微信防红 短网址生成系统PHP源码
  19. cimcoeditv5怎样模拟刀路_cimco edit v5怎么不显示刀具运动轨迹
  20. 自来水收费系统毕业论文(J2EE )

热门文章

  1. python京东笔试题象棋马走到指定位置方法数
  2. 修改html文字大小,css如何调整字体大小?
  3. QQ空间照片回收站在哪里,QQ隐藏的一些功能
  4. P800刷英文WM6教程以及常见问题整理
  5. Win10 新机,这些必装软件你拥有了吗?美化、写作、下载、效率神器...这篇攻略请收藏...
  6. 机票预订系统的数据流程图及实体联系图
  7. Aircrack-ng破解无线WIFI密码
  8. ubuntu截图快捷方式
  9. ffmpeg音频格式转换
  10. 人工智能NLP项目_深度学习和神经网络(1)