piffle
piffle

Reputation: 33

Looking for a way to infinitely generate digits of PI

please correct me if this is a dumb and impossible problem, but is there a way to have a script that continually generates digits of PI? for example, the script could generate a digit of PI, then store it in a .txt file, then repeat, or simply print out the digits it generates.

Upvotes: 1

Views: 2059

Answers (1)

Jerry
Jerry

Reputation: 406

This is using an iterative method !

 #!/usr/bin/env python3
    # https://github.com/MrBlaise/learnpython/blob/master/Numbers/pi.py
    # Find PI to the Nth Digit
    # Have the user enter a number 'n'
    # and print out PI to the 'n'th digit

def calcPi(limit):  # Generator function
    """
    Prints out the digits of PI
    until it reaches the given limit
    """

    q, r, t, k, n, l = 1, 0, 1, 1, 3, 3

    decimal = limit
    counter = 0

    while counter != decimal + 1:
            if 4 * q + r - t < n * t:
                    # yield digit
                    yield n
                    # insert period after first digit
                    if counter == 0:
                            yield '.'
                    # end
                    if decimal == counter:
                            print('')
                            break
                    counter += 1
                    nr = 10 * (r - n * t)
                    n = ((10 * (3 * q + r)) // t) - 10 * n
                    q *= 10
                    r = nr
            else:
                    nr = (2 * q + r) * l
                    nn = (q * (7 * k) + 2 + (r * l)) // (t * l)
                    q *= k
                    t *= l
                    l += 2
                    k += 1
                    n = nn
                    r = nr


def main():  # Wrapper function

    # Calls CalcPi with the given limit
    pi_digits = calcPi(int(input(
        "Enter the number of decimals to calculate to: ")))

    i = 0

    # Prints the output of calcPi generator function
    # Inserts a newline after every 40th number
    for d in pi_digits:
            print(d, end='')
            i += 1
            if i == 40:
                print("")
                i = 0

if __name__ == '__main__':
    main()

Flowchart for code 1 for better understanding!


Source of answer!

Upvotes: 5

Related Questions