AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Fehler: Ungültige Gleitkommaoperation
Thema durchsuchen
Ansicht
Themen-Optionen

Fehler: Ungültige Gleitkommaoperation

Ein Thema von linopolus · begonnen am 24. Jan 2009 · letzter Beitrag vom 24. Jan 2009
Antwort Antwort
linopolus

Registriert seit: 24. Jan 2009
Ort: Ottendorf-Okrilla
3 Beiträge
 
Delphi 2005 Personal
 
#1

Fehler: Ungültige Gleitkommaoperation

  Alt 24. Jan 2009, 12:02
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:
buchstabe:=Round(IntPower(buchstabe,d)) mod n; sprich buchstabe^d modulo 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?
Benedikt
Gruß, linopolus
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#2

Re: Fehler: Ungültige Gleitkommaoperation

  Alt 24. Jan 2009, 12:04
Zitat von linopolus:
Rausgefunden habe ich bereits, dass das Ergebnis von IntPower zu hoch ist. Wenn ich als d zB 11 nehme geht es.
Welche Datentypen benutzt du? 9 hoch 59 ist weit jenseits dessen, was du z. b. in einem Integer Speichern kannst.

-> Hier im Forum suchenBigInt
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Fehler: Ungültige Gleitkommaoperation

  Alt 24. Jan 2009, 12:05
Wenn du auf diese Art Potenzen berechnest, wirst du selbst mit größeren Integer-Klassen nicht weit kommen.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
linopolus

Registriert seit: 24. Jan 2009
Ort: Ottendorf-Okrilla
3 Beiträge
 
Delphi 2005 Personal
 
#4

Re: Fehler: Ungültige Gleitkommaoperation

  Alt 24. Jan 2009, 12:11
Zitat von Apollonius:
Wenn du auf diese Art Potenzen berechnest, wirst du selbst mit größeren Integer-Klassen nicht weit kommen.
Das habe ich auch schon gemerkt deshalb frage ich ja
Zitat von Meflin:
Welche Datentypen benutzt du?
Int64 hab ich doch geschrieben
Benedikt
Gruß, linopolus
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#5

Re: Fehler: Ungültige Gleitkommaoperation

  Alt 24. Jan 2009, 12:17
Zitat von linopolus:
Int64 hab ich doch geschrieben
Achso Wie gesagt, du wirst eine BigInt-Klasse verwenden müssen, wie beipsielsweise die hier:
http://www.delphipraxis.net/internal...ct.php?t=88532

Wenn sowas immernoch nicht reicht, hast du schlechte Karten das ohne spezielle (größerregisterige Hardware) hinzubekommen.
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Fehler: Ungültige Gleitkommaoperation

  Alt 24. Jan 2009, 12:23
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.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
linopolus

Registriert seit: 24. Jan 2009
Ort: Ottendorf-Okrilla
3 Beiträge
 
Delphi 2005 Personal
 
#7

Re: Fehler: Ungültige Gleitkommaoperation

  Alt 24. Jan 2009, 12:26
Zitat von Apollonius:
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.


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)
Benedikt
Gruß, linopolus
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:17 Uhr.
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