CS 1073 Introductory Programming
for Scientific Applications
Calculate Pi Inefficiently
|
pi: the ratio of circumference to diameter of a circle:
Use the following formula:

Here is a simple Java program that uses the above series to
calculate pi:
// Pi: compute number of combinations
public class Pi {
public static final int N = 1000;
public static void main(String[] args) {
double sum = 0.0; // final sum
double term; // each term, without sign
double sign = 1.0; // sign on each term
for (int k = 0; k < N; k++) {
term = 1.0/(2.0*k + 1.0);
sum = sum + sign*term;
if (k%(N/20) == 0)
System.out.println ("k: " + k + ", sum: " +
sum + ", pi (approx.): " + sum*4.0);
sign = -sign;
}
System.out.println("Final pi (approx., " + N +
" terms): " + sum*4.0);
System.out.println("Actual pi: " + Math.PI);
}
}
Here are results of a run with N = 1000 (as above). Notice that
with 1000 terms, we still only get 3 significant digits of accuracy.
k: 0, sum: 1.0, pi (approx.): 4.0
k: 50, sum: 0.7902996532467627, pi (approx.): 3.1611986129870506
k: 100, sum: 0.7878733502677479, pi (approx.): 3.1514934010709914
k: 150, sum: 0.7870537743844844, pi (approx.): 3.1482150975379377
k: 200, sum: 0.7866419367957389, pi (approx.): 3.1465677471829556
k: 250, sum: 0.7863941753814, pi (approx.): 3.1455767015256
k: 300, sum: 0.7862287258897132, pi (approx.): 3.1449149035588526
k: 350, sum: 0.7861104126644118, pi (approx.): 3.1444416506576474
k: 400, sum: 0.7860216038246902, pi (approx.): 3.144086415298761
k: 450, sum: 0.7859524864411895, pi (approx.): 3.143809945764758
k: 500, sum: 0.7858971648964472, pi (approx.): 3.143588659585789
k: 550, sum: 0.7858518835320016, pi (approx.): 3.1434075341280066
k: 600, sum: 0.7858141364872435, pi (approx.): 3.143256545948974
k: 650, sum: 0.7857821877484866, pi (approx.): 3.1431287509939465
k: 700, sum: 0.7857547965968966, pi (approx.): 3.1430191863875865
k: 750, sum: 0.7857310527305843, pi (approx.): 3.142924210922337
k: 800, sum: 0.785710273138507, pi (approx.): 3.142841092554028
k: 850, sum: 0.7856919353289389, pi (approx.): 3.1427677413157555
k: 900, sum: 0.7856756327903573, pi (approx.): 3.1427025311614294
k: 950, sum: 0.7856610445024891, pi (approx.): 3.1426441780099563
Final pi (approx., 1000 terms): 3.140592653839794
Actual pi: 3.141592653589793
Here are results of a run with N = 10000 (just N changed above). Notice that
with 10000 terms, we still only get 4 significant digits of accuracy.
k: 0, sum: 1.0, pi (approx.): 4.0
k: 500, sum: 0.7858971648964472, pi (approx.): 3.143588659585789
k: 1000, sum: 0.7856479135848861, pi (approx.): 3.1425916543395442
k: 1500, sum: 0.7855647190085467, pi (approx.): 3.142258876034187
k: 2000, sum: 0.7855231009208814, pi (approx.): 3.1420924036835256
k: 2500, sum: 0.7854981234094468, pi (approx.): 3.141992493637787
k: 3000, sum: 0.7854814689599474, pi (approx.): 3.1419258758397897
k: 3500, sum: 0.7854695715650873, pi (approx.): 3.1418782862603494
k: 4000, sum: 0.7854606477753789, pi (approx.): 3.1418425911015158
k: 4500, sum: 0.785453706609383, pi (approx.): 3.141814826437532
k: 5000, sum: 0.7854481533989477, pi (approx.): 3.1417926135957908
k: 5500, sum: 0.7854436096795664, pi (approx.): 3.1417744387182656
k: 6000, sum: 0.7854398231205371, pi (approx.): 3.1417592924821482
k: 6500, sum: 0.7854366190194315, pi (approx.): 3.141746476077726
k: 7000, sum: 0.7854338725816665, pi (approx.): 3.141735490326666
k: 7500, sum: 0.7854314922867798, pi (approx.): 3.141725969147119
k: 8000, sum: 0.7854294094915611, pi (approx.): 3.1417176379662446
k: 8500, sum: 0.7854275717022473, pi (approx.): 3.1417102868089892
k: 9000, sum: 0.7854259380890596, pi (approx.): 3.1417037523562383
k: 9500, sum: 0.7854244764170554, pi (approx.): 3.1416979056682215
Final pi (approx., 10000 terms): 3.1414926535900345
Actual pi: 3.141592653589793
Here are results of a run with N = 100000 (just N changed above). Notice that
with 100000 terms, we still only get 5 significant digits of accuracy.
k: 0, sum: 1.0, pi (approx.): 4.0
k: 5000, sum: 0.7854481533989477, pi (approx.): 3.1417926135957908
k: 10000, sum: 0.7854231608976336, pi (approx.): 3.1416926435905346
k: 15000, sum: 0.7854148289530574, pi (approx.): 3.1416593158122295
k: 20000, sum: 0.7854106627724717, pi (approx.): 3.141642651089887
k: 25000, sum: 0.7854081629974585, pi (approx.): 3.141632651989834
k: 30000, sum: 0.7854064964530088, pi (approx.): 3.141625985812035
k: 35000, sum: 0.7854053060505151, pi (approx.): 3.1416212242020602
k: 40000, sum: 0.7854044132412012, pi (approx.): 3.141617652964805
k: 45000, sum: 0.7854037188295484, pi (approx.): 3.1416148753181936
k: 50000, sum: 0.7854031632974463, pi (approx.): 3.141612653189785
k: 55000, sum: 0.7854027087693466, pi (approx.): 3.1416108350773864
k: 60000, sum: 0.7854023299946653, pi (approx.): 3.141609319978661
k: 65000, sum: 0.7854020094921154, pi (approx.): 3.1416080379684614
k: 70000, sum: 0.7854017347749936, pi (approx.): 3.1416069390999746
k: 75000, sum: 0.785401496686328, pi (approx.): 3.141605986745312
k: 80000, sum: 0.7854012883583752, pi (approx.): 3.1416051534335008
k: 85000, sum: 0.7854011045393011, pi (approx.): 3.1416044181572045
k: 90000, sum: 0.7854009411443477, pi (approx.): 3.1416037645773907
k: 95000, sum: 0.7854007949486786, pi (approx.): 3.1416031797947146
Final pi (approx., 100000 terms): 3.1415826535897198
Actual pi: 3.141592653589793
Here are two more complicated listings along these lines:
Better formulas for pi,
pi by averaging,
pi from an expression.