vorab , fiel mir grade auf:
Die Regeln
https://wiki.python-forum.de/Forum/Regeln
im Post
viewtopic.php?t=17644
sind irgendwie nicht mehr da.
Seite wurde nicht gefunden
Die Verbindung mit dem Server wiki.python-forum.de schlug fehl.
_______________________________________________________
Meine Frage ist eigentlich eine triviale. (sorry)
Code: Alles auswählen
import math
n = 652143543
a = 356464641
z = (math.pow(a, 2)) % n # z = (pow(z, 2 , n))
z2 = (pow(a, 2,n)) # z = (pow(z, 2 , n))
> 566571738
Bei kleinen Zahlen funktioniert es richtig und bringt gleiche Ergebnisse.
Bei größeren, wie oben, kommen diese abweichenden Ergebnisse. (wie im oben: 37.0 vs. 38 )
Bei noch größeren kommen völlig andere Ergebnisse raus.
(
n = 6521435434356445
a = 3564646415263446 ergibt:
>>> 4575771299225419.0
>>> 3456456392333871
)
Also ich weiß aus anderen Sprachen, wie Javascript, daß es Rundungsfehler gibt, wenn man bestimmte Operationen wie Divisionen durchführt.
Aber ich dachte, daß Python da (und gerade in der math Bib) beim Potenzieren solche Fehler nicht machen würde.
Ich weiß jetzt nicht mehr, welches Ergebnis richtig ist.
Ich vermute, daß pow() (mittlerweile) präziser ist, als math.pow() und das richtige Ergebnis liefert.
Leider weiß ich gerade nicht mehr, in welchen Quellen (Büchern, Seiten) ich wegen dem Rundungsphänmen nachschlagen soll. Hab das nur mal irgendwo bei Thomas Theis in seinem Buch gelesen.
auf welchen Befehl (pow/mathpow) soll ich vertrauen? (vom Gefühl her auf pow() )
Könnt Ihr mir helfen?
Danke (hoffe, die Frage ist nicht zu doof.