Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Berechnungen (0.2400001 * 0.7500009) scheitern in Delphi 5 (https://www.delphipraxis.net/128481-berechnungen-0-2400001-%2A-0-7500009-scheitern-delphi-5-a.html)

john84 30. Jan 2009 16:12


Berechnungen (0.2400001 * 0.7500009) scheitern in Delphi 5
 
Hallo zusammen,
mir ist gerade ein Problem im Zusammenhang mit einer if aufgefallen evtl. kenn jemand das Problem

folgendes if scheitert immer:

Delphi-Quellcode:
if((0.2400001 + 0.7500009)*100 = 100)
wurde immer wegen false übersprungen. Nach weiterem Rumspielen mit werten kamen die wildesten ergebnisse Raus so ist

75.004 = 0.7500004*100 = true
75.005 = 0.7500005*100 = true
75.006 = 0.7500006*100 = false
75.007 = 0.7500007*100 = true
75.008 = 0.7500008*100 = false
75.009 = 0.7500009*100 = true

Ich danke für eure Antwort
Johnny

mkinzler 30. Jan 2009 16:14

Re: Berechnungen (0.2400001 * 0.7500009) scheitern in Delphi
 
Lass dir mal das Zwischenergebnis vor der Evaluation anzeigen

john84 30. Jan 2009 16:24

Re: Berechnungen (0.2400001 * 0.7500009) scheitern in Delphi
 
Hey vielen dank für die schnelle Antwort ist ja klasse.

Aber hä :oops: ? Sorry verstehe ich nicht zeigt mir dann alle Rechenschritte an? Wie kann ich mir das Zwischenergebnis ausgeben lassen? Ich nutze immer dieses kleine "Watch" Fenster was mir mittels ctrl + F7 angezeigt wird.

mkinzler 30. Jan 2009 16:28

Re: Berechnungen (0.2400001 * 0.7500009) scheitern in Delphi
 
Was ergibt den 0.2400001 + 0.7500009)*100? (Könnte ien Rundungsproblem sein)

himitsu 30. Jan 2009 16:39

Re: Berechnungen (0.2400001 * 0.7500009) scheitern in Delphi
 
Ganz einfach ... schonmal was von Rundungsfehlern gehört?

die ganzen Fließkommatypen haben 'nen bestimmten werteberech und vorallem eine gewisse Genauigkeit, da sie nicht alle unendlichen Möglichkeiten darstellen können

Meflin 30. Jan 2009 16:40

Re: Berechnungen (0.2400001 * 0.7500009) scheitern in Delphi
 
Und was lernen wir daraus: Vergleiche niemals Floats auf = :stupid:

john84 30. Jan 2009 16:48

Re: Berechnungen (0.2400001 * 0.7500009) scheitern in Delphi
 
ich verwende den Typ extended da sollten doch wohl 7 Nachkommastellen noch keine Probleme machen oder?

Meflin 30. Jan 2009 16:50

Re: Berechnungen (0.2400001 * 0.7500009) scheitern in Delphi
 
Zitat:

Zitat von john84
ich verwende den Typ extended da sollten doch wohl 7 Nachkommastellen noch keine Probleme machen oder?

http://www.michael-puff.de/Artikel/Fliesskomma.shtml

...

Phoenix 30. Jan 2009 16:54

Re: Berechnungen (0.2400001 * 0.7500009) scheitern in Delphi
 
Nochmal: Fließkommazahlen haben unterschiedliche Darstellungen.

Du kannst 0,0000001 auf verschiedene Arten in einem Fließkommawert unterbringen. Alle diese Arten haben andere Bitmuster. Ein Vergleich in der CPU vergleicht Bitmuster. Du kannst Dir prinzipiell noch nichtmal sicher sein das
Delphi-Quellcode:
if (0.00000001 = 0.00000001) then TuWas();
Auch tatsächlich was tut.

Fließkommazahlen mit = zu vergleichen ist ein No-Go. Sowas tut man nicht.

Corpsman 30. Jan 2009 17:03

Re: Berechnungen (0.2400001 * 0.7500009) scheitern in Delphi
 
Um mich meinen Vorrednern an zu schliesen.

das einzige was du wenn überhaubt, machen kannst ist ein Vergleich mit Epsilonkugeln
Delphi-Quellcode:
function Gleich( v1,v2,Epsilon:Double):Boolean;
begin
  result := abs( v1-v2) <= Epsilon;
end;
Wobei du Epsilon wiederum auch nicht zu klein wählen darfst, siehe die oberen Posts.

und dann Tut
Delphi-Quellcode:
if Gleich(0.00000001 , 0.00000001, 0.001) then TuWas();
auch was ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:52 Uhr.
Seite 1 von 3  1 23      

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 by Thomas Breitkreuz