2020-08-29

7 篇文章 0 订阅

使用Java高精度计算 2 \sqrt 2 2

曾使用二分法计算 2 \sqrt2 2 ,当时用Python编程,精度算到小数点后100位,但更高精度的计算时间很长。参考用二分法计算根号2。现在试尝使用Java编程,还是二分法,发现精度可以大大提高,达到小数点后2500位,不得不说,Java的运算速度要比Python快。
编程思路:也没什么可说的,引入BigDecimal类,运算的优先级好像是从左到右。另外,那个比较函数(compareTo)的返回值是1或是-1,即前面的大返回1,否则返回-1,而不是true或false,值得注意。

package sqrt;
import java.math.BigDecimal;

public class sqrt {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		BigDecimal a = new BigDecimal("1.41");
		BigDecimal b = new BigDecimal("1.42");
		BigDecimal c = new BigDecimal("1.415");
		BigDecimal d = new BigDecimal("0.1");
		BigDecimal k = new BigDecimal("2");
		while(c.multiply(c).subtract(k).abs().compareTo(d.pow(2499))==1) {
			c=a.add(b).divide(k,2499,BigDecimal.ROUND_HALF_UP);
	    	if (c.multiply(c).compareTo(k)==1){
				b = c;
			}
			else {
				a = c;
			}
		}
		System.out.println(c);
	}
}
//1.414213562373095048801688724209698078569671875376948073176679737990732478462107038850387534327641572735013846230912297024924836055850737212644121497099935831413222665927505592755799950501152782060571470109559971605970274534596862014728517418640889198609552329230484308714321450839762603627995251407989687253396546331808829640620615258352395054745750287759961729835575220337531857011354374603408498847160386899970699004815030544027790316454247823068492936918621580578463111596668713013015618568987237235288509264861249497715421833420428568606014682472077143585487415565706967765372022648544701585880162075847492265722600208558446652145839889394437092659180031138824646815708263010059485870400318648034219489727829064104507263688131373985525611732204024509122770022694112757362728049573810896750401836986836845072579936472906076299694138047565482372899718032680247442062926912485905218100445984215059112024944134172853147810580360337107730918286931471017111168391658172688941975871658215212822951848847208969463386289156288276595263514054226765323969461751129160240871551013515045538128756005263146801712740265396947024030051749531886292563138518816347800156936917688185237868405228783762938921430065586956868596459515550164472450983689603688732311438941557665104088391429233811320605243362948531704991577175622854974143899918802176243096520656421182731672625753959471725593463723863226148274262220867115583959992652117625269891754098815934864008345708518147223181420407042650905653233339843645786579679651926729239987536661721598257886026336361782749599421940377775368142621773879919455139723127406689832998989538672882285637869774966251996658352577619893932284534473569479496295216889148549253890475582883452609652409654288939453864662574492755638196441031697983306185201937938494005715633372054806854057586799967012137223947582142630658513221740883238294728761739364746783743196000159218880734785761725221186749042497736692920731109636972160893370866115673458533483329525467585164471075784860246360083444911481858765555428645512331421992631133251797060843655970435285641008791850076036100915946567067688360557174007675690509613671940132493560524018599910506210816359772643138060546701029356997104242510578174953105725593498445112692278034491350663756874776028316282960553242242695753452902883876844642917328277088831808702533985233812274999081237189254072647536785030482159180188616710897286922920119759988070381854333253646021108229927929307287178079988809917674177410898306080032631181642798823117

使用Python验证一下,编一个简单程序如下:

from decimal import *
getcontext().prec = 2500
print(Decimal(2)**Decimal(0.5))
D:\Python\study\venv\Scripts\python.exe D:/Python/study/f20200824/高精度计算器.py
1.414213562373095048801688724209698078569671875376948073176679737990732478462107038850387534327641572735013846230912297024924836055850737212644121497099935831413222665927505592755799950501152782060571470109559971605970274534596862014728517418640889198609552329230484308714321450839762603627995251407989687253396546331808829640620615258352395054745750287759961729835575220337531857011354374603408498847160386899970699004815030544027790316454247823068492936918621580578463111596668713013015618568987237235288509264861249497715421833420428568606014682472077143585487415565706967765372022648544701585880162075847492265722600208558446652145839889394437092659180031138824646815708263010059485870400318648034219489727829064104507263688131373985525611732204024509122770022694112757362728049573810896750401836986836845072579936472906076299694138047565482372899718032680247442062926912485905218100445984215059112024944134172853147810580360337107730918286931471017111168391658172688941975871658215212822951848847208969463386289156288276595263514054226765323969461751129160240871551013515045538128756005263146801712740265396947024030051749531886292563138518816347800156936917688185237868405228783762938921430065586956868596459515550164472450983689603688732311438941557665104088391429233811320605243362948531704991577175622854974143899918802176243096520656421182731672625753959471725593463723863226148274262220867115583959992652117625269891754098815934864008345708518147223181420407042650905653233339843645786579679651926729239987536661721598257886026336361782749599421940377775368142621773879919455139723127406689832998989538672882285637869774966251996658352577619893932284534473569479496295216889148549253890475582883452609652409654288939453864662574492755638196441031697983306185201937938494005715633372054806854057586799967012137223947582142630658513221740883238294728761739364746783743196000159218880734785761725221186749042497736692920731109636972160893370866115673458533483329525467585164471075784860246360083444911481858765555428645512331421992631133251797060843655970435285641008791850076036100915946567067688360557174007675690509613671940132493560524018599910506210816359772643138060546701029356997104242510578174953105725593498445112692278034491350663756874776028316282960553242242695753452902883876844642917328277088831808702533985233812274999081237189254072647536785030482159180188616710897286922920119759988070381854333253646021108229927929307287178079988809917674177410898306080032631181642798823117

Process finished with exit code 0

比较后完全一致。佩服Python强大的精度计算功能和简洁的表达形式,3行代码搞定,恐怕没有第二种语言能与之匹敌。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值