Python Programmiersprache, Programm was unendlich viele Nachkommastellen berechnet?
Python hat nur eine begrenzte anzahl an Nachkommastellen, ~10-15, wie berechne ich unendlich viele Nachkommastellen , von irrationalen zahlen sqrt(2), Pi, e,??? und kann man das mit dem Heron-Verfahren zusammenverknüpfen zur berechnung von der n-ten wurzel (näherungsweise)????
3 Antworten
![](https://images.gutefrage.net/media/user/Isendrak/1555747535308_nmmslarge__0_0_160_160_7f828fad18ee7edb96b8daceedaeeadb.png?v=1555747535000)
Verwende das "decimal" Modul.
Beispiel:
import decimal
#Maximal 200 Nachkommastellen (bei Bedarf anpassen)
decimal.getcontext().prec = 200
#Berechne die Quadratwurzel von 2
print(decimal.Decimal(2).sqrt())
P.S.: "decimal" gehört mit zur Standardbibliothek, also keine weiteren Installationen erforderlich...
P.P.S.: Nicht Python hat 10~15 Nachkommastellen, sondern eine Variable vom Typ "float" in Python (und auch so ziemlich jeder anderen Programmiersprache...)
![](https://images.gutefrage.net/media/user/Isendrak/1555747535308_nmmslarge__0_0_160_160_7f828fad18ee7edb96b8daceedaeeadb.png?v=1555747535000)
Bin mir nicht sicher, ob "decimal" da ne Begrenzung hat, ggf. einfach mal ausprobieren...
![](https://images.gutefrage.net/media/user/Isendrak/1555747535308_nmmslarge__0_0_160_160_7f828fad18ee7edb96b8daceedaeeadb.png?v=1555747535000)
Und hier kommt der Gratisbonus:
import decimal
decimal.getcontext().prec = 2000000
EINS = decimal.Decimal(1.0)
def GoldenerSchnitt(iterationen):
goldenerSchnitt = EINS
for i in range(0, iterationen):
goldenerSchnitt = EINS + (EINS / goldenerSchnitt)
return goldenerSchnitt
def Pi(iterationen):
pi = EINS
plus = False
divisor = decimal.Decimal(3)
for i in range(0, iterationen):
if plus: pi += EINS / divisor
else: pi -= EINS / divisor
divisor += 2
plus = not plus
return pi * 4
print('Das kann ne Weile dauern...')
print(Pi(99999999))
print('Das dauert jetzt auch nochmal ne Weile... Hol dir besser nen Kaffee (oder auch zwei (... Kannen))')
print(GoldenerSchnitt(99999999))
![](https://images.gutefrage.net/media/user/hypergerd/1444746519_nmmslarge.jpg?v=1444746519000)
Diese Leibnitz-Reihe {Pi=4*atan(1) } ist eine der langsamsten Algorithmen zur Berechnung von Pi-Nachkommastellen.
Pi=atan(1/57)*176+atan(1/239)*28-atan(1/682)*48+atan(1/12943)*96
konvergiert wesentlich schneller.
Das mit
import decimal
kannte ich auch noch nicht.
![](https://images.gutefrage.net/media/user/hypergerd/1444746519_nmmslarge.jpg?v=1444746519000)
Wie bei allen Sprachen gibt es 2 grobe Wege:
a) Strings {Texte}
b) Arrays {Felder aus Ganzzahlen wie Byte oder Integer}
Vorsicht mit dem Wort "unendlich"! Du hast doch nicht mal 32 GB RAM und selbst mit HD-Auslagerung kommst Du höchstens beim Speichern auf 1 TB Daten.
Mit dieser langsamen Sprache wirst Du zu Lebzeiten nicht mal 1 Mrd Stellen schaffen!
Mit c++ optimierten Maschinencode schafft ein i7 die 1 Mrd. Stellen in etwa 4 min.
Wie man die n. Wurzel berechnet, zeigt der Iterationsrechner
http://www.lamprechts.de/gerd/Roemisch_JAVA.htm
im Beispiel 15. Einige sagen Heron... andere Newton-Iteration...
Jede Berechnung von irrationalen Zahlen ist IMMER näherungsweise! Man muss zwingend die Anzahl der Nachkommastellen als Abbruchbedingung angeben.
Also gebe erst mal Deine Prioritäten an (Geschwindigkeit, maximale Stellen-Anzahl, Vorgabe der Sprache) -> dann fallen viele Wege automatisch weg.
![](https://images.gutefrage.net/media/default/user/11_nmmslarge.png?v=1551279448000)
aber wie funktioniert das prinzip, der micropozessor hat einen datenbus von 64 bit, wie kann er dann größere zahlen als 2^64 berechnen oder ganz genaue zahlen mit mehreren nachkommastellen, und wie funktioniert das prinzip zu berechnung von x nachkommastellen von irrationalen zahlen, ohne bibliotheken etc. einzubeziehen, weil sonst würde ich das prinzip nicht verstehen.
![](https://images.gutefrage.net/media/user/hypergerd/1444746519_nmmslarge.jpg?v=1444746519000)
Das Prinzip ist das, dass man die Grundrechenarten in Funktionen packt und als Übergabeparameter entweder
a) Strings { wie bei php }
b) Integer-Arrays nutzt
Jeder nackte Win-PC hat z.B. BAT Scriptsprache aus der 16-Bit-Welt
zeigt, wie man selbst mit so kleinen Integer-Zahlen die Grundrechenarten realisiert: Blöcke von 10000er zusammenpackt
Analog zum Schriftlichen Rechnen.
Der dahinterstehende Algorithmus bei diesem Beispiel ist Punkt 1
http://www.lamprechts.de/gerd/Kreiszahl.htm
also atan(x)
Obwohl call :PiEngine 16 5 -4 239
nur Summen aus 2 Teilsummen ist, wird
call :PiEngine 176 57 28 239 -48 682 96 12943
die 4er Summe noch schneller, da der kleinste Divisor die Konvergenzgeschwindigkeit bestimmt.
Unter §2f kann man sich ein c Programm aus nur 138 Byte ansehen, welches 15000 Stellen berechnen kann. Auch dort werden mit %04d 4er Blöcke gebildet.
Referenz für alle anderen ist §2c, welches vom Weltmeister hoch optimiert wurde: http://www.numberworld.org/y-cruncher/#Download
schafft mit i7 CPU 1 Mrd. Stellen in etwa 4 min!!
(da haben fast alle anderen Sprachen nicht mal 10000 Stellen geschafft)
Dort rechnet er alles mit hexadezimalen Zahlen, multipliziert mit der FFT-Methode auf alles logischen Kernen parallel und erst am Ende wird alles in dezimal umgerechnet.
![](https://images.gutefrage.net/media/default/user/15_nmmslarge.png?v=1551279448000)
In endlicher Zeit kannst du offensichtlich nicht unendlich viele Nachkommastellen berechnen.
könnte ich mit diesem code, auch 2 000 000 stellen ausrechnen?