java bigdecimal 开方_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 bigdecimal 开方_JAVA BigDecimal使用牛顿迭代法计算平方根(开方)相关推荐
- python牛顿迭代法求平方根_牛顿迭代法计算平方根
public static double sqrt(doublex) {if(x<0)return Double.NaN;//not a number double err=1e-15;doub ...
- 牛顿迭代法计算平方根
突然看到这个古老的算法,但是发现在图像渲染里用处可真是不小,所以拿出来研究一番 牛顿迭代法(Newton's method)又称为牛顿-拉夫逊方法(Newton-Raphson method),它是牛 ...
- java求解立方根_java 利用牛頓迭代法求平方根和立方根,不使用Math類
最近遇到一個題目,就是不使用Math方法去求解一個數的立方根和平方根,搜索了好多,現在記錄下自己掌握的方法. 首先,在編碼之前,我們得熟悉 什么是牛頓迭代法.下面我為大家找了兩處鏈接.大家可以去看一下 ...
- python牛顿迭代法求平方根_牛顿迭代法计算平方根(Java,Python实现)
牛顿法的作用是使用迭代的方法来求解函数方程的根.简单地说,牛顿法就是不断求取切线的过程.更多见:iii.run 数学推导 假设c为原数,t为c的根数. $$ t^2 \quad = \quad c$$ ...
- Python:牛顿迭代法求平方根
#69573 牛顿迭代法求平方根[光]-函数复用#69573 牛顿迭代法求平方根描述牛顿迭代法(Newton's method)又称为牛顿-拉夫逊(拉弗森)方法(Newton-Raphson meth ...
- mysql 立方根函数_Java实现牛顿迭代法求解平方根、立方根
一.简介 牛顿迭代法(Newton's method)又称为牛顿-拉夫逊(拉弗森)方法(Newton-Raphson method),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法. ...
- 141. Sqrt(x)【牛顿迭代法求平方根 by java】
Description Implement int sqrt(int x). Compute and return the square root of x. Example sqrt(3) = 1 ...
- 牛顿迭代法求平方根原理
牛顿迭代法可以求解n次方的根,但这里只讨论用它来求平方根. 牛顿迭代法求平方根过程 Java代码实现 /*** 求一个数的平方根* @param number* @return*/public sta ...
- 经典算法:牛顿迭代法求平方根
//牛顿迭代法求平方根 1 double mysqrt(double num) 2 { 3 double x = num/2; 4 double y = 0; 5 do{ 6 x = x/2+num/ ...
最新文章
- sysbench mysql 结果_sysbench使用和结果说明
- Linux 利用busybox制作根文件系统
- pycharm黄色高亮提示:Default argument value is mutable
- python3爬虫(9)分布式爬虫与对等分布式爬虫
- vue定时ajax获取数据,vue 中使用 AJAX获取数据的方法
- ARM TK1 安装kinect驱动
- Clojure 的身份与状态思想
- 视频加密技术的实与破解
- 云计算时代:PC会消亡吗?
- 怎么确定电脑上没有mysql_怎么检查电脑有没有mysql?
- 支持生僻字且自动识别utf-8编码的php汉字转拼音类,PHP汉字转拼音类(支持生僻字且自动识别utf-8编码)...
- 个人如何搭建云手机出租?ARM服务器搭建机房教程
- 华为S/CE系列交换机stelnet示例(带外管理地址绑定vpn实现业务和管理平面的隔离)
- 计算机网络常见名词及其解释
- 几个cve漏洞库查询网站
- 老友记有感- 保罗是个成功人士,但是也有最脆弱的一面,而且是在他喜欢的瑞秋面前展现了出来
- 创新发明与专利实务的尔雅答案
- Vant- Dialog按钮确认和取消事件(配合van-swithc)
- 【特斯拉产业链全景图】发布
- ACM简单计算题-装箱问题
热门文章
- 【vue-清除默认样式-完结】
- GAN生成对抗网络综述
- LeetCode刷题日记盛最多水的容器
- esp32拍照传输到手机android,ESP32 之 esp32-cam wifi拍照传图系统2
- c语言单片机教程,开发板选择
- EXE转JPG后缀格式工具(真实JPG后缀)
- 怎么区分zh和ch_如何区分汉语拼音“z,c,s”与“zh,ch,sh”的发音?
- 计算机无法显示移动硬盘,电脑不显示移动硬盘怎么办 检测不到移动硬盘的原因...
- LVGL_V8.2 时钟动画 (持续更新中)
- 基于Token的WEB后台认证机制