Wie würde ich Python mit Werten in der Größenordnung von 1099511627776 Bits groß (ja. 137 GB) arbeiten? Ich habe etwas, was Sie implementieren müssen (oder wenn Sie einen besseren Weg vorschlagen können, wird die Methoden ändern). Offensichtlich haben die neuen Länge-Typen von PGP 3 Abschnitte anstelle von 2. Jetzt sind es: Länge Typ, Länge-Wert-Typ und die Länge. Der Länge-Typ ist 2 Bits, was zu 191 Bytes, 8383 Bytes, 4294967296 Bytes oder Teillängen übersetzt. Die Länge wird dann in Bytes codiert. Wie würde ich überprüfen, ob ein Wert weniger als 4294967296 Bytes groß ist, wenn ich nicht sogar 1 << (4294967296 << 8)
tun kann? es ist zu groß, um sogar lange zu passen.Wie gehen Sie mit extrem großen Werten in Python um?
Antwort
Mit der Drei-Argument-Form von pow()
.
was? 'pow (2, 4294967296 << 8)'? Das Problem ist nicht berechnet den Wert. Das Problem besteht darin, den Wert zu speichern. und ich habe keine Nummer zum Mod von – calccrypto
@calccrypto: ich denke, was Ignacio hier meinte ist wie in Mathe schreiben Sie nicht 10 ..... 0, 1000 Null Sie nur 10^1000 geschrieben, so können Ihre Zahlen sein in dieser Form gespeichert :), und ich denke, dass das Muster, das Ignacio Ihnen gegeben hat, sehr hilfreich sein kann, um Berechnungen durchzuführen, schauen Sie sich den RSA-Algorithmus an, um zu sehen, was ich meine, alles basierend auf Arithmetik, insbesondere dem Modulo-Operator. +1 für Ignacio. – mouad
Verwenden Sie eine große Nummernbibliothek wie GMPY.
Netter Link. Dies löst jedoch nicht das Problem, sich mit einer Nummer zu befassen, die 137 GB an Daten zum Speichern benötigt ;-) –
Es ist nicht nur zu groß, um lange zu passen, es ist zu groß, um in den Speicher eines Computers zu passen. Ich glaube, du hast etwas falsch verstanden.
Wie ich es verstehe, ist der größte Schlüsselwert 4.294.967.295 Bytes. Das sind 4 GB, nicht 137 GB. Sie halten diesen Schlüssel im Speicher nicht als eine Zahl, sondern als eine Folge von Bytes. Also ich weiß nicht, wo Sie eine Nummer bekommen, die 137 GB groß ist.
Wenn PGP dies erfordert, wäre es unmöglich zu implementieren. Da es Implementierungen gibt, bin ich mir sicher, dass das nicht so ist.
(Auch ich bin sicher, es gibt PGP-Module für Python, aber wenn Sie dies tun, nicht weil Sie es brauchen, aber für die Praxis und weil Sie wollen lernen, dann halten!)
4GB. Hoppla. Ich habe wahrscheinlich etwas seltsames in Wolfram Alpha gemacht. Ja, ich lese durch RFC4880 einen zufälligen Abschnitt zu einer Zeit.Ich bin die Art von Person, die wissen will, was hinter den Kulissen ist, anstatt nur bestimmte Befehle zu verwenden – calccrypto
Ich interpretiere RFC4880 (November 2007) anders. Abschnitt 3.2 beschreibt Mehrfachpräzisions-Ganzzahlen mit einer Länge von 2 Oktetten, so dass die größte Größe 64 KB betragen würde. Abschnitt 4.2.2 beschreibt das neue Paketformat und die Dokumentennummern der von Ihnen beschriebenen Skala. Aber das Paketformat ist nicht dasselbe wie das Ganzzahlformat mit Mehrfachpräzision. Wenn Sie es anders interpretieren, aktualisieren Sie bitte Ihre Frage mit den genauen Abschnitten des RFC, den Sie gerade lesen.
- 1. Wie gehen Sie mit großen Wenn-Bedingungen um?
- 2. Wie gehen Sie mit kleinen Datensätzen um?
- 3. Wie gehen Sie mit Benutzereinstellungen um?
- 4. Wie gehen Sie mit Laufzeitdatentypen um?
- 5. Wie gehen Sie mit E-Mails um?
- 6. Wie gehen Sie mit NULL-Werten in Spalten vom Typ boolean in MS Access um?
- 7. Wie gehen Sie mit fehlenden Daten mit numpy/scipy um?
- 8. Wie geht man mit großen Arrays in Python um?
- 9. Wie gehen Sie mit dem Datenungleichgewicht bei SVM um?
- 10. Wie gehen Sie mit der internen Systementwicklung um?
- 11. Extrem große Boolesche Liste in Python
- 12. Suchen von Werten in einer großen Matrix
- 13. Sub-Abfrage auf großen Tisch mit verbinden extrem langsam
- 14. DistanceFromLocation produziert extrem großen (falschen) Abstand
- 15. Wie gehen Sie mit Assoziationen zwischen Aggregaten in DDD um?
- 16. Wie gehen Sie mit der Zeitzonen-Differenzberechnung in PHP um?
- 17. Wie gehen Sie mit "Super" Generika in Java um?
- 18. Wie gehen Sie mit Änderungsverfolgung in MVVM um?
- 19. Wie gehen Sie mit Gleichzeitigkeit in NHibernate um?
- 20. Wie gehen Sie mit SSL in der Entwicklung um?
- 21. Wie gehen Sie in Spring MVC mit Ajax-Anfragen um?
- 22. Wie gehen Sie mit Dateibesitz in Git um?
- 23. Wie gehen Sie mit Polymorphie in einer Datenbank um?
- 24. Wie gehen Sie mit Transport-Level-Fehlern in SqlConnection um?
- 25. Wie gehen Sie mit Präzisionsproblemen in Matlab um?
- 26. Extrem hohe Speicherbelegung - Umgang mit großen Bildern auf dem iPad?
- 27. Wie gehen Sie am besten mit Tests mit Daten um?
- 28. Wie gehen Sie mit Audit-Logging mit SSRS um?
- 29. Kendo MVC ToDataSourceResult extrem langsam mit großen IQueryable
- 30. Wie arbeiten Sie mit großen Array in Python?
... yikes! Es ist nicht vernünftig, praktisch oder ratsam, mit einer "Nummer" dieser Größe umzugehen. Es muss in Stücke zerlegt werden - z.B. Eine 50-GB-Datenbank wird in der Regel nicht sofort geladen. –
wissen Sie zufällig, wie PGP es tut? – calccrypto
@calcrypto Wenn es sich mit so großen Zahlen beschäftigt, würde ich mir vorstellen, dass es es in einer "komprimierten" Form speichert - wie auf http://primes.utm.edu/largest.html :-) Ist die Quelle verfügbar? Obwohl, wenn man die Primzahlen betrachtet, ist der größte "nur" 12 Millionen Ziffern lang. –