Неправильный вывод в значении пи, используя метод Монте-Карло - PullRequest
0 голосов
/ 07 марта 2020

Я пытался создать JAVA программу для вычисления значения числа Пи, используя метод Монте-Карло (без использования визуализации), все кажется мне нормальным, но всякий раз, когда я запускаю его, ответ всегда равен 0.0. Не можете понять, что не так, пожалуйста, помогите.

Это код:

    import java.util.*;

    // Compiler version JDK 11.0.2

    class PiMonteCarlo{
        public static void main(String args[]){ 
            Random rand =new Random();
            double r=1.0;
            int cir=0,sq=0,range=200+1,min=0;
            for(int i=1;i<=200000;i++){
                double y = rand.nextDouble();
                double x = rand.nextDouble();
                double d=(x*x)+(y*y);
                if(d<=r){
                    cir++;
                }
            sq++;
            }
            double rat=cir/sq;
            System.out.print(4*rat);
        }
    }

Ответы [ 2 ]

0 голосов
/ 07 марта 2020

Добро пожаловать в stackoverflow.

Дело в том, что вам нужно много итераций, чтобы правильно оценить число пи.

Вместо 4 используйте 4.0, чтобы сделать двойное деление.

import java.util.*;

class PiMonteCarlo{
    public static void main(String args[]){
        double radius = 1;
        Random random = new Random();
        int inside = 0;
        int trials = 10^100000000;
        for(int i = 1; i<=trials; i++){
            double y = random.nextDouble();
            double x = random.nextDouble();
            if((x*x)+(y*y) <= radius){
                inside++;
            }
        }
        double rat = 4.0 * inside/trials;
        System.out.print(rat);
    }
}
0 голосов
/ 07 марта 2020

cir / sq - целочисленное деление. Попробуйте:

double rat = (double)cir / sq;
...