Seltsames Verhalten von Python (int zu groß)

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
heiliga horsd

Moin,

hab ein seltsames Problem. Ich arbeite mit relativ großen Zahlen (10^617). Die Zahlen werden vom Zufallsgenerator erzeugt, ich kann problemlos damit arbeiten (pow()), aber wenn ich sie normal oder mit pickle speichere, dann wieder entsprechend lade und die selbe Operation durchführen will, heißt es plötzlich, sie seien zu groß, um in einen C long konvertiert zu werden. Wie gesagt, mit exakt den selben Zahlen konnte ich vorher noch arbeiten, aber wenn ich sie von der Festplatte lade plötzlich nichtmehr. Bin gerade echt am verzweifeln!


Gruß
heiliga horsd
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Bitte etwas Code, bei dem der Fehler auftritt. Ein `pickle.loads(pickle.dumps(10**617))` klappt bei mir ohne Probleme.
heiliga horsd

Das Laden funktioniert ja auch, nur das anschließende verwenden der pow()-Funktion nicht.

pow(a,b,c) mit a < 10^5 b,c im Bereich 10^617

Wenn ich b und c vom Programm erzeugen lasse und dann die Pow-Funktion aufrufe funktioniert alles. pickle ich das ganze und lade das wieder geht das auch noch. Wenn ich nun die pow-Funktion mit den Werten aufrufe, sind sie plötzlich zu groß o.O
heiliga horsd

Hab mal noch ein bisschen herumgespielt, das Problem tritt bereits bei Zahlen mit 10**38 auf o.O
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Das kann ich mir nur sehr schwer vorstellen. Wenn ein gepickelter Wert in ein Pythonobjekt zurückgewandelt wurde, dann ist es genau so, als ob die Erzeugung des Objekt auf Grundlage der Angaben vom Parser des Interpreters eingeleitet wurde. Da sind dann keine Spuren von Pickle mehr vorhanden. Das *kann* also gar nicht sein (aber die Technik überrascht einen bekanntlich immer wieder). Bist du wirklich sicher, dass die "entpickelten" Daten wirklich 1:1 dem entsprechen, was du erwartest? Hast du jeden Wert abgeglichen? Auch mit Pseudozufallszahlen gibt es die Möglichkeit, reproduzierbares Verhalten zu schaffen, sodass man kontrollierte Tests schreiben könnte. Und dann zeig doch mal einen solchen Test. Ich finde nach wie vor deine Informationen viel zu dürftig, als dass man sinnvoll helfen könnte.
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Von welcher `pow`-Funktion sprichst du eigentich? `math.pow()` zumindest nimmt nur 2 Argumente. Da geht also garkein `c`...
heiliga horsd

http://docs.python.org/release/3.1.5/li ... s.html#pow

Habe die Zahlen überprüft, sind identisch. Es geht um die dechiffrierung, d.h. die beiden Zahlen sind der Schlüssel. Wenn ich die Schlüssel frisch erzeugt habe, etwas verschlüssele und wieder entschlüsselte läuft das problemlos. Speichere ich den Schlüssel, lade ich ihn wieder und fange wieder das dechiffrieren an, bam, Overflow Error, Python Int zu groß um zu C float konvertiert zu werden.
Zuletzt geändert von heiliga horsd am Donnerstag 25. Oktober 2012, 15:12, insgesamt 1-mal geändert.
heiliga horsd

OK, Python neu installiert, PC neu gestartet, alles funktioniert. Bin zwar gerade echt überfragt, wo der Fehler lag, aber nun läuft alles einwandfrei! Danke für die Hilfe!
Antworten