У меня есть задание, где мне нужно приближенно вычислять Pi. Вот моя стратегия: я использую единичный круг, биссектрису угла изоцелевого треугольника и определение греха. Я нарисовал схему:Python: оцените Pi с функциями триггера как можно эффективнее
Например, если я хочу использовать шестигранник (6 баллов/6 сторон), я просто нужно вычислить a
:(0.5*sin(2*pi/2*x
) и умножить его на(). Наконец, начиная с Pi = Circumference/Diameter
, тогда мое приближение Pi = полигональный периметр (с Diameter = 1
).
По существу:
from math import sin, pi
def computePi(x): #x: number of points desired
p = x*sin(pi/x)
print(p)
computePi(10000)
3.141592601912665
Он работает, и я думаю, что это столь же эффективным, как он получает, нет? Спасибо за ваше время!
EDIT: чтобы избежать цикличности, я переделал его, используя алгоритм Архимеда, используя только Пифагора theroem:
Код:
from math import sqrt
def approxPi(x): #x: number of times you want to recursively apply Archmidedes' algorithm
s = 1 #Unit circle
a = None; b = None;
for i in range(x):
a = sqrt(1 - (s/2)**2)
b = 1 - a
print('The approximate value of Pi using a {:5g}-sided polygon is {:1.8f}'.format(6*2**(i),(s*6*2**(i))/2))
s = sqrt(b**2 + (s/2)**2)
так, вы вычислить 'pi' используя значение' pi'? hmm – Uriel
Если вы импортируете pi, почему бы просто не использовать его? – JonahR
На самом деле, это хороший вопрос о домашнем задании (хотя, возможно, вне темы на Stack Overflow, так как это рабочий код). Циркулярность может быть скрыта с помощью 'math.sin (math.radians (y))' где 'y' - соответствующий угол в градусах. Поскольку это исторически точный способ аппроксимации 'pi', можно, например, разделите 360 на 2 степени, чтобы необходимые синусы могли быть вычислены по первому принципу с использованием формулы полуугольника таким образом, чтобы не требовалось предварительного знания «pi». –