Seite 1 von 1

Dezimaldarstellung einer großen Zahl

Verfasst: Dienstag 2. August 2011, 08:03
von bords0
Kürzlich wurde ich gefragt, was den 3 hoch 100 Millionen sei. Kein Problem, dachte, und ließ Python

Code: Alles auswählen

a = 3 ** 100000000
ausrechnen. Funktionierte sogar in akzeptabler Zeit (wenn auch nicht augenblicklich).

Jetzt wollte ich nur noch die Zahl in eine Datei schreiben. Dazu habe ich mal

Code: Alles auswählen

s = str(a)
eingebeben. Und wartete. Und wartete. Und wartete. Und habs am nächsten Tag abgebrochen. Das Konvertieren ins Dezimalsystem ist anscheinend aufwändiger als das Ausrechnen. Im Nachhinein nicht unplausibel....

Kennt jemand eine Möglichkeit, das in vernünftiger Zeit hinzubekommen?

Re: Dezimaldarstellung einer großen Zahl

Verfasst: Dienstag 2. August 2011, 08:50
von gkuhl
Hast du mal abgeschätzt wieviele Ziffern 3**100000000 hat?

Re: Dezimaldarstellung einer großen Zahl

Verfasst: Dienstag 2. August 2011, 09:10
von BlackJack
@bords0: Die „GNU Multiple Precision Arithmetic Library” (libgmp) bekommt das in vertretbarer Zeit hin. Es gibt eine Python-Anbindung (`gmpy`).

@gkuhl: Es sind genau 47.712.126 Ziffern. :-)

Re: Dezimaldarstellung einer großen Zahl

Verfasst: Dienstag 2. August 2011, 12:22
von gkuhl
@BlackJack: Meine Schätzung war 47.712.255. Linear extrapoliert aus den ersten 1000 Elementen der Folge. Hätte nicht gedacht, dass das so gut funktioniert.

Re: Dezimaldarstellung einer großen Zahl

Verfasst: Dienstag 2. August 2011, 13:29
von Darii
Ja ist mir auch schonmal aufgefallen, dass das nicht linear ist ab einem Schwellwert dauert es lange, hatte aber nie Lust mir die Implementierung genauer anzugucken.

Re: Dezimaldarstellung einer großen Zahl

Verfasst: Dienstag 2. August 2011, 15:31
von bords0
Sehe ich das richtig, dass ich GMP selbst kompilieren muss? (Bin auf Windows.)

Re: Dezimaldarstellung einer großen Zahl

Verfasst: Dienstag 2. August 2011, 16:10
von BlackJack
@bords0: Könnte sein. Falls die Bibliothek nicht in den Windows-Installern für das Python-Modul enthalten ist.

Re: Dezimaldarstellung einer großen Zahl

Verfasst: Mittwoch 3. August 2011, 08:13
von bords0
@gkuhl: meine Schätzung wäre gewesen

Code: Alles auswählen

 >>> math.log10(3)*100000000
47712125.471966244
was wgenau dem tatsächlichen Wert entspricht (natürlich muss man aufrunden).

@BlackJack: gmpy bringt tatsächlich alles mit. Ich hatte mich von der Meldung "DLL load failed" irritieren lassen (gmpy2 auf python 2.7). Mit gmpy (ohne 2) auf 3.2 ging es aber problemlos. (Und ich war schon auf der Suche nach MPIR-binaries - MPIR wird meist auf Windows als gmp-Ersatz verwendet...)

Danke! Geht rasend schnell.

Re: Dezimaldarstellung einer großen Zahl

Verfasst: Mittwoch 3. August 2011, 16:00
von BlackJack
@bords0: Das DLL load failed… könnte auch an einer fehlenden Microsoft-DLL liegen. Auf der Webseite von `gmpy` bei Google stand dazu etwas.