AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi "Ungueltige Gleitkommaoperation" bei Round
Thema durchsuchen
Ansicht
Themen-Optionen

"Ungueltige Gleitkommaoperation" bei Round

Ein Thema von MrAtoZ · begonnen am 30. Jun 2007 · letzter Beitrag vom 30. Jun 2007
Antwort Antwort
MrAtoZ

Registriert seit: 30. Jun 2007
2 Beiträge
 
#1

"Ungueltige Gleitkommaoperation" bei Round

  Alt 30. Jun 2007, 14:51
Moin moin,

ich versuche eine große Gleitkommazahl (128^107 / 187) mittels Round zukürzen,

Delphi-Quellcode:
//tmp,i sind vom Typ Extended
tmp:=Round(i / n);
bekomme aber immer die Fehlermeldung:

Zitat:
"Im Projekt ...ist eine Exception der Klasse EInvalidOP aufgetreten. Meldung 'Ungültige Gleitkommaoperation'....blablaaa"


Kann mir einer von euch vllt sagen was ich da machen kann!?

gruss
Mr.AtoZ
  Mit Zitat antworten Zitat
fLaSh11
(Gast)

n/a Beiträge
 
#2

Re: "Ungueltige Gleitkommaoperation" bei Round

  Alt 30. Jun 2007, 15:30
Warum rundest du eine Gleitkommazahl und speicherst das Ergebnis des Rundens wieder in eine Variable vom Typen Extended?
  Mit Zitat antworten Zitat
kolbaschedder

Registriert seit: 24. Aug 2006
Ort: Schwäbisch Gmünd
55 Beiträge
 
Delphi 2006 Professional
 
#3

Re: "Ungueltige Gleitkommaoperation" bei Round

  Alt 30. Jun 2007, 15:31
Hallo,

Bei der Berechnung von 128^107 landet man irgendwo im Bereich 2^225. Geteilt durch 187 ändert daran auch nicht viel. round liefert einen int64 zurück. Dessen Gültigkeitsbereich liegt irgendwo bei 2^63. Das Ergebnis deiner Berechnung liegt also weit ausserhalb eines int64.
Leider fällt mir gerade auch keine Funktion ein, welche einen Extended-Typ rundet. Ausserdem würde er sowieso das korrekte Ergebnis nicht speichern können.

MfG

Kolbi
  Mit Zitat antworten Zitat
fLaSh11
(Gast)

n/a Beiträge
 
#4

Re: "Ungueltige Gleitkommaoperation" bei Round

  Alt 30. Jun 2007, 15:52
Wenn du das ganze als wissenschaftliche Zahl (z.B. 1,9*10^1990) vorliegen hast, dann müsste das wie folgt gehen: (einfach Basis und Expo getrennt behandeln)

Delphi-Quellcode:
var
  b: extended; //Basis
  e: integer; // Exponent
  n: integer; //Teiler
  x: integer;
  h: string;
begin
  b := 1.9;
  e := 1990;
  n := 187;

  //(b*10^e / n)
  h := IntToStr(n);
  x := Length(h) - 1;
  h := h[1]+','+Copy(h,2,Length(h));

  e := e - x;
  b := b / StrToFloat(h);
end;
Achtung: Das hab ich mir jetzt grad so ausgedacht, theoretisch müsste es aber funktionieren. Die Zahl muss in wissenschaftlicher schreibweise sein.

//Edit: b kannste dann nach belieben runden!
  Mit Zitat antworten Zitat
MrAtoZ

Registriert seit: 30. Jun 2007
2 Beiträge
 
#5

Re: "Ungueltige Gleitkommaoperation" bei Round

  Alt 30. Jun 2007, 19:21
danke schon mal für die Hilfe aber so wirklich wars das noch nicht.

Zitat:
Warum rundest du eine Gleitkommazahl und speicherst das Ergebnis des Rundens wieder in eine Variable vom Typen Extended?
Warum nach tmp...weil sie da war und es so anschaulicher ist.

Also ich mache das weil es die MOD-Funktion leider nicht mit Gleitkommazahlen geht. Daher bereche ich den REST so:

(i^r) / s -> (53^3) / 187 = 796,13368983957219251336898395722

Nehme nur den Teil vor dem Komma und Multipliziere ihn mit s, Ziehe die Summe dann von 53^3 ab und bekomme so den Rest

-> 53^3 - (796*187) = 148877 -148852 = 25 = 53^3 MOD 187

Was ja alles kein Problem ist solange der Exponent klein ist. Zum Testen rechne ich quasi 128^107 MOD 187 was 82 ergebensoll.
  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 04:29 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