Нахождение значения Пи методом Монте-Карло. Вычисление неправильное или в коде ошибся? - 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.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д