В геометрии отношение длины окружности к ее диаметру называется π. Величину π можно оценить из бесконечного ряда вида:
π/4 = 1 – (1/3) + (1/5) – (1 /7) + (1/9) - (1/11) + ...
Существует еще один новый подход к вычислению π. Представьте, что у вас есть доска для дартса площадью 2 квадрата. Он вписывает круг единичного радиуса. Центр круга совпадает с центром квадрата. Теперь представьте, что вы случайным образом бросаете дротики в эту доску для дартса. Тогда отношение количества дротиков, попавших в круг, к общему количеству брошенных дротиков будет таким же, как отношение площади круга к площади квадратной доски для дартса. Площадь круга с единичным радиусом равна всего π квадратной единице. Площадь дартса составляет 4 квадратных единицы. Отношение площади круга к площади квадрата равно π/4.
Для имитации метания дротиков воспользуемся генератором случайных чисел. Модуль Random имеет несколько функций генерации случайных чисел, которые можно использовать. Например, функция Uniform(a, b) возвращает случайное число с плавающей запятой в диапазоне a (включительно) и b (исключительно).
Представьте, что квадратный дротик К доске прикреплена система координат. Верхний правый угол имеет координаты ( 1.0, 1.0), а нижний левый угол — координаты ( -1.0, -1.0 ). Его стороны имеют длину 2 единицы, а его центр (как и центр вписанного круга) находится в начале координат.
Случайная точка внутри дартса может быть задано его координатами x и y. Эти значения генерируются с помощью генератора случайных чисел. Мы достигаем этого следующим образом:
Код: Выделить всё
xPos = random.uniform (-1.0, 1.0)
yPos = random.uniform (-1.0, 1.0)
Программа, которую вы будете писать, будет называться CalculatePI. Он будет иметь следующую структуру:
Код: Выделить всё
import math
import random
def computePI ( numThrows ):
...
def main ():
...
main()
В вашей функции main() вы хотите поэкспериментировать и посмотреть, увеличивается ли точность PI с увеличением количества бросков на мишени. Вы сравните свой результат со значением, заданным math.pi. Количественная разница в выходных данных — это рассчитанное вами значение PI минус math.pi. Для проведения эксперимента используйте следующее количество бросков: 100, 1000, 10 000, 100 000, 1 000 000 и 10 000 000. Вы вызовете функцию ComputePI(), используя эти числа в качестве входных параметров. Ваши выходные данные будут аналогичны приведенным ниже, т. е. фактические значения рассчитанного PI и разницы будут отличаться, но близки к показанным:
Код: Выделить всё
Computation of PI using Random Numbers
num = 100 Calculated PI = 3.320000 Difference = +0.178407
num = 1000 Calculated PI = 3.080000 Difference = -0.061593
num = 10000 Calculated PI = 3.120400 Difference = -0.021193
num = 100000 Calculated PI = 3.144720 Difference = +0.003127
num = 1000000 Calculated PI = 3.142588 Difference = +0.000995
num = 10000000 Calculated PI = 3.141796 Difference = +0.000204
Difference = Calculated PI - math.pi
На данный момент я сделал:
Код: Выделить всё
import math
import random
def computePI (numThrows):
xPos = random.uniform (-1.0, 1.0)
yPos = random.uniform (-1.0, 1.0)
in_circle = 0
throws = 0
while (throws < numThrows):
if math.hypot (xPos, yPos)
Подробнее здесь: [url]https://stackoverflow.com/questions/46751718/calculate-pi-using-random-numbers[/url]