Нахождение значения Пи методом Монте-Карло. Вычисление неправильное или в коде ошибся? - C (СИ)
Формулировка задачи:
Всем привет! Задачка на нахождение значения ПИ по методу Монте Карло. В методичке сказано:
"You should use this expression for generating a random double between LO and HI
◦ LO + ((double) (rand()) /(((double) RAND_MAX)/(HI-LO));"
Сказано, сделано, вот только значения не сходятся у меня с правильными ответами!:
Enter the seed for the random number generator: 4
Enter the number of iterations to run: 10
The value of pi is 3.20000.
2. Enter the seed for the random number generator: -7
Enter the number of iterations to run: 2
The value of pi is 4.00000.
Будьте добры, подскажите где и в чем, я ошибся! Столько времени бьюсь с этой задачей!
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <string.h>
int main() {
int iterations=0;
double x,y;
int count=0;
double z;
double pi;
int SEED = 0;
printf("Enter the seed for the random number generator:");
scanf("%d",&SEED);
printf("Enter the number of iterations used to estimate pi: ");
scanf("%d",&iterations);
/* инициализирую рандомные числа*/
srand(SEED);
for (int i=0; i<iterations; i++) {
x = (double)rand()/RAND_MAX;
y = (double)rand()/RAND_MAX;
z = x*x+y*y;
if (z<=1) count++;
}
pi=(double)count/iterations*4;
printf("The value of pi is %g \n",pi);
return 0;
}Решение задачи: «Нахождение значения Пи методом Монте-Карло. Вычисление неправильное или в коде ошибся?»
textual
Листинг программы
y = (double)rand()/RAND_MAX; x = (double)rand()/RAND_MAX;
Объяснение кода листинга программы
- Импортируются необходимые библиотеки.
- Создается объект класса
Randomдля генерации случайных чисел. - Переменная
yинициализируется случайным числом в интервале от 0 до 1. - Переменная
xинициализируется случайным числом в интервале от 0 до 1.