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