Kreiszahl Pi

Elija7906

Neues Mitglied
Ich arbeite gerade an einer Aufgabe über die Kreiszahl PI und habe diese eigentlich auch erledigt frage mich aber warum sich meine Ausgerechnete zahl Pi so sehr von der Math.PI abweicht und wie ich die abweichung verringern könnte?

Vielen Dank!


Java:
package Mathe;


import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Random;

public class Kreiszahl {
    long anzahlPunkte = 1000000000;
    double radius = 1;
    public static void main(String[] args) {

        BigDecimal pi = Algo(1000000000, 1);
        System.out.println("PI = "  + pi);
        System.out.println(Math.PI);
        
    }

    public static BigDecimal Algo(long anzahlPunkte, double radius) {
        Random random = new Random();
        long treffer = 0;
        //int treffer = 0;
        for (long i = 0; i < anzahlPunkte; i++) {
            double x = random.nextDouble() * radius;
            double y = random.nextDouble() * radius;

            if (x * x + y * y <= radius * radius) {

                treffer++;

            }
        }
        return BigDecimal.valueOf(4).multiply(BigDecimal.valueOf(treffer).divide(BigDecimal.valueOf(anzahlPunkte),20,RoundingMode.HALF_DOWN));
    }
}
 
Also der Algorithmus ist recht ungenau. Du brauchst also nicht einmal BigDecimal oder so, denn die Genaugigkeit nimmt viel zu langsam zu um dies zu rechtfertigen.

Schauen wir einfach einmal im Wikipedia:

Da findest Du dann unter anderem eine Herleitung, die die Genauigkeit angibt ... und die ist abhängig von 1 / Wurzel(N). Also 100 Mal mehr Berechnungen geben nur 1/10 Verbesserung.
Also für 0,0001 Genauigkeit braucht es also ca. eine Milliarde Durchläufe... um da eine Stelle mehr dazu zu bekommen, wären es 100 Milliarden ... Nur um so paar Größenordnungen zu skizzieren ... (Also ganz wichtig: Hier geht es nur um Größenordnungen um die grobe Erwartung zu verdeutlichen ...

Um den Punkt BigDecimal vs. double noch zu berücksichtigen: Die Genauigkeit reicht da bis um 15 Stellen ... Und wenn Du auf ungefähr 10 Stellen genau werden willst, dann wären das über 10 hoch 21 Durchgänge ... Ich denke, das zeigt, wie schlecht diese Annäherung von pi ist.
 
Also der Algorithmus ist recht ungenau. Du brauchst also nicht einmal BigDecimal oder so, denn die Genaugigkeit nimmt viel zu langsam zu um dies zu rechtfertigen.

Schauen wir einfach einmal im Wikipedia:

Da findest Du dann unter anderem eine Herleitung, die die Genauigkeit angibt ... und die ist abhängig von 1 / Wurzel(N). Also 100 Mal mehr Berechnungen geben nur 1/10 Verbesserung.
Also für 0,0001 Genauigkeit braucht es also ca. eine Milliarde Durchläufe... um da eine Stelle mehr dazu zu bekommen, wären es 100 Milliarden ... Nur um so paar Größenordnungen zu skizzieren ... (Also ganz wichtig: Hier geht es nur um Größenordnungen um die grobe Erwartung zu verdeutlichen ...

Um den Punkt BigDecimal vs. double noch zu berücksichtigen: Die Genauigkeit reicht da bis um 15 Stellen ... Und wenn Du auf ungefähr 10 Stellen genau werden willst, dann wären das über 10 hoch 21 Durchgänge ... Ich denke, das zeigt, wie schlecht diese Annäherung von pi ist.
Ok Danke habs Verstanden. Werde das besser umsetzen. Das Mathe soooo komplex ist wusste ja keine xd.
 

Neue Themen


Zurück
Oben