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
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...)
Bin mir nicht sicher, ob "decimal" da ne Begrenzung hat, ggf. einfach mal ausprobieren...
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))
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.
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.
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.
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.
In endlicher Zeit kannst du offensichtlich nicht unendlich viele Nachkommastellen berechnen.
könnte ich mit diesem code, auch 2 000 000 stellen ausrechnen?