Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  TM - Plant Simulation
  Error by substraction

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:  Error by substraction (653 mal gelesen)
thomasCarlin
Mitglied


Sehen Sie sich das Profil von thomasCarlin an!   Senden Sie eine Private Message an thomasCarlin  Schreiben Sie einen Gästebucheintrag für thomasCarlin

Beiträge: 2
Registriert: 09.03.2011

erstellt am: 09. Mrz. 2011 17:58    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


bug.jpg

 
Hi everyone,

I've been working with plant simulation for 3 years now, but during all this time I've never seen such a thing

(see attachement)

I have 2 values (actualcont and bookthis) which when soustracted bring an round up error which I really can not explain. See the example:

actualcont = 0.23568
bookthis = 0.22632

----

actualcont - bookthis = 0.009360000000000035 (instead of 0.00936)
actualcont + bookthis = 0.462
actualcont - bookthis + 0 = 0.009360000000000035
actualcont - bookthis + 1 = 1.00936
actualcont*1000 - bookthis*1000 = 9.360000000000035

--

Can anyone explain me this effect ? The raison of this round up error ? Is their a way to fixe this without using round(actualcont - bookthis,5) ?

Which difference causes my model to crash after a while that's how I found it.

Thank in advance for your explainations and solutions

(Answer in German or English are fine for me)

------------------
Thomas Carlin
Process Engineer
BASF SE

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Homer Simpson
Mitglied



Sehen Sie sich das Profil von Homer Simpson an!   Senden Sie eine Private Message an Homer Simpson  Schreiben Sie einen Gästebucheintrag für Homer Simpson

Beiträge: 345
Registriert: 14.09.2005

erstellt am: 10. Mrz. 2011 09:28    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für thomasCarlin 10 Unities + Antwort hilfreich

Dass Rundungsfehler auftreten können, sollte doch eigentlich bekannt sein. Intern haben 64-Bit-Gleitkommazahlen ca. 16 Dezimalstellen. Beim Anzeigen rundet Plant Simulation Zahlen meist auf 15 Stellen:
Code:
print 1/3;        -- 0.333333333333333
print 1/3 - 0.3;  -- 0.333333333333333
print 1/3 - 0.33;  -- 0.033333333333333
print 1/3 - 0.333; -- 0.000333333333333297


Intern werden die Gleikommazahlen im Binärsystem gespeichert. Es gibt Zahlen, die im Dezimalsystem exakt darstellbar sind, aber im Binärsystem unendlich viele Nachkommastellen benötigen würden, z. B. die Zahl 0,7. Daher ergibt 0.7-0.5-0.2 nicht Null. Es handelt sich hierbei nicht um einen Rundungsfehler im klassischen Sinn, da der Fehler hier nicht bei der Subtraktion auftritt. Vielmehr wird die Zahl 0.7 bei der Wandlung in eine Gleitkommazahl auf eine Binärzahl gerundet, die nicht mehr der dezimalen 0.7 entspricht.
Prinzipiell haben alle Computerprogramme diese Probleme mit Gleitkommazahlen. Es gibt mehrere Möglichkeiten, diese Probleme zu minimieren, z. B. indem man mit BCD-Zahlen oder mit Brüchen rechnet. Dies ist aber langsam und löst die Probleme trotzdem nicht vollständig. Auch der Windows-Calculator hat irgendwann Rundungsprobleme, z. B. bei 2 ^ 0.5 ^ 2 - 2.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

thomasCarlin
Mitglied


Sehen Sie sich das Profil von thomasCarlin an!   Senden Sie eine Private Message an thomasCarlin  Schreiben Sie einen Gästebucheintrag für thomasCarlin

Beiträge: 2
Registriert: 09.03.2011

erstellt am: 15. Mrz. 2011 08:59    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Thank you for your fast answer,

I am still suprised that actualcont+bookthis returns a exact answer whereas actualcont-bookthis returns an approximated answer. I would expect the same approximation in both cases ...

If I follow you, this is normal and is unavoidable. I guess I will have to use for example round( the mathematique operation , 10) everywhere to avoid such a problem or to be very carefull to use >==, <== and == everwhere instead of >, <, = .

Anyways, thanks for taking the time to answer me.

Thomas Carlin

------------------
Thomas Carlin
Process Engineer
BASF SE

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Homer Simpson
Mitglied



Sehen Sie sich das Profil von Homer Simpson an!   Senden Sie eine Private Message an Homer Simpson  Schreiben Sie einen Gästebucheintrag für Homer Simpson

Beiträge: 345
Registriert: 14.09.2005

erstellt am: 17. Mrz. 2011 08:55    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für thomasCarlin 10 Unities + Antwort hilfreich

I would advise against rounding. It sometimes makes a big problem out of a small one. But I recommend to use == when comparing floating point values.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz