AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Double immer < MaxDouble

Ein Thema von QStorm · begonnen am 1. Mär 2013 · letzter Beitrag vom 1. Mär 2013
Antwort Antwort
Seite 1 von 2  1 2      
QStorm

Registriert seit: 28. Jun 2008
46 Beiträge
 
#1

Double immer < MaxDouble

  Alt 1. Mär 2013, 15:19
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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#2

AW: Double immer < MaxDouble

  Alt 1. Mär 2013, 15:24
Fließkommazahlen sind nur selten exakt gleich, nutze daher besser SameValue zum Vergleichen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
QStorm

Registriert seit: 28. Jun 2008
46 Beiträge
 
#3

AW: Double immer < MaxDouble

  Alt 1. Mär 2013, 15:27
Danke
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#4

AW: Double immer < MaxDouble

  Alt 1. Mär 2013, 15:48
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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#5

AW: Double immer < MaxDouble

  Alt 1. Mär 2013, 15:53
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#6

AW: Double immer < MaxDouble

  Alt 1. Mär 2013, 15:54
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.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#7

AW: Double immer < MaxDouble

  Alt 1. Mär 2013, 16:01
Danke für die Aufklärung!

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: Double immer < MaxDouble

  Alt 1. Mär 2013, 16:08
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.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#9

AW: Double immer < MaxDouble

  Alt 1. Mär 2013, 17:20
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
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#10

AW: Double immer < MaxDouble

  Alt 1. Mär 2013, 17:51
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).
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 23:17 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