![]() |
Delphi-Version: 10 Berlin
FMod "streikt"
Liebe Delphianer,
ich möchte mit der Funktion FMod (System.Math) eine ca 150-stellige Zahl zerlegen. Leider steigt die Funktion bei Zahlenwerten um ca x^20 aus mit der Meldung "Ungültige Gleitkommaoperation". Laut Hilfe sollte die Funktion Extended-Bereiche beherrschen! Was kann ich machen, was mache ich falsch? PS: Delphi-Version: DX 10.2 Starter Edition |
AW: FMod "streikt"
Extended war nie für den produktiven Einsatz gedacht, sondern nur zur FPU-internen Verwendung.
Ab Windows 64 Bit gibt es diesen Typ auch nicht mehr "nativ" im Delphi. Und Extended hat auch nur 19-20 "signifikante" Dezimalstellen ... mehr ist einfach nicht möglich und alles außerhalb dieser Stellen ist "undefiniert". 12345678901234567890xxxxxxxxxxxxxxxxxx,xxxxxxxx 123456789012,34567890xxxxxxxxxxxxxxxxxxxxxxxxxx 0,00000000000012345678901234567890xxxxxxxxxxx Einzige Lösung * String * BCD * BigInt und Co. |
AW: FMod "streikt"
fmod crasht auch bei double. Ich vermute, daß EMBA intern floor oder trunc verwendet, und die crashen halt wenn der Integerbereich übertreten wird (habe auch Starter ohne Quellcode).
Mit int hat man solche Probleme nicht (ob solche Rechnungen sinnvoll sind, ist eine andere Frage)
Delphi-Quellcode:
var
x,y,z: double; begin try x := 1.23e150; y := 2e20; z := int(x/y); z := x-z*y; writeln(z); z := fmod(x,y); writeln(z); { TODO -oUser -cConsole Main : Insert code here } except on E: Exception do Writeln(E.ClassName, ': ', E.Message); end; end. |
AW: FMod "streikt"
150 Stellen... das über Fließkomma zu machen ist der falsche Weg, selbst wenn es ginge.
da gibt es Leute die haben genau dafür was passendes gemacht, und bieten es ganz unten auf der Seite sogar recht aktuell zum Download an:) ![]() |
AW: FMod "streikt"
Zitat:
|
AW: FMod "streikt"
Zitat:
Wenn man große Integer-Zahlen bearbeitet will, kann man mein ![]() Edit: Dank an himitsu, der meine Vermutung bestätigt. |
AW: FMod "streikt"
Zitat:
1.23e150 fmod 2e20 = 0 |
AW: FMod "streikt"
Herzlichen Dank an alle!
Habt mir sehr geholfen. |
AW: FMod "streikt"
Nebenfrage:
Wozu benötigt man eine 150 stellige Zahl? Ciao Stefan |
AW: FMod "streikt"
Zitat:
![]() Gibt sicher noch mehr Beispiele. Was in diesem Thread der Grund ist, weiß ich allerdings auch nicht. :wink: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:51 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