AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Berechnungen (0.2400001 * 0.7500009) scheitern in Delphi 5
Thema durchsuchen
Ansicht
Themen-Optionen

Berechnungen (0.2400001 * 0.7500009) scheitern in Delphi 5

Ein Thema von john84 · begonnen am 30. Jan 2009 · letzter Beitrag vom 30. Jan 2009
Antwort Antwort
Seite 1 von 3  1 23      
john84

Registriert seit: 29. Apr 2008
7 Beiträge
 
#1

Berechnungen (0.2400001 * 0.7500009) scheitern in Delphi 5

  Alt 30. Jan 2009, 16:12
Hallo zusammen,
mir ist gerade ein Problem im Zusammenhang mit einer if aufgefallen evtl. kenn jemand das Problem

folgendes if scheitert immer:

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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Berechnungen (0.2400001 * 0.7500009) scheitern in Delphi

  Alt 30. Jan 2009, 16:14
Lass dir mal das Zwischenergebnis vor der Evaluation anzeigen
Markus Kinzler
  Mit Zitat antworten Zitat
john84

Registriert seit: 29. Apr 2008
7 Beiträge
 
#3

Re: Berechnungen (0.2400001 * 0.7500009) scheitern in Delphi

  Alt 30. Jan 2009, 16:24
Hey vielen dank für die schnelle Antwort ist ja klasse.

Aber hä ? 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.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Berechnungen (0.2400001 * 0.7500009) scheitern in Delphi

  Alt 30. Jan 2009, 16:28
Was ergibt den 0.2400001 + 0.7500009)*100? (Könnte ien Rundungsproblem sein)
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#5

Re: Berechnungen (0.2400001 * 0.7500009) scheitern in Delphi

  Alt 30. Jan 2009, 16:39
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
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#6

Re: Berechnungen (0.2400001 * 0.7500009) scheitern in Delphi

  Alt 30. Jan 2009, 16:40
Und was lernen wir daraus: Vergleiche niemals Floats auf =
  Mit Zitat antworten Zitat
john84

Registriert seit: 29. Apr 2008
7 Beiträge
 
#7

Re: Berechnungen (0.2400001 * 0.7500009) scheitern in Delphi

  Alt 30. Jan 2009, 16:48
ich verwende den Typ extended da sollten doch wohl 7 Nachkommastellen noch keine Probleme machen oder?
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#8

Re: Berechnungen (0.2400001 * 0.7500009) scheitern in Delphi

  Alt 30. Jan 2009, 16:50
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

...
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.639 Beiträge
 
#9

Re: Berechnungen (0.2400001 * 0.7500009) scheitern in Delphi

  Alt 30. Jan 2009, 16:54
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 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.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Benutzerbild von Corpsman
Corpsman

Registriert seit: 8. Nov 2005
Ort: nähe Stuttgart
981 Beiträge
 
Delphi XE2 Professional
 
#10

Re: Berechnungen (0.2400001 * 0.7500009) scheitern in Delphi

  Alt 30. Jan 2009, 17:03
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 if Gleich(0.00000001 , 0.00000001, 0.001) then TuWas(); auch was
Uwe
My Sitewww.Corpsman.de

My marble madness clone Balanced ( ca. 70,0 mb ) aktuell ver 2.01
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 10:30 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