Delphi-PRAXiS
Seite 1 von 6  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Exponentieren und dann Modulo: große Zahlen (https://www.delphipraxis.net/113917-exponentieren-und-dann-modulo-grosse-zahlen.html)

tuxianer 16. Mai 2008 16:25


Exponentieren und dann Modulo: große Zahlen
 
Hallo,
ich habe jetzt den Code implementiert:

Delphi-Quellcode:
function tform1.mod_exp(basis,exponent,modulo:integer):int64;
var e:Integer;
begin
  e:=1;
  while (exponent>0) do begin
    if (exponent mod 2 > 0) then e:=(e*basis) mod modulo;
    basis:=(basis*basis) mod modulo;
    exponent:=exponent div 2;
  end;
  result:=e;
end;
Bei Größeren Zahlen kommt aber mist raus z.B.

666^58613 mod 81079=-38808

Rauskommen müsste aber: 49371.

Woran kann das liegen? Mit kleineren Zahlen gehts 1a!

Fussball-Robby 16. Mai 2008 16:30

Re: Exponentieren und dann Modulo: große Zahlen
 
Ich denke, 666^58613 sprengt sogar den Anwendungsbereich von Int64. Nimm einfach mal den Windows Rechner. Int64 hat 64 Bit, kommt also bis 2^64. Das kann der Rechner noch anzeigen. Bei deiner Rechnung kommt selbst der Windows-Rechner nicht mehr mit. Es gibt also einen Owerflow.

tuxianer 16. Mai 2008 16:31

Re: Exponentieren und dann Modulo: große Zahlen
 
das hab ich mir auch schon überlegt. aber dann gibts ja keine größeren ganzzahl typen. Wie kann ich mir da selbst welche erstellen? Aber eigentlich exponentiert das doch schrittweise. das Ergebnis ist ja nicht groß.

Fussball-Robby 16. Mai 2008 16:32

Re: Exponentieren und dann Modulo: große Zahlen
 
Es gibt eine Unit mit dem Zahlentyp BigInt. Einfach mal danach suchen. Ob die allerdings mit solch großen Zahlen zurechtkommt, weiß ich nicht.

mquadrat 16. Mai 2008 16:36

Re: Exponentieren und dann Modulo: große Zahlen
 
Ich nehm an du hast das mal per Hand ausgerechnet? Dann lass dir doch in jedem Schritt die Werte deiner Variablen ausgeben. Daraus kannst du ablesen, ob deine Funktion ein generelles Problem hat oder in einem der Schritte "kippt".

Fussball-Robby 16. Mai 2008 16:41

Re: Exponentieren und dann Modulo: große Zahlen
 
Zitat:

Zitat von mquadrat
Ich nehm an du hast das mal per Hand ausgerechnet?

Ganz sicherlich nicht :shock: 666^58613... Das sähe so aus: 666x666x666x666x666x666.... und das 58613 mal!

himitsu 16. Mai 2008 16:42

Re: Exponentieren und dann Modulo: große Zahlen
 
schalte doch einfach mal die Überlaufprüfung ein, :angel2:

{$Q+} or {$OVERFLOWCHECKS ON}

dann bekommst du eine Meldung bei Überscheitung der Wertebereiche.


ansonsten bleibt dir nur der Werg über sowas wie BigInt.


Hier im Forum suchenTBigInt und auch im DEC ist 'ne Bibo für große Zahlen drin Hier im Forum suchenDEC-Math

Neutral General 16. Mai 2008 16:43

Re: Exponentieren und dann Modulo: große Zahlen
 
Zitat:

Zitat von Fussball-Robby
Zitat:

Zitat von mquadrat
Ich nehm an du hast das mal per Hand ausgerechnet?

Ganz sicherlich nicht :shock: 666^58613... Das sähe so aus: 666x666x666x666x666x666.... und das 58613 mal!

Ja und? Wofür hat man denn in der Grunschule schriftliches multiplizieren gelernt? :mrgreen:

mquadrat 16. Mai 2008 16:44

Re: Exponentieren und dann Modulo: große Zahlen
 
Zitat:

Zitat von Fussball-Robby
Ganz sicherlich nicht :shock: 666^58613... Das sähe so aus: 666x666x666x666x666x666.... und das 58613 mal!

Lies dir doch mal den Algorithmus in der Frage durch... Nennt sich schnelles Exponenzieren. Das mussten wir in der Kryptographie-Klausur mit einem simplen Taschenrechner machen ;) Er kann ja auch andere Zahlen nehmen. Es geht nur drum, ob seine Implementierung prinzipiell richtig ist und nur bei "bestimmten" Zahlen Mist rechnet, oder ob sie komplett falsch ist.

himitsu 16. Mai 2008 17:05

Re: Exponentieren und dann Modulo: große Zahlen
 
ist dir übrigens schon aufgefallen, daß e nur ein Integer ist, also ist Result (Result:=e) auch nur ein Integer :shock:


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:41 Uhr.
Seite 1 von 6  1 23     Letzte »    

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