Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   round(): Invalid Floating Point Operation (https://www.delphipraxis.net/155992-round-invalid-floating-point-operation.html)

TM. 16. Nov 2010 08:21

Delphi-Version: 7

round(): Invalid Floating Point Operation
 
Hallo,

mein round() verhält sich sehr merkwürdig. Nachdem ich die roundTo() schon mit einer eigenen Funktion ersetzen musste (aufgrund des Double- anstatt Extended-Parameters), wird mein Programm nun mit einer 'Invalid floating point operation' gestoppt. Werte, die dazu führen, sind bspw. -153*10^17. Round() verlangt Extended und gibt Int64 zurück, beide haben einen Wertebereich, in den dieser passen würde.
Für mich sehr ärgerlich, da ich absichtlich solche großen Werte aufgrund etwaiger Ungenauigkeiten verwende.

Warum? Was tun?

Danke für eure Hilfe,
TM.

DelphiBandit 16. Nov 2010 08:39

AW: round(): Invalid Floating Point Operation
 
Wenn mich meine Binärkenntnisse nicht im Stich lassen, dann geht ein Int64 mit Vorzeichen von -2^63 bis 2^63-1. Was da ungefähr, sagt Calc =

-9223372036854775808=19 Stellen entspricht

-153*10^17 ist -15300000000000000000=20 Stellen

Andere Option wäre UInt64, dies geht bis 0..2^64-1, aber damit ist das negative Vorzeichen nicht abzubilden.

gammatester 16. Nov 2010 08:42

AW: round(): Invalid Floating Point Operation
 
Zitat:

Zitat von TM. (Beitrag 1061831)
Hallo,

mein round() verhält sich sehr merkwürdig. Nachdem ich die roundTo() schon mit einer eigenen Funktion ersetzen musste (aufgrund des Double- anstatt Extended-Parameters), wird mein Programm nun mit einer 'Invalid floating point operation' gestoppt. Werte, die dazu führen, sind bspw. -153*10^17. Round() verlangt Extended und gibt Int64 zurück, beide haben einen Wertebereich, in den dieser passen würde.

Und was soll daran merkmwürdig sein? -153*10^17 ist halt nun mal -1.6588293*2^63 = -1.6588293*MaxInt64.

TM. 16. Nov 2010 10:57

AW: round(): Invalid Floating Point Operation
 
Danke für eure schnelle Antwort - da habe ich den Wertebereich falsch abgelesen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:43 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