java計(jì)算π的多種方法
計(jì)算π的方法
一、蒙特卡羅法
這種方法是一種利用計(jì)算機(jī)隨機(jī)數(shù)的功能基于“隨機(jī)數(shù)”的算法,通過計(jì)算落在單位圓內(nèi)的點(diǎn)與落在正方形內(nèi)的點(diǎn)的比值求π。

由于圖形的對稱性,我們靠考慮該圖的四分之一部分。
假定一點(diǎn)能夠均勻地扔到一個(gè)正方形中,計(jì)算落入其中的點(diǎn)個(gè)數(shù)。通過計(jì)數(shù)其中落入內(nèi)切圓的點(diǎn)的個(gè)數(shù);
如果一共投入N個(gè)點(diǎn),其中有M個(gè)落入圓中,則只要點(diǎn)均勻,假定圓周的半徑為R,則:

該方法得到的要得到π的精度與投入點(diǎn)的個(gè)數(shù)有關(guān),一般個(gè)數(shù)較大時(shí)精度比較高。
java代碼:隨機(jī)計(jì)算π的程序
public class RandomPI {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(rand_pi(100000)); //改變參數(shù)值
}
public static double rand_pi(int n) {
int numInCircle = 0;
double x, y;
double pi;
for(int i=0;i < n; i++){
x = Math.random();
y = Math.random();
if(x * x + y * y < 1)
numInCircle++;
}
pi=(4.0 * numInCircle) / n;
return pi;
}

可以看出來,該方法投入點(diǎn)的個(gè)數(shù)越大,越接近真實(shí)值。
二、數(shù)學(xué)公式(級數(shù))
由數(shù)學(xué)公式:

java代碼:隨機(jī)計(jì)算π的程序
public class MathPi {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(math_Pi(1000));//改變參數(shù)值
}
public static double math_Pi(int n) {
int numInCircle = 0;
double sum = 0;
double pi;
for(int i=1;i <= n; i++){
sum += 1.0/(i*i);
}
pi = Math.sqrt(sum * 6);
return pi;
}
}
當(dāng)n取1000時(shí)就很接近真實(shí)值了n=1000時(shí),pi=3.1406380562059946。
三、劃分網(wǎng)格計(jì)算π

將圖片分為n*n個(gè)小方形,統(tǒng)計(jì)落在圓內(nèi)的個(gè)數(shù)占所有方形的比列。
java代碼:隨機(jī)計(jì)算π的程序
public class gridPI {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(grid_Pi(10));//改變參數(shù)值
}
public static double grid_Pi(int n) {
int i;
double sum=0;
for(i = 0;i < n; i++)
sum += (int)Math.sqrt(n*(double)n-i*(double)i);
return (4.0 * sum)/n/n;
}
}

到此這篇關(guān)于java計(jì)算π多種方法的文章就介紹到這了,希望對你有所幫助,更多相關(guān)計(jì)算圓周率內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java安全框架——Shiro的使用詳解(附springboot整合Shiro的demo)
這篇文章主要介紹了Java安全框架——Shiro的使用詳解,幫助大家更好的理解和學(xué)習(xí)使用Shiro,感興趣的朋友可以了解下2021-04-04
springcloud?如何解決微服務(wù)之間token傳遞問題
這篇文章主要介紹了springcloud?如何解決微服務(wù)之間token傳遞問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03
java web中的servlet3 upload上傳文件實(shí)踐
這篇文章主要介紹了servlet3 upload上傳文件實(shí)踐,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-11-11
教你用MAT工具分析Java堆內(nèi)存泄漏問題的解決方法
今天給大家?guī)淼氖顷P(guān)于Java的相關(guān)知識(shí),文章圍繞著如何使用MAT工具分析Java堆內(nèi)存泄漏問題的解決方法展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下2021-06-06
SpringCloud Config連接git與數(shù)據(jù)庫流程分析講解
springcloud config是一個(gè)解決分布式系統(tǒng)的配置管理方案。它包含了 client和server兩個(gè)部分,server端提供配置文件的存儲(chǔ)、以接口的形式將配置文件的內(nèi)容提供出去,client端通過接口獲取數(shù)據(jù)、并依據(jù)此數(shù)據(jù)初始化自己的應(yīng)用2022-12-12
SpringBoot在一定時(shí)間內(nèi)限制接口請求次數(shù)的實(shí)現(xiàn)示例
在項(xiàng)目中,接口的暴露在外面,很多人就會(huì)惡意多次快速請求,本文主要介紹了SpringBoot在一定時(shí)間內(nèi)限制接口請求次數(shù)的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下2022-03-03
Java并發(fā)編程之synchronized底層實(shí)現(xiàn)原理分析
這篇文章主要介紹了Java并發(fā)編程之synchronized底層實(shí)現(xiàn)原理,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-02-02

