开方在java中怎么计算_JAVA BigDecimal使用牛顿迭代法计算平方根(开方)
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使用牛顿迭代法计算平方根(开方)相关推荐
- java bigdecimal 开方_JAVA BigDecimal使用牛顿迭代法计算平方根(开方)
Java中虽然可以用Math.sqrt获得某值的平方根,但是该值必须是double类型的.可是有些项目对数值精度要求比较高,我们一般会用BigDecimal来存储,BigDecimal并不提供计算平方 ...
- Java中使用Rational类实现分数精确的计算,
Java中使用Rational类实现分数精确的计算, 在Java中实现分数的精确计算(Rational类) 在Java中想要进行有分数精确的计算,例如1/3=0.33333333-,这个数字不能用do ...
- mysql 立方根函数_Java实现牛顿迭代法求解平方根、立方根
一.简介 牛顿迭代法(Newton's method)又称为牛顿-拉夫逊(拉弗森)方法(Newton-Raphson method),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法. ...
- 圆的周长在java中怎么表示_Java基础之计算圆的周长
最简单的程序 圆形的周长公式: C=πd=2πr π是圆周率,约等于3.14,公式中r为圆的半径,d为圆的直径 在数学领域,称之为公式,在计算机领域,习惯称之为算法. 算法描述的是,如果要解决一个问题 ...
- 开方在java中怎么计算_不使用java JDK已有的API实现任意数字的开方
在java面试中,我们经常被要求,不使用java jdk自带的API来实现任意数字的开方实现,本文作者总结了下这个需求的实现方法,并将实现代码放上,供朋友们参考,不喜勿喷,谢谢.package com ...
- Java中的运算神器 BigDecimal,了解一下?
前言 我们都知道浮点型变量在进行计算的时候会出现丢失精度的问题.如下一段代码: System.out.println(0.05 + 0.01); System.out.println(1.0 - 0. ...
- java中椭圆类_Java中的Graphics2D类基本使用的教程
Java中的Graphics2D类基本使用的教程 Java语言在Graphics类提供绘制各种基本的几何图形的基础上,扩展Graphics类提供一个Graphics2D类,它拥用更强大的二维图形处理能 ...
- java中日期怎么_Java 中的日期处理
最初学习 Java 时是采用学校教材和市面上的一些 Java 视频教程进行学习,到了工作中才发现有些 API 或包已经过时了.最近使用 Java 中的日期处理时发现 java.util.date 与 ...
- java中保留小数位_Java中保留两位小数的方法
Java中保留4位小数的方法: import java.math.BigDecimal; import java.text.DecimalFormat; import java.text.Number ...
- 在java中原始时间_Java 日期时间
Java 日期时间 java.util包提供了Date类来封装当前的日期和时间. Date类提供两个构造函数来实例化Date对象. 第一个构造函数使用当前日期和时间来初始化对象. Date( ) 第二 ...
最新文章
- MySQL和Linux试题_Linux运维必会的MySql题之(一)
- unix cut命令
- 【Java】System.out.println(Integer.MAX_VALUE+1);背后的二进制故事与启示
- 在机器学习中为什么要进行 One-Hot 编码?
- WEB.NET error:请添加一个名为 jquery (区分大小写)的 ScriptResourceMapping 解决方案
- 遍历数组是什么意思_漫画:寻找无序数组的第k大元素(修订版)
- C#的Access数据库的连接类
- c#调用java的webservice方法,C# 调用 Java WebService | 思考的极致
- 首次在matable中安装libsvm碰到的问题和解决方法---- mxGetIr 已过时 错误
- 2021SC@SDUSC Zxing开源代码(十一)Data Matrix二维码(四)
- c语言程序书写遵循的规则,C程序书写时应遵循的规则
- 4个网页翻译工具,一键就能将网页英文翻译成中文
- 英语每日一句: What’s your point? 你到底想说什么?
- 三国群英传M玩亚服好还是台服好?服务器选择推荐
- 宏基因组(鸟枪法测序)—微生物同源基因引物设计
- JS的map方法和Map对象
- ionic4滑动加载(ion-infinite-scroll)
- 防红直连php,全新网址缩短防封 QQ/微信防红 短网址生成系统PHP源码
- cimcoeditv5怎样模拟刀路_cimco edit v5怎么不显示刀具运动轨迹
- 自来水收费系统毕业论文(J2EE )