PI Berechnung schnell durchführen
-
Hallo!
Ich muss ein Programm schreiben, das PI berechnet (beliebiger Genauigkeit d.h. der Benutzer gibtein, dass das Programm PI auf z.B. 10 Stellen genau Berechen soll).
Mein Programm funktioniert zwar, allerdings ziemlich langsam. Jetzt wollte ich mal Fragen wie man es schneller machen könnte (außer C++ verwenden ;-)).
import java.util.Scanner; public class calculatePi { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("How many periods shall the constant PI have?"); int inputNum = scanner.nextInt(); long precision = (long)Math.pow(10,inputNum); double refPI = ((long)(Math.PI*precision))/(double)precision; double calcPI = 4.0-4.0/3.0; int ct = 0; for (long i = 5; calcPI <= refPI;i += 4) { ++ct; // overflow if (i<0) break; calcPI += 4.0/i; calcPI -= 4.0/(i+2); } System.out.println("PI: " + calcPI); System.out.println("Needed Iterations:" + ct); } }
-
Math.pow() ist zu langsam. Vermeide es wo es geht!
Besser:precision = 10; for (int i=0; i<inputNum; i++); precision *= 10;
-
Das ist doch nie im Leben eine Möglichkeit PI selber zu berechnen.
-
verwende nach moeglichkeit eine entwicklung, die schneller konvergiert.
z.b. sowas in der richtung:
pi/4 = 4/5 sum(((-1)^k / (2k+1))*(1/5)^2k) - 1/239 sum((-1)k/(2k+1)*(1/239)2k)