![]() |
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:
wurde immer wegen false übersprungen. Nach weiterem Rumspielen mit werten kamen die wildesten ergebnisse Raus so ist
if((0.2400001 + 0.7500009)*100 = 100)
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 |
Re: Berechnungen (0.2400001 * 0.7500009) scheitern in Delphi
Lass dir mal das Zwischenergebnis vor der Evaluation anzeigen
|
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. |
Re: Berechnungen (0.2400001 * 0.7500009) scheitern in Delphi
Was ergibt den 0.2400001 + 0.7500009)*100? (Könnte ien Rundungsproblem sein)
|
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 |
Re: Berechnungen (0.2400001 * 0.7500009) scheitern in Delphi
Und was lernen wir daraus: Vergleiche niemals Floats auf = :stupid:
|
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?
|
Re: Berechnungen (0.2400001 * 0.7500009) scheitern in Delphi
Zitat:
![]() ... |
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:
Auch tatsächlich was tut.
if (0.00000001 = 0.00000001) then TuWas();
Fließkommazahlen mit = zu vergleichen ist ein No-Go. Sowas tut man nicht. |
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:
Wobei du Epsilon wiederum auch nicht zu klein wählen darfst, siehe die oberen Posts.
function Gleich( v1,v2,Epsilon:Double):Boolean;
begin result := abs( v1-v2) <= Epsilon; end; und dann Tut
Delphi-Quellcode:
auch was ;)
if Gleich(0.00000001 , 0.00000001, 0.001) then TuWas();
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:52 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 by Thomas Breitkreuz