Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Integer zu Float umwandeln (https://www.delphipraxis.net/130962-integer-zu-float-umwandeln.html)

brushmate 16. Mär 2009 18:36


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:
crypt := function TForm1.crypt(K: Integer): Extended;
begin
  crypt := power(K, e) mod N;
end ;
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.

jaenicke 16. Mär 2009 18:41

Re: Integer zu Float umwandeln
 
Zitat:

Zitat von brushmate
Delphi-Quellcode:
crypt := function TForm1.crypt(K: Integer): Extended;
begin

Da ist wohl ein "crypt := " zu viel. ;-)

Zitat:

Zitat von brushmate
Delphi-Quellcode:
  crypt := power(K, e) mod N;

mod ist eine Integerdivision, du hast aber als Rückgabewert einen Fließkommawert.

Zitat:

Zitat von brushmate
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.

Das nutzt dir ja nichts, denn mod geht ja nur mit zwei Integerwerten.
Wie wäre es denn so:
Delphi-Quellcode:
function TForm1.Crypt(K: Integer): Extended;
begin
  Result := Power(K, e) / N;
end ;
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.)

blink182 16. Mär 2009 18:54

Re: Integer zu Float umwandeln
 
Zitat:

Zitat von jaenicke
Delphi-Quellcode:
function TForm1.Crypt(K: Integer): Extended;
begin
  Result := Power(K, e) / N;
end ;

mhm das ist ja nicht gerade der Sinn von Mod^^ und den braucht man ja bei RSA

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:
while a>=b do
a:=a-b;
r:=a;
bzw

Delphi-Quellcode:
asm
mov ax,a
@anfang_schleife: cmp ax,b
jl @ausgabe
sub ax,b
jmp @anfang_schleife
@ausgabe: mov c,ax
end;
MfG blink182

brushmate 16. Mär 2009 18:56

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...

brushmate 16. Mär 2009 18:59

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?

alleinherrscher 16. Mär 2009 19:04

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.

brushmate 16. Mär 2009 19:07

Re: Integer zu Float umwandeln
 
kann ich real denn auch mit extended verrechnen?

blink182 16. Mär 2009 19:10

Re: Integer zu Float umwandeln
 
Zitat:

Zitat von DelphiHilfe
Operator Operation Operandtyp Ergebnistyp Beispiel
mod Rest Integer Integer Y mod 6

Der Operator mod liefert den Rest, der sich bei der Division seiner Operanden ergibt. Das bedeutet: x mod y = x – (x div y) * y.


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

alleinherrscher 16. Mär 2009 19:12

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)

brushmate 16. Mär 2009 19:15

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;


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:24 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz