![]() |
Fehler: Ungültige Gleitkommaoperation
Ich programmiere gerade ein Programm für die RSA-Verschlüsselung und habe dabei folgendes Problemchen: Ich bekomme ständig den Laufzeitfehler "Ungültige Gleitkommaoperation". Der betreffende Code sieht so aus:
Delphi-Quellcode:
sprich buchstabe^d modulo n
buchstabe:=Round(IntPower(buchstabe,d)) mod n;
Die Variable Buchstabe ist int64. Wenn nun zB buchstabe=9,d=59 und n=35 kommt mein Fehler. Rausgefunden habe ich bereits, dass das Ergebnis von IntPower zu hoch ist. Wenn ich als d zB 11 nehme geht es. Meine Frage ist also: Wie kann ich das umgehen? |
Re: Fehler: Ungültige Gleitkommaoperation
Zitat:
-> ![]() |
Re: Fehler: Ungültige Gleitkommaoperation
Wenn du auf diese Art Potenzen berechnest, wirst du selbst mit größeren Integer-Klassen nicht weit kommen.
|
Re: Fehler: Ungültige Gleitkommaoperation
Zitat:
Zitat:
|
Re: Fehler: Ungültige Gleitkommaoperation
Zitat:
![]() Wenn sowas immernoch nicht reicht, hast du schlechte Karten das ohne spezielle (größerregisterige Hardware) hinzubekommen. |
Re: Fehler: Ungültige Gleitkommaoperation
Um mal deutlicher zu werden: Wenn du erst potenzierst und dann den Rest nimmst, kann dir keine BigInt-Klasse der Welt mehr helfen. Du musst alle Zahlen der Form buchstabe^(2^k) bis 2^k >= d durch fortgesetztes Quadrieren berechnen und dabei nach jedem Quadrieren ein Modulo einbauen. So kannst du die Größe der Zahlen auf n^2 begrenzen. Mit den Potenzgesetzen kannst du die einzelnen Zahlen dann zu buchstabe^d kombinieren.
|
Re: Fehler: Ungültige Gleitkommaoperation
Zitat:
Sorry bin erst 13 da hat man in Mathe noch nicht alles durchgekaut. Bissl anschaulicher wäre schön:)(am besten mit nem konkreten Beispiel) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:14 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz