![]() |
Integer zu Float umwandeln
Hallo,
ich muss gerade für meine facharbeit die RSA-Verschlüsselung programmieren. Ich muss irgend wann die Formel C = K^e mod N berechnen. Das habe ich folgendermaßen implementiert:
Delphi-Quellcode:
die power-Funktion gibt allerdings den Extended-Datentyp zurück, N ist aber Integer. Bisher habe ich nichts gefunden, wie ich N in Extended umwandeln kann.
crypt := function TForm1.crypt(K: Integer): Extended;
begin crypt := power(K, e) mod N; end ; |
Re: Integer zu Float umwandeln
Zitat:
Zitat:
Zitat:
Wie wäre es denn so:
Delphi-Quellcode:
Den Rückgabewert legt man normalerweise in Result, deine Schreibweise ist zwar möglich, aber wenig sinnvoll. (Sonst musst du z.B. bei einer Umbenennung der Funktion auch jede Zuweisung umbenennen und lesbar ist das auch nicht so gut.)
function TForm1.Crypt(K: Integer): Extended;
begin Result := Power(K, e) / N; end ; |
Re: Integer zu Float umwandeln
Zitat:
also was nicht schön ist aber Round oder Trunc (Abrunden) funktionieren, aber ggf. kannst du dir ja auch eine "mod"-funktion selber schreiben, die mit extended funktioniert r:=a mod b
Delphi-Quellcode:
bzw
while a>=b do
a:=a-b; r:=a;
Delphi-Quellcode:
MfG blink182
asm
mov ax,a @anfang_schleife: cmp ax,b jl @ausgabe sub ax,b jmp @anfang_schleife @ausgabe: mov c,ax end; |
Re: Integer zu Float umwandeln
Hi,
ich wollte zuerst nur den crypt := (K^e)...Teil posten, deshalb war eins zuviel. Wenn ich K^e / N rechnen würde, würde ich doch etwas anderes erhalten ald mit mod. Ich hab mal probiert den integer erst in string und den dann in float umzuwandel, funktioniert aber auch nicht... |
Re: Integer zu Float umwandeln
hab ich das jetzt richtig verstanden, dass der mod-Befehl nicht mit float-datentypen funktioniert oder liets an den unterschiedlichen datentypen extended und integer?
|
Re: Integer zu Float umwandeln
Hm, also wenn du deine Variablen als Real definierst, sollte die Umwandlung von Integer zu Real kein Problem sein, da Real einen größeren Zahlenbereich abdeckt als Integer. Also müsstest du das Ergebnis, was dir dein Modulo liefert einfach einer Real Variablen zuweisen können.
|
Re: Integer zu Float umwandeln
kann ich real denn auch mit extended verrechnen?
|
Re: Integer zu Float umwandeln
Zitat:
schreibs halt einfach um, ja und mod funktioniert nur mit integer und power liefert extented ja kannst du , da es ja beide gleitkommazahlen sind aber extended ist größer als real ;) extened -> 3.4*10^-4932 bis 1.1*10^4932 und real ist da "bisschen" weniger 2.9*10^-39 bis 1.7*10^38 |
Re: Integer zu Float umwandeln
Liste der Anhänge anzeigen (Anzahl: 1)
Ups, blink182 hat natürlich recht, extended is viel größer als real! Aber trotzdem: Ich seh das Problem einfach nicht, also einer Real bzw. Extended Variablen kann man doch ohne weiteres ein Intergerwert zuweisen oder? (siehe Anhang)
|
Re: Integer zu Float umwandeln
hab ich auch grad in der hilfe gelesen...
also es gibt jetzt keine möglichkeit integer direkt in extended umzuwandeln und ich muss mir jetzt selber das modulo basteln? hatte das grad mal versucht aber da muss ja auch wieder ein extended wert und ein integer wert rein und dann krieg ich wieder einen fehler...
Delphi-Quellcode:
function modulo(m: Extended, n: Integer): Integer;
begin while m >= n do begin m := m - n; result := m; end; end; |
Re: Integer zu Float umwandeln
dann setz das result halt auf extended ;)
Delphi-Quellcode:
da m ja bei dir auch extended ist als werte-parameter ;)
function modulo(m: Extended; n: Integer): extended;
aber um das umzuwandeln hilft halt round bzw trunc aber bei so großen zahlen bringt das ja auch nicht so viel, da Int64 ja max 9*10^18 aufnehmen kann und ggf. der rest größer ist als dieser wert, aber schau dir mal ![]() |
Re: Integer zu Float umwandeln
ja danke hab ich mir mal angeschaut (du meinst dieses dec oder?)... fand ich aber etwas zu kompliziert...^^
|
Re: Integer zu Float umwandeln
habs jetzt so gemacht:
Delphi-Quellcode:
danke für eure hilfe, scheint bis hier zu laufen
function TForm1.modulo(m, n: Extended): Extended;
begin while m >= n do begin m := m - n; result := m; end; end; function TForm1.crypt(K: Integer): Extended; var help: Extended; begin help := N; crypt := modulo(power(K, e), N); end ; |
Re: Integer zu Float umwandeln
ich hab noch eien frage:
was ist hier dran falsch?
Delphi-Quellcode:
delphi zeigt mir folgenden fehler an:
function modulo(m: Extended, n: Integer): Extended;
[Fehler] Unit1.pas(25): ';', ')' oder '=' erwartet, aber ',' gefunden |
Re: Integer zu Float umwandeln
Zwischen Variablen mit verschiedenen Typen wird ein ; erwartet
Delphi-Quellcode:
function modulo(m: Extended; n: Integer): Extended;
|
Re: Integer zu Float umwandeln
Irgendwie taucht dieses Thema alle paar Monate auf, aber keiner gibt die meiner Meinung nach richtige Antwort: Verwende nie Power, wenn du danach mod verwendest.
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:28 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-2025 by Thomas Breitkreuz