![]() |
"Ungültige Gleitkommaoperation"
Folgende Berechnung ruft immer den Fehler "Ungültige Gleitkommaoperation" auf, allerdings nicht beim Umwandeln in die *.exe, sondern wenn ich im ausgeführten Programm den Button drücke, der die Funktion ausführt.
Delphi-Quellcode:
Zahl und e sind Integer, der Integer scheint nicht überlaufen zu sein, da auch unter Verwendung von "LongInt" der Fehler angezeigt wird. Kann nur an dem geschriebenen Code liegen, da ohne ihn alles Funktioniert (nur zahl ist dann falsch ;))
zahl:=trunc(power(zahl, e)) mod n;
edit: code war falsch, jetzt richtig/2: Klammer war flasch :// |
Re: "Ungültige Gleitkommaoperation"
Moin!
Integer und LongInt sind gleich gross, daher nutze mal Int64... MfG Muetze1 |
Re: "Ungültige Gleitkommaoperation"
Danke, komisch das die das dann LONGint nennen...
Leider kein Unterschied. Aber da ist doch nichts falsch oder? Denn mod funktioniert nur mit Integern, power liefert extended, was aber durch trunc wieder zu integer wird -> müsste gehen. Oder? EDIT: Es geht, wenn ich statt power die potenz ausschreibe also zahl*zahl*zahl... Was läuft bei dem power/trunc denn falsch? |
Re: "Ungültige Gleitkommaoperation"
Moin!
Dir ist klar, das du Zahl^e rechnest und nicht e^Zahl? Weil wie willst du denn Zahl^e mit Zahl*Zahl hinbekommen? MfG Muetze1 |
Re: "Ungültige Gleitkommaoperation"
Zitat:
Es ist ja klar, wie man Zahl^e dann hinbekommt, oder? MfG Binärbaum |
Re: "Ungültige Gleitkommaoperation"
Zahl sollte die Basis sein und e der Exponent, im Übrigen hab ich es auch mal umgedreht und der gleiche Fehler erscheint.
Ich kann doch statt zahl^e auch
Delphi-Quellcode:
schreiben, oder nicht?
for z:=0 TO e-2 do zahl:=zahl*zahl;
Edit: Nein, ist nicht die eulersche Zahl, ich versuche die RSA Entschlüßelung hinzubekommen... |
Re: "Ungültige Gleitkommaoperation"
Zitat:
Delphi-Quellcode:
//Edit: Schreibfehler
var prod: Integer;
... prod:= 1; for z:=1 TO e do prod:= prod*zahl; zahl:= prod; |
Re: "Ungültige Gleitkommaoperation"
Danke, Binärbaum!
Ich denke ich weiß woran es liegt: power(10,77)=1E77 das kann er wahrscheinlich mit trunc nicht umrechnen. Wie rechne ich 1E77 denn in eine Dezimalzahl um? |
Re: "Ungültige Gleitkommaoperation"
Zitat:
Deshalb musst du Double oder Extended verwenden. Die können solch große Zahlen noch darstellen. MfG Binärbaum |
Re: "Ungültige Gleitkommaoperation"
Danke und gibt es auch noch eine Möglichkeit mit Double oder Extended mod (modulo) zu verwenden? Muss ich mir die Funktion jetzt selber schreiben?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:47 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