算法_隨機算法1_入門引例(根據隨機數求圓周率pi)

我是野豬。

計算機的使用使我們的計算更加便利,也爲一些問題的解決有了新的途徑。對於圓周率的求取在計算機中我們可以模擬這樣的一個行爲,根據點數獲取π值,具體的原理如圖所示:


代碼上則更加簡單,具體如下:

public class GetPIByRandom {
    public static void main(String[] args) {
        int count = 10000;
        double pi = GetPIByRandom.getPI(count);
        System.out.println("當隨機數達到"+ count +"時得出的圓周率pi值是"+pi);

    }

    /**
     * 獲取pi值
     *
     * @param count
     * @return
     */
    private static double getPI(int count) {
        Random RAND = new Random((int) (Math.random() * 1000));

        int innerCount = 0;
        for (int i = 0; i < count; i++) {
            double x = RAND.nextDouble() * 2 - 1;
            double y = RAND.nextDouble() * 2 - 1;
            double squareSum = x * x + y * y;

            System.out.println("隨機點x="+x+",y="+y);
            if (squareSum < 1) {
                innerCount++;
            }
        }

        double pi = 4.0 * innerCount / count;
        return pi;
    }

}

測試輸入不同的n值:

當n=10000時,輸出:當隨機數達到10000時得出的圓周率pi值是3.1644;

當n=100000時,輸出:當隨機數達到10000時得出的圓周率pi值是3.14348;

當n=1000000時,輸出:當隨機數達到10000時得出的圓周率pi值是3.140872;

當n=10000000時,輸出:當隨機數達到10000000時得出的圓周率pi值是3.1409188;

在一定程度上能反映π值的準確性。

PS:這裏獲取隨機數有一個很重要的技巧就是把Math.random()產生的隨機數當作 Random類的種子,以便Random獲取隨機數。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章