Расчет пи в Python с использованием геометрии - PullRequest
3 голосов
/ 18 февраля 2011

Я публикую этот код с надеждой, что это сообщество будет готово помочь мне в устранении некоторых ошибок, которые я не могу устранить. Он довольно короткий, предназначен для угадывания пи и не предназначен для замены уже эффективно работающих подходов. Это не задание.

# this code is completely broken

from math import sqrt

def get_y(x, r):
    return sqrt((r^2.0)-(x^2.0))

def get_distance(x1, y1, x2, y2):
    return sqrt( (x2-x1)^2.0 + (y2-y1)^2.0 )

def c(r):
    def range(b):
        a = 0
        while a < b:
            yield a
            a = a + 1
    circumference = 0.0
    for x1 in range(r):
        x2 = x1 + 1.0
        y1 = get_y(x1, r)
        y2 = get_y(x2, r)
        distance = get_distance(x1, y1, x2, x2)
        circumference = circumference + distance
    circumference = circumference * 4
    return circumference

print get_y(0, 4)
radius = 400.0
print "%.64f" % (c(radius) / radius * 2)

1 Ответ

8 голосов
/ 19 февраля 2011
# Not broken anymore, prints 3.1415559...

from math import sqrt

def get_y(x, r):
    return sqrt((r**2.0)-(x**2.0)) # First mistake: ** is exponentiation, not ^

def get_distance(x1, y1, x2, y2):
    return sqrt( (x2-x1)**2.0 + (y2-y1)**2.0 )

def c(r):
    # def range(b): # redundant
    #     a = 0
    #     while a < b:
    #         yield a
    #         a = a + 1
    circumference = 0.0
    for x1 in range(r):
        x2 = x1 + 1.0
        y1 = get_y(x1, r)
        y2 = get_y(x2, r)
        distance = get_distance(x1, y1, x2, y2) # second mistake, x2, x2 --> x2, y2
        circumference = circumference + distance
    circumference = circumference * 4
    return circumference

print get_y(0, 4)
radius = 400.0
print "%.64f" % (c(radius) / (radius * 2)) # third mistake: / radius * 2 --> / (radius*2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...