AGB  ·  Datenschutz  ·  Impressum  







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

Berechnungsfehler

Ein Thema von schand99 · begonnen am 11. Apr 2016 · letzter Beitrag vom 12. Apr 2016
Antwort Antwort
Seite 2 von 2     12   
Jens01

Registriert seit: 14. Apr 2009
670 Beiträge
 
#11

AW: Berechnungsfehler

  Alt 11. Apr 2016, 20:18
Zitat:
Ergebnis: RohreProKreis = 3,79999995231628
Wie kommt es dazu? Das korrekte Ergebnis wäre 3,8
Ist doch richtig gerechnet!

Mache RohreProKreis := RoundTo(RohreProKreis, -2)
Man muss sich daran gewöhnen, dass nicht genau der erwartete Wert erscheint, sondern der ungefähr erwartete. Man benutzt eine Maschine zum Rechnen und die hat Tolerenzen. Die Toleranzen muß man bewerten und damit umgehen. Wie im Maschinenbau.
Spannend wird es erst, wenn Du Werte vergleichen willst. Sowas wie "if Wert = 0 then .."
Achtung: Bin kein Informatiker sondern komme vom Bau.
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.366 Beiträge
 
Delphi 10.3 Rio
 
#12

AW: Berechnungsfehler

  Alt 11. Apr 2016, 20:35
Wobei "Rundungsfehler" hier garnicht zu vermeiden sind, egal wie groß man den Fließkommadatentyp wählt.
Die Ursache dafür ist aber kein Rundungsfehler sondern eine Speicherungenauigkeit bei Fließkommawerten. Das sind 2 unterschiedliche Dinge und sollte man tunlichst nicht verwechseln.

Mache RohreProKreis := RoundTo(RohreProKreis, -2)
ganz toll...
http://docwiki.embarcadero.com/Libra...m.Math.RoundTo

Du fütterst einen Extended rein, bekommst einen Extended raus. Ändert genau gar nichts. Ok, es mag seht oft ein gerundetes ERgebnis raus kommen, aber es gibt halt auch Werte die hier wieder mit dem Speicherfehler aus der Funktion kommen. (und ja: Ich hatte das Thema schon oft mit Entwicklern die vom Glauben abgefallen sind, weil bei RoundTo hin und wieder eben nicht der auf 2 Stellen genaue Wert raus kommt sondern was anderes).

Wenn Du RoundTo verwendest, dann solltest Du das ganze einem Currency zuweisen (wenn es dir wichtig ist mit genau 2 Nachkommastellen weiter zu rechnen)
  Mit Zitat antworten Zitat
Jens01

Registriert seit: 14. Apr 2009
670 Beiträge
 
#13

AW: Berechnungsfehler

  Alt 11. Apr 2016, 20:57
@Lemmy
Ja hast recht.
Gedanklich habe ich das aus Ausgabe bzw letztes Ergebnis angesehen:
StrRohreProKreis := RoundTo(RohreProKreis, -2).ToString

Wenn man es als Zwischenergebnis nutzt, würde ich eh mit dem Wert so weiterrechnen.
Bei technischen Berechnungen bringt dies Extended doch nichts. Ich nutze sogar bei FEM-Berechnungen Double-Werte.
Achtung: Bin kein Informatiker sondern komme vom Bau.
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.366 Beiträge
 
Delphi 10.3 Rio
 
#14

AW: Berechnungsfehler

  Alt 11. Apr 2016, 22:17
@Lemmy
Bei technischen Berechnungen bringt dies Extended doch nichts. Ich nutze sogar bei FEM-Berechnungen Double-Werte.
keine Frage... wenn Du mit Koordinaten zu tun hast, kommst Du daran nicht vorbei, weil die 4 Nachkommastellen vom Currency einfach zu wenig sind, wenn du mit 1.000 multiplizieren musst - da hast Du dann schon Fehler im Dezimeterbereich Es kommt halt immer darauf an...
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Berechnungsfehler

  Alt 12. Apr 2016, 09:24
[QUOTE]Die Ursache dafür ist aber kein Rundungsfehler sondern eine Speicherungenauigkeit bei Fließkommawerten. Das sind 2 unterschiedliche Dinge und sollte man tunlichst nicht verwechseln.[QUOTE]
OK, aber wenn man es so sieht, dann wird es beim Speichern auf den nächsten Wert "gerundet", den der Typ speichern kann.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
matashen

Registriert seit: 29. Jan 2007
Ort: daheim
460 Beiträge
 
Delphi XE2 Enterprise
 
#16

AW: Berechnungsfehler

  Alt 12. Apr 2016, 09:31
Auch mal kurz mein süßer Senf dazu

Es liegt einfach da dran das digital zum Beispiel kein drittel kennt und damit 0,3333333 speichert und irgendwann das "unendlich" fehlt (unendlich kennt dein System nicht). Bei weiteren Berechnungen treten eben hier Ungenauigkeiten auf. Das muss dann dein Code ausgleichen mit Runden an der passenden Stelle.
Matthias
Das Leben ist eines der härtesten.
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#17

AW: Berechnungsfehler

  Alt 12. Apr 2016, 10:09
Und dem wäre noch hinzuzufügen, dass binär Perioden an anderen Stellen auftauchen als bei dezimal. Zum Beispiel ist 0,2 als Float niemals exakt darstellbar, da es immer in einer Periode mündet. Egal wie genau der Typ ist den man wählt.
"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
Antwort Antwort
Seite 2 von 2     12   


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