![]() |
"Ungueltige Gleitkommaoperation" bei Round
Moin moin,
ich versuche eine große Gleitkommazahl (128^107 / 187) mittels Round zukürzen,
Delphi-Quellcode:
bekomme aber immer die Fehlermeldung:
//tmp,i sind vom Typ Extended
tmp:=Round(i / n); Zitat:
Kann mir einer von euch vllt sagen was ich da machen kann!? gruss Mr.AtoZ |
Re: "Ungueltige Gleitkommaoperation" bei Round
Warum rundest du eine Gleitkommazahl und speicherst das Ergebnis des Rundens wieder in eine Variable vom Typen Extended?
|
Re: "Ungueltige Gleitkommaoperation" bei Round
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 |
Re: "Ungueltige Gleitkommaoperation" bei Round
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:
Achtung: Das hab ich mir jetzt grad so ausgedacht, theoretisch müsste es aber funktionieren. Die Zahl muss in wissenschaftlicher schreibweise sein.
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; //Edit: b kannste dann nach belieben runden! |
Re: "Ungueltige Gleitkommaoperation" bei Round
danke schon mal für die Hilfe aber so wirklich wars das noch nicht.
Zitat:
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. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:23 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