Meine Freunde,
ich bin an einer Arbeit dran, wo ich durch die Leibniz-Reihe versuche, pi zu berechnen. Dabei benutze ich jeweils BigDecimal und BigInteger. Nun habe ich das Problem, dass bei gewissen Berechnungen BigDecimal zu viele Nachkommastellen berechnet, sodass das Programm abstürzt. Deshalb habe ich diese Werte gerundet. Jedoch stelle ich fest, dass dies die gesamte Berechnung schaden würde, heisst das Resultat würde nicht ganz stimmen. Habt ihr vielleicht eine Idee, wie ich dieses Problem umgehen kann?
Mein Quellcode:
ich bin an einer Arbeit dran, wo ich durch die Leibniz-Reihe versuche, pi zu berechnen. Dabei benutze ich jeweils BigDecimal und BigInteger. Nun habe ich das Problem, dass bei gewissen Berechnungen BigDecimal zu viele Nachkommastellen berechnet, sodass das Programm abstürzt. Deshalb habe ich diese Werte gerundet. Jedoch stelle ich fest, dass dies die gesamte Berechnung schaden würde, heisst das Resultat würde nicht ganz stimmen. Habt ihr vielleicht eine Idee, wie ich dieses Problem umgehen kann?
Mein Quellcode:
Java:
public class piArctan
{
public static void main (String [] args)
{
int p = Db.readInt("E = ");
BigDecimal e = new BigDecimal(Math.pow(10, (-p))); // Die Genauigkeit der Nachkommastellen wird eingegeben.
BigDecimal f = (new BigDecimal(1)).divide(((new BigDecimal(2)).multiply(e)), 2, RoundingMode.HALF_UP) //1 durch (2*e) gibt an, wie viele Glieder ich berechnen muss, um die Genauigkeit zu erhalten
BigInteger n = f.toBigInteger(); //setze es ins BigInteger
BigDecimal arctan = Term(n);
BigDecimal Pi = (new BigDecimal(4)).multiply(arctan); // pi ist so gross wie die gesamte arctan-Reihe nach Leibniz
System.out.println(Pi);
}
public static BigDecimal Term(BigInteger n)
{
BigDecimal x = new BigDecimal(0);
int y = -1;
BigDecimal u = new BigDecimal(2);
for (BigInteger a = BigInteger.valueOf(0); a.compareTo(n) < 1; a = a.add(BigInteger.ONE))
{
y = y * (-1);
BigDecimal b = new BigDecimal(a);
x = x.add((BigDecimal.valueOf(y)).divide(((u.multiply(b))).add(BigDecimal.valueOf(1))));
System.out.println(x);
}
return x;
}
}
Zuletzt bearbeitet von einem Moderator: