利用Java的BigDecimal与马青公式精确计算π后10000位,
生活随笔
收集整理的這篇文章主要介紹了
利用Java的BigDecimal与马青公式精确计算π后10000位,
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
首先給出公式如下:
π=16arctan1/5?4arctan1/239;
即是
π=16×(1/(1×5)?1/(3×5的3次方)+1/(5×5的5次方)…)?4×(1/(1×239)?1/(3×239的3次方)+…);
級數(shù)中的分數(shù),分母增長很快,但我們可以對一個分式,不斷除以同一個低精度數(shù)(25、239的平方),就能得到所有分數(shù)的值。
此公式適用計算百萬以下級別精度的圓周率,是廣泛使用的計算公式。
本人大致思路如下:
大致思路:利用馬青公式與Java的BigDecimal對結(jié)果計算,
理論上可以精確到π的十萬位以后,
程序優(yōu)化思路:
1,可以使用文本文件存儲輸出結(jié)果
2,馬青公式分為兩部分,可以使用多線程同時運算,提高時間效率。
本人源代碼如下:
package com.pi; import java.math.BigDecimal; import java.util.Date; /*** * @author joker**@大致思路:利用馬青公式與Java的BigDecimal對結(jié)果計算,*理論上可以精確到π的十萬位以后,**程序優(yōu)化思路:*1,可以使用文本文件存儲輸出結(jié)果**2,馬青公式分為兩部分,可以使用多線程同時運算,提高時間效率。*/ public class GetPai {public static void main(String[] args) {// 馬青公式:π=16(arctan1/5?4arctan1/239 )//初始公式變量相關(guān)BigDecimal fz = BigDecimal.ONE;BigDecimal fz1 = new BigDecimal("5");BigDecimal fz2 = new BigDecimal("239");BigDecimal fm1 = new BigDecimal("25");BigDecimal fm2 = new BigDecimal("57121");BigDecimal a = new BigDecimal("4");BigDecimal b = new BigDecimal("1");BigDecimal c = new BigDecimal("2");//公式符號改變標志int flag = 1;//結(jié)果存儲//分結(jié)果BigDecimal result1;BigDecimal r1;BigDecimal r2;//總結(jié)果BigDecimal result = new BigDecimal("0");//精確迭代次數(shù)10000次int n=10000;//startint i = 1;long time1=new Date().getTime();while (i < n) {i++;//分式子結(jié)果,計算1r1=fz.divide(fz1.multiply(b),n,BigDecimal.ROUND_DOWN);r2=fz.divide(fz2.multiply(b),n,BigDecimal.ROUND_DOWN);//分式子結(jié)果,計算1if (flag == 1) {result1=a.multiply(r1).subtract(r2);//標志改變flag = -1;} else {result1=r2.subtract(a.multiply(r1));flag = 1;}//總計算result = result.add(result1);//變量迭達變換b=b.add(c);fz1 = fz1.multiply(fm1);fz2 = fz2.multiply(fm2);}//endlong time2=new Date().getTime();//輸出pi1000與計算時間System.out.println("pi計算的結(jié)果:\n" + result.multiply(a).toString().substring(0, 1000));System.out.println("pi計算的時間:\n" +(time2-time1)+"毫秒" );} }總結(jié)
以上是生活随笔為你收集整理的利用Java的BigDecimal与马青公式精确计算π后10000位,的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: javaweb实现文件上传,前端与后台的
- 下一篇: javaweb认识在web应用中重要的轮