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 bigdecimal 开方_JAVA BigDecimal使用牛顿迭代法计算平方根(开方)相关推荐

  1. python牛顿迭代法求平方根_牛顿迭代法计算平方根

    public static double sqrt(doublex) {if(x<0)return Double.NaN;//not a number double err=1e-15;doub ...

  2. 牛顿迭代法计算平方根

    突然看到这个古老的算法,但是发现在图像渲染里用处可真是不小,所以拿出来研究一番 牛顿迭代法(Newton's method)又称为牛顿-拉夫逊方法(Newton-Raphson method),它是牛 ...

  3. java求解立方根_java 利用牛頓迭代法求平方根和立方根,不使用Math類

    最近遇到一個題目,就是不使用Math方法去求解一個數的立方根和平方根,搜索了好多,現在記錄下自己掌握的方法. 首先,在編碼之前,我們得熟悉 什么是牛頓迭代法.下面我為大家找了兩處鏈接.大家可以去看一下 ...

  4. python牛顿迭代法求平方根_牛顿迭代法计算平方根(Java,Python实现)

    牛顿法的作用是使用迭代的方法来求解函数方程的根.简单地说,牛顿法就是不断求取切线的过程.更多见:iii.run 数学推导 假设c为原数,t为c的根数. $$ t^2 \quad = \quad c$$ ...

  5. Python:牛顿迭代法求平方根

    #69573 牛顿迭代法求平方根[光]-函数复用#69573 牛顿迭代法求平方根描述牛顿迭代法(Newton's method)又称为牛顿-拉夫逊(拉弗森)方法(Newton-Raphson meth ...

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

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

  7. 141. Sqrt(x)【牛顿迭代法求平方根 by java】

    Description Implement int sqrt(int x). Compute and return the square root of x. Example sqrt(3) = 1 ...

  8. 牛顿迭代法求平方根原理

    牛顿迭代法可以求解n次方的根,但这里只讨论用它来求平方根. 牛顿迭代法求平方根过程 Java代码实现 /*** 求一个数的平方根* @param number* @return*/public sta ...

  9. 经典算法:牛顿迭代法求平方根

    //牛顿迭代法求平方根 1 double mysqrt(double num) 2 { 3 double x = num/2; 4 double y = 0; 5 do{ 6 x = x/2+num/ ...

最新文章

  1. sysbench mysql 结果_sysbench使用和结果说明
  2. Linux 利用busybox制作根文件系统
  3. pycharm黄色高亮提示:Default argument value is mutable
  4. python3爬虫(9)分布式爬虫与对等分布式爬虫
  5. vue定时ajax获取数据,vue 中使用 AJAX获取数据的方法
  6. ARM TK1 安装kinect驱动
  7. Clojure 的身份与状态思想
  8. 视频加密技术的实与破解
  9. 云计算时代:PC会消亡吗?
  10. 怎么确定电脑上没有mysql_怎么检查电脑有没有mysql?
  11. 支持生僻字且自动识别utf-8编码的php汉字转拼音类,PHP汉字转拼音类(支持生僻字且自动识别utf-8编码)...
  12. 个人如何搭建云手机出租?ARM服务器搭建机房教程
  13. 华为S/CE系列交换机stelnet示例(带外管理地址绑定vpn实现业务和管理平面的隔离)
  14. 计算机网络常见名词及其解释
  15. 几个cve漏洞库查询网站
  16. 老友记有感- 保罗是个成功人士,但是也有最脆弱的一面,而且是在他喜欢的瑞秋面前展现了出来
  17. 创新发明与专利实务的尔雅答案
  18. Vant- Dialog按钮确认和取消事件(配合van-swithc)
  19. 【特斯拉产业链全景图】发布
  20. ACM简单计算题-装箱问题

热门文章

  1. 【vue-清除默认样式-完结】
  2. GAN生成对抗网络综述
  3. LeetCode刷题日记盛最多水的容器
  4. esp32拍照传输到手机android,ESP32 之 esp32-cam wifi拍照传图系统2
  5. c语言单片机教程,开发板选择
  6. EXE转JPG后缀格式工具(真实JPG后缀)
  7. 怎么区分zh和ch_如何区分汉语拼音“z,c,s”与“zh,ch,sh”的发音?
  8. 计算机无法显示移动硬盘,电脑不显示移动硬盘怎么办 检测不到移动硬盘的原因...
  9. LVGL_V8.2 时钟动画 (持续更新中)
  10. 基于Token的WEB后台认证机制