Extrem große Zahlen schnell in eine Datei schreiben

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.
Antworten
JonSnow
User
Beiträge: 8
Registriert: Montag 27. September 2021, 12:12

Hi Ihr Lieben :)

Ich beschäftige mich gerade mit der Berechnung großer Exponentialfunktionen und der Übertragung des Ergebnisses in eine Datei. Dabei fällt mir auf, dass die Berechnung als Solches innerhalb eines Wimpernschlages erfolgt. Sobald ich diese Zahl dann als String caste, dauert das eine halbe Ewigkeit. (Ich berechne gerade 2 hoch 100M, die Berechnung war in 0,002 Sekunden durch. Das Casten in einen String, dauert nun schon über 2 Stunden.

Welche Möglichkeiten habe ich, diesen Vorgang zu beschleunigen?

Code: Alles auswählen

def main():
    x = 4200042
    ergebnis = str(1 << x) # Register um x-bit nach links verschieben

    try:
        datei = open('exponent_' + str(x) + '.txt', 'w')
        datei.write('2 hoch ' + str(x) + '\n')
        datei.write(ergebnis)
        datei.close
    except:
        print('Fehler beim Schreiben in die Datei')

if __name__ == '__main__':
    main()
Zur Berechung habe ich verschiedene Ansätze probiert. Dieser ist der Schnellste. Was immer Unmengen Zeit in Anspruch nimmt, ist eben das Casten. Das anschließende Schreiben in eine Datei geht auch sehr schnell von Statten.

Ich freue mich auf Eure Antworten,

lieben Gruß,

JonSnow
"Alles ist Eins, außer der Null"- Wau Holland
Sirius3
User
Beiträge: 18253
Registriert: Sonntag 21. Oktober 2012, 17:20

Das Umwandeln in eine Dezimalzahl bedeutet, dass die Zahl so lange durch 10 geteilt werden muß, bis Du alle Ziffern hast.
Das dauert entsprechend lang.
Schneller geht das Umwandeln, wenn Du gleich mit Dezimalzahlen rechnest, wie bei decimal.Decimal.

String strückelt man nicht mit + zusammen, sondern benutzt Formatstrings. Dateien sollte man auch wieder schließen indem man close aufruft und nicht nur close referenzieren. Am besten öffnet man Dateien in einem with-Statement. Nackte excepts darf man nicht benutzen, weil damit auch Programmierfehler verdeckt werden und Du den Fehler nur schwer finden kannst. Fange immer nur Fehler an, die Du auch erwartest, hier also keine.

Code: Alles auswählen

    with open(f'exponent_{x}.txt', 'w') as datei:
        datei.write(f'2 hoch {x}\n')
        datei.write(ergebnis)
        datei.write('\n')
Antworten