Activity: Pi - Leibniz and Wallis approximations

Recall from your textbook that the Leibniz formula states that

The Wallis formula states that

  1. Create a file leibniz-wallis.py and save it to cs100/ch2. Copy the archimedes(sides) function definition from the previous activity to it.

  2. Add and implement the functions which approximate Pi using the Leibniz and Wallis formulas. As you test your function, it will help for you to initially print out the terms (as a numerator, followed by a “/”, followed by the denominator) to check if you are calculating correcly. Remove those print statements once you confirm the terms are correct.

  3. I suggest you call your Leibniz function for 200 and 500 terms, and the Wallis function for 4, 20, and 100 pairs. Here is a sketch of your program.

    def leibniz(terms):
        # your code goes here
        approxPi =  0
        return approxPi
       
    def wallis(numPairs):
        # your code goes here
        approxPi = 1
        return approxPi
           
    print("Results for Leibniz formula:")
    print(leibniz(200))
    print(leibniz(500))
       
    print("Results for Wallis formula:")
    print(wallis(4))
    print(wallis(20))
    print(wallis(100))
    
  4. Compare the approaches to compute Pi using Archimedes, Leibniz, and Wallis approximations. Which one is better for a comparable number of sides / terms / pairs? Print your answer.

  5. Type help('math') in the Shell area. Use it (or the corresponding website) to determine how to print the constant Pi from the math library.

  6. What other functions from the math library can you use? Try a few to experiment! 🧮

If you finish early

  1. An infinite number of mathematicians walk into a bar. The first one orders a pint. The second one orders half a pint. The third one orders a quarter of a pint. The next orders an eight of a pint… Seeing the pattern, the bartendar gives up and pours how many pints? We could represent this with the famous summation, Write a function called computePints(terms) that will compute the summation up to so many terms. Test it by invoking your function. What does the value approach for very large terms? (Make sure you get a decimal result).

  2. Write a function computeSummation1(terms) that will compute the following convergent sum of the recipricols of factorials: Test it by invoking your function. What does the value approach for very large terms?

  3. Write a function computeSummation2(terms) that will compute the following convergent sum of the following alternating signs of recipricols of powers of two: Test it by invoking your function. What does the value approach for very large terms?

How to submit

Submit your file to Moodle.