aktelle Werte in einer while schleife ausgeben

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
plotxy
User
Beiträge: 20
Registriert: Dienstag 7. Oktober 2014, 18:04

Ich möchte die eulersche zahl auf n stellen berechnen und habe damit noch bis nächsten mittwoch zeit. Da die berechnung sehr lange dauert fange ich morgen an mein script auszuführen. Doch die eigentliche Gretchenfrage ist wie, ob ich währen der Berechnung die aktuellen Werte auslesen kann, gesetzt dem Fall, dass der Rechenknecht bis dahin nicht fertig wird ...

Danke schon mal im Voraus für hilfreiche antworten.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hallo und willkommen im Forum!

Ich würde einfach ab und zu, wie häufig musst du selbst entscheiden, das Zwischenergebnis in eine Datei schreiben. Dazu vielleicht noch alle anderen Werte, welche zur Fortsetzung benötigt werden. Dann überstehst du auch einen Stromausfall oder einen Absturz.

Wie viele Stellen sollst du denn bestimmen und warum machst du das in Python? Wenn es wirklich so lange dauert, dann hätte ich C oder C++ bemüht. Falls du es noch nicht getan haben solltest, dann wirf noch einen Blick auf PyPy und Cython. Damit lässt sich für sehr wenig Aufwand sehr viel Zeit sparen.
Das Leben ist wie ein Tennisball.
plotxy
User
Beiträge: 20
Registriert: Dienstag 7. Oktober 2014, 18:04

ich mache es in python, weil ich da mit der lib mpmath eine hinreichende Genauigkeit erreichen kann. 1 mio stellen wäre schon gut. Aber der Flaschenhals ist der Speicher.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

GNU MP kennst du? Ich würde mal davon ausgehen, dass das deutlich performanter ist als die Pure-Python-Lösung von mpmath. Für GNU MP gibt es mit GMPY auch eine Python-Schnittstelle.
Das Leben ist wie ein Tennisball.
plotxy
User
Beiträge: 20
Registriert: Dienstag 7. Oktober 2014, 18:04

Also was genau soll ich jetzt machen ? einfach gmpy installieren ? und was ist mit pypy oder cython ?
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Wenn du dein Programm schon fertig geschrieben hast, dann würde ich es einfach mit PyPy starten. Das läuft dann wahrscheinlich deutlich schneller als mit dem Standardinterpreter. Dann musst du nicht ganz so lange warten. In GMPY oder Cython würde ich mich an deiner Stelle nur einarbeiten, wenn du noch mehr solcher intensiver Berechnungen machen musst. Sonst lohnt sich der ganze Aufwand wohl nicht.
Das Leben ist wie ein Tennisball.
plotxy
User
Beiträge: 20
Registriert: Dienstag 7. Oktober 2014, 18:04

Also wenn ich den code bei pypy reinhacke ist die Bibliothek mpmath unbekannt. Aber danke schon mal für deine Hilfe.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Du musst mpmath noch für PyPy installieren.
Das Leben ist wie ein Tennisball.
Sirius3
User
Beiträge: 18266
Registriert: Sonntag 21. Oktober 2012, 17:20

Ich hab mal die Eulerzahl auf eine Million Stellen berechnet. Mit reinem Python hat's bei mir ~15min gedauert.
Die ersten paar Ziffern sind 2.718281828459045235360287471352662497757247093699959574966967627724076630353547594571382178525166427
plotxy
User
Beiträge: 20
Registriert: Dienstag 7. Oktober 2014, 18:04

Ah, das habe ich mir schon fast gedacht ... danke.
Also bei mir hat er für 200000 stellen 40 min gebraucht. Wie hast du das mit der Genauigkeit gelöst ?
Sirius3
User
Beiträge: 18266
Registriert: Sonntag 21. Oktober 2012, 17:20

@plotxy: ich habe jetzt keine genaue Fehlerrechnung gemacht, sondern einfach ein paar hundert Stellen mehr berechnet und dann gerundet. Mathematica scheint sich in den letzten paar Stellen auch immer etwas großzügig zu zeigen. (braucht übrigens für die selbe Aufgabe nur 2 Sekunden).
plotxy
User
Beiträge: 20
Registriert: Dienstag 7. Oktober 2014, 18:04

@Sirius3 bis welche Fakultät hast du es denn laufen lassen ? Oder hast du eine andere Berechnungsformel genommen ?
Sirius3
User
Beiträge: 18266
Registriert: Sonntag 21. Oktober 2012, 17:20

205211!
plotxy
User
Beiträge: 20
Registriert: Dienstag 7. Oktober 2014, 18:04

Und Genauigkeit 1 mio ? Woher wusstest du, dass du es bis 200000! Laufen lassen musstest ?
Sirius3
User
Beiträge: 18266
Registriert: Sonntag 21. Oktober 2012, 17:20

Wußte ich nicht; kam aus der Rechnung raus.
plotxy
User
Beiträge: 20
Registriert: Dienstag 7. Oktober 2014, 18:04

Warum ist es bei dir so krass schneller ?
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Wie sieht denn dein bisheriger Code aus? Welches Verfahren verwendest du? Wenn ich ins Blaue tippen sollte würde ich vermuten, dass du bei jedem Durchlauf die Fakultät neu berechnest und nicht vom vorherigen Wert weiterrechnest.
Das Leben ist wie ein Tennisball.
Sirius3
User
Beiträge: 18266
Registriert: Sonntag 21. Oktober 2012, 17:20

Ich bin ja auch blöd. Divisionen dauern naturgemäß viel länger als Multiplikationen. Jetzt bin ich bei gut 4 Minuten.
plotxy
User
Beiträge: 20
Registriert: Dienstag 7. Oktober 2014, 18:04

Ich poste den code nachher mal. Bin noch in der Schule. Ich habe das Taylor verfahren benutzt und die Fakultät nicht immer neu berechnet. Ich habe Python 3.4 mit der lib mpmath.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Mein altes Notebook rödelt auch in recht genau vier Minuten durch. PyPy machts in drei.
Das Leben ist wie ein Tennisball.
Antworten