日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

分布与并行计算—并行计算π(Java)

發布時間:2023/11/29 java 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 分布与并行计算—并行计算π(Java) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

并行計算π

public class pithread extends Thread {private static long mini=1000000000;private long start,diff;double sum=0;double cur=1/(double)mini;public pithread(long start,long diff) {this.start=start;this.diff=diff;}@Overridepublic void run() {long i=start;for(;i<mini;i+=diff){double x=(i+0.5)*cur;sum+=4/(1+x*x);}}public double getSum() {return sum;}public static void main(String[] args) {double t1,t2;pithread thread0=new pithread(1,1);t1=System.currentTimeMillis();thread0.start();try {thread0.join();} catch (InterruptedException e) {e.printStackTrace();}t2=System.currentTimeMillis();System.out.println("單線程時間:"+(double)(t2-t1)/1000+'秒');pithread thread5=new pithread(1,2);pithread thread6=new pithread(2,2);t1=System.currentTimeMillis();thread5.start();thread6.start();try {thread5.join();} catch (InterruptedException e) {e.printStackTrace();}t2=System.currentTimeMillis();System.out.println("2線程時間:"+(double)(t2-t1)/1000+'秒');pithread thread=new pithread(1,4);pithread thread2=new pithread(2,4);pithread thread3=new pithread(3,4);pithread thread4=new pithread(4,4);t1=System.currentTimeMillis();thread.start();thread2.start();thread3.start();thread4.start();try {thread.join();} catch (InterruptedException e) {e.printStackTrace();}t2=System.currentTimeMillis();System.out.println("4線程時間:"+(double)(t2-t1)/1000+'秒');} }

并行計算多位π

public class CalculatePThread {static BigDecimal tempt = new BigDecimal(0);public synchronized static void add(BigDecimal bigDecimal){tempt= tempt.add(bigDecimal);}public static void main(String[] args) {ExecutorService executorService=Executors.newFixedThreadPool(10);final int PRECISION=100000;//定義各個引用變量/ 1000000000.0BigDecimal PI = null;//PIint i=0; long startTime = System.currentTimeMillis();//開始時間System.out.println("計算機正在全力計算中...請稍候..."+startTime);while (true){if(System.currentTimeMillis()-startTime>180000) break;CountDownLatch countDownLatch=new CountDownLatch(10);for(int j=0;j<10;j++){MutiPi cur=new MutiPi(i++,countDownLatch);executorService.execute(cur);}try { System.out.println(tempt);countDownLatch.await();} catch (InterruptedException e) {e.printStackTrace();}}System.out.println("wcl");System.out.println(tempt);PI = tempt.divide(BigDecimal.valueOf(64));//PI=tempt/64long endTime = System.currentTimeMillis();//結束時間System.out.println(PI.toString());Lifegame.writeTxt(PI.toString());executorService.shutdown();} } public class MutiPi implements Runnable {int cur;final int PRECISION=100000;CountDownLatch countDownLatch;Lock lock=new ReentrantLock();BigDecimal bigDecimal=BigDecimal.valueOf(0);public MutiPi(int cur, CountDownLatch countDownLatch) {this.cur = cur;this.countDownLatch=countDownLatch;}@Overridepublic void run() {BigDecimal a = null;//公式的第一項BigDecimal b = null;//公式的第二項BigDecimal c = null;//公式的第三項BigDecimal d = null;//公式的第四項BigDecimal e = null;//公式的第五項BigDecimal f = null;//公式的第六項BigDecimal g = null;//公式的第七項BigDecimal h = null;//公式的第八項//a=(-1/1024)^ia = BigDecimal.valueOf(-1).divide(BigDecimal.valueOf(1024),PRECISION, BigDecimal.ROUND_DOWN).pow(cur);//valueOf()方法,BigDecimal的靜態方法,將 double 轉換為 BigDecimal//pow()方法,BigDecimal類中的方法,原型BigDecimal pow(int n, MathContext mc);//返回其值為 (this^n) 的 BigDecimal//b=32/(4i+1)b = BigDecimal.valueOf(32).divide(BigDecimal.valueOf(4).multiply(BigDecimal.valueOf(cur)).add(BigDecimal.valueOf(1)),PRECISION, BigDecimal.ROUND_DOWN);//為求精確,計算精度比輸出值多三位//ROUND_DOWN接近零的舍入模式(截取)//c=1/(4n+3)c = BigDecimal.valueOf(1).divide(BigDecimal.valueOf(4).multiply(BigDecimal.valueOf(cur)).add(BigDecimal.valueOf(3)),PRECISION, BigDecimal.ROUND_DOWN);//d=256/(10n+1)d = BigDecimal.valueOf(256).divide(BigDecimal.valueOf(10).multiply(BigDecimal.valueOf(cur)).add(BigDecimal.valueOf(1)),PRECISION, BigDecimal.ROUND_DOWN);//e=64/(10n+3)e = BigDecimal.valueOf(64).divide(BigDecimal.valueOf(10).multiply(BigDecimal.valueOf(cur)).add(BigDecimal.valueOf(3)),PRECISION, BigDecimal.ROUND_DOWN);//f=4/(10n+5)f = BigDecimal.valueOf(4).divide(BigDecimal.valueOf(10).multiply(BigDecimal.valueOf(cur)).add(BigDecimal.valueOf(5)),PRECISION, BigDecimal.ROUND_DOWN);//g=4/(10n+7)g = BigDecimal.valueOf(4).divide(BigDecimal.valueOf(10).multiply(BigDecimal.valueOf(cur)).add(BigDecimal.valueOf(7)),PRECISION, BigDecimal.ROUND_DOWN);//h=1/(10n+9)h = BigDecimal.valueOf(1).divide(BigDecimal.valueOf(10).multiply(BigDecimal.valueOf(cur)).add(BigDecimal.valueOf(9)),PRECISION, BigDecimal.ROUND_DOWN);CalculatePThread.add (a.multiply(d.add(h).subtract(b).subtract(c).subtract(e).subtract(f).subtract(g)));System.out.println("線程"+cur+"計算完成"+countDownLatch.getCount());countDownLatch.countDown();} }

總結

以上是生活随笔為你收集整理的分布与并行计算—并行计算π(Java)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。