Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Double immer < MaxDouble (https://www.delphipraxis.net/173534-double-immer-maxdouble.html)

QStorm 1. Mär 2013 14:19

Double immer < MaxDouble
 
Hallo,

Kann mir jemand erklären, warum die folgende if-Anweisung False zurück liefert?
Ich habe ein wenig im Internet gesucht. Jemand sprach von einem Compilerfehler. Das denke ich jedoch nicht, denn dann gäbe es wohl mehr darüber im Netz.

Code:
var
  Value : Double;
begin
  Value := MaxDouble;
  if (Value = MaxDouble) then;
end;
Ich arbeite mit Delphi XE.

Danke :)

DeddyH 1. Mär 2013 14:24

AW: Double immer < MaxDouble
 
Fließkommazahlen sind nur selten exakt gleich, nutze daher besser SameValue zum Vergleichen.

QStorm 1. Mär 2013 14:27

AW: Double immer < MaxDouble
 
Danke :)

p80286 1. Mär 2013 14:48

AW: Double immer < MaxDouble
 
Zitat:

Zitat von DeddyH (Beitrag 1205633)
Fließkommazahlen sind nur selten exakt gleich, nutze daher besser SameValue zum Vergleichen.

Dagegen ist ja nichts einzuwenden, aber wenn ich den Wert einer Konstanten einer Variablen zuweise, und diese dann wiederum mit der Konstanten vergleiche, dann sollte dies doch gleich sein. Oder wird dann auch "Interpretiert".

Gruß
K-H

DeddyH 1. Mär 2013 14:53

AW: Double immer < MaxDouble
 
Woher Rundungsfehler kommen und wie man mit ihnen umgeht
Ist zwar aus einem Java-Forum, die Problematik ist aber eher technischer Natur und daher auf keine Programmiersprache beschränkt.

Medium 1. Mär 2013 14:54

AW: Double immer < MaxDouble
 
Da kommt es wohl darauf an, wie "FPU-freundlich" die Konstante definiert ist. Zudem wird intern ja mit 80 Bit gerechnet, so dass da durchaus auch in diesem Fall Rundungen passieren können. Auch wäre interessant, ob Delphi nicht ggf. die Konstante wenn direkt verwendet als Extended interpretiert, während der zugewiesene wirklich ein Double ist. Dann wäre es sogar der offensichtlichste Fall.

p80286 1. Mär 2013 15:01

AW: Double immer < MaxDouble
 
Danke für die Aufklärung!

Gruß
K-H

Sir Rufo 1. Mär 2013 15:08

AW: Double immer < MaxDouble
 
Zitat:

Zitat von Medium (Beitrag 1205637)
Da kommt es wohl darauf an, wie "FPU-freundlich" die Konstante definiert ist. Zudem wird intern ja mit 80 Bit gerechnet, so dass da durchaus auch in diesem Fall Rundungen passieren können. Auch wäre interessant, ob Delphi nicht ggf. die Konstante wenn direkt verwendet als Extended interpretiert, während der zugewiesene wirklich ein Double ist. Dann wäre es sogar der offensichtlichste Fall.

Da der TE mit Delphi XE arbeitet muss man auch noch unterscheiden ob 32 oder 64 bit.

32bit: Extended rechnet mit 80 bit (mit FPU)
64bit: Extended rechnet mit 64 bit (ohne FPU)

Es gibt einen neuen Typen Extended80 der wiederum immer mit 80 bit arbeitet.

Uwe Raabe 1. Mär 2013 16:20

AW: Double immer < MaxDouble
 
Zitat:

Zitat von Sir Rufo (Beitrag 1205640)
Da der TE mit Delphi XE arbeitet muss man auch noch unterscheiden ob 32 oder 64 bit.

XE kann aber noch gar kein 64-Bit.

Uwe Raabe 1. Mär 2013 16:51

AW: Double immer < MaxDouble
 
Da es sich bei MaxDouble um keine typisierte Konstante handelt, wird sie intern als Extended dargestellt. Das kann man auch an der darauffolgenden HPPEMIT-Anweisung sehen. Insofern ist es tatsächlich so, daß nach Zuweisung zu einem Double der Vergleich mit der Konstanten fehl schlägt.

Man sollte auch im Hinterkopf behalten, daß die Konstanten je nach Delphi-Version unterschiedliche Werte haben können (unabhängig von 32/64-Bit).


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:17 Uhr.
Seite 1 von 2  1 2      

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