AGB  ·  Datenschutz  ·  Impressum  







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

Berechnungen mit Gleitkomma Werten

Ein Thema von itblumi · begonnen am 16. Feb 2024 · letzter Beitrag vom 16. Feb 2024
Antwort Antwort
Jens01

Registriert seit: 14. Apr 2009
674 Beiträge
 
#1

AW: Berechnungen mit Gleitkomma Werten

  Alt 16. Feb 2024, 11:01
Damit umzugehen ist eben die Kunst.

Bei Vergleichen nutzt man sowas wie Samevalue, CompareValue usw. Ggf muss man auch runden.
Achtung: Bin kein Informatiker sondern komme vom Bau.
  Mit Zitat antworten Zitat
itblumi

Registriert seit: 28. Mär 2009
73 Beiträge
 
Delphi XE6 Professional
 
#2

AW: Berechnungen mit Gleitkomma Werten

  Alt 16. Feb 2024, 11:25
Beim Single schien mir die Abweichung etwas zu hoch zu sein, aber nach weiterem forschen bin ich auf die folgende Seite gestoßen die es wirklich gut erklärt.

https://bernd-leitenberger.de/genaui...omputern.shtml
Jan
Ein neuer Tag bringt so einiges mit sich. Was auch immer es ist, es bleibt ein kleines Abenteuer.
  Mit Zitat antworten Zitat
Benutzerbild von Sinspin
Sinspin

Registriert seit: 15. Sep 2008
Ort: Dubai
751 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Berechnungen mit Gleitkomma Werten

  Alt 16. Feb 2024, 11:36
Generell solltest Du versuchen überall den gleichen Typ zu verwenden. Beim Umrechnen zwischen Typen kommt es zu Fehlern.
Oder Du verwendest einen Numeric Typen bei dem intern gar keine Gleitkommazahlen verwendet werden. Ich habe das vor Jahren mal probiert, fand es aber fürchterlich langsam.
Stefan
Nur die Besten sterben jung
A constant is a constant until it change.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Berechnungen mit Gleitkomma Werten

  Alt 16. Feb 2024, 11:42
Bei bis zu 4 Nachkommastellen Currency (ist intern ein Int64, der durch 10000 geteilt ist).
http://docwiki.embarcadero.com/RADSt...hi)#Real_Types

Ansonsten gäbe es noch BCD-Typen
und Anderes.

Oder eben vor Anzeige immer auf die gewünschten Stellen runden/formatieren,
sowie Vergleiche niemals mit = , sondern z.B. Delphi-Referenz durchsuchenIsZero, Delphi-Referenz durchsuchenSameValue, Delphi-Referenz durchsuchenComparaValue usw.
Und für das Dictionary einen passenden Comparer schreiben, falls die "Floats" als Key benutzt werden sollen.

Auch nicht fortlaufend draufrechnen ... damit vervielfacht man nur noch die Rundungsfehler.
z.B. so for i := 0 to 200 do begin AExtended := -1.0 + (0.01 * i); bzw. := -1.0 + (i / 100); ist der Fehler nur zweieinmal enthalten.


Zitat:
AExtended -0,42
PS: Extended ist garantiert auch nicht genau 0,42
dort wird die Ungenauigkeit nur aktuell gerade zufälig erst irgendwo nach der 15. Nachkommastelle liegen (er hat schließlich 19-20 signifikante Stellen, ab der ersten Ziffer, welche nicht 0 ist)
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (16. Feb 2024 um 13:22 Uhr)
  Mit Zitat antworten Zitat
noisy_master

Registriert seit: 17. Jun 2009
Ort: Wolfenbüttel/Baddeckenstedt
263 Beiträge
 
Delphi XE5 Professional
 
#5

AW: Berechnungen mit Gleitkomma Werten

  Alt 16. Feb 2024, 11:44
Moinsen,

gerade bei Farbwerten würde ich eher auf "RGB" kodierte Integerwerte gehen. Dann hast du keine Probleme mit "Abweichungen" durch Fliesskommadarstellung.
Vielleicht kannst du nochmal dein Problem mit der "Klassifizierung von Farbwerten" etwas näher erläutern...

Gruß
Dirk

Geändert von noisy_master (16. Feb 2024 um 11:47 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von gubbe
gubbe

Registriert seit: 8. Okt 2005
Ort: Schleswig-Holstein
172 Beiträge
 
Delphi 12 Athens
 
#6

AW: Berechnungen mit Gleitkomma Werten

  Alt 16. Feb 2024, 12:28
Schon die Konstante 0.01 aus dem Beispielcode lässt sich binär nicht exakt darstellen. Durch das Aufaddieren in der Schleife wird die Abweichung dann immer größer.
Deshalb sollte man genau das vermeiden. Es ist kein spezifisches Delphi-Problem.

Vielleicht kannst Du darstellen, was Du eigentlich vorhast, dann lässt sich besser beurteilen, wie man die Abweichungen minimiert.
  Mit Zitat antworten Zitat
itblumi

Registriert seit: 28. Mär 2009
73 Beiträge
 
Delphi XE6 Professional
 
#7

AW: Berechnungen mit Gleitkomma Werten

  Alt 16. Feb 2024, 13:30
Danke für eure zahlreichen antworten, mir war nicht bewusst das die Abweichung beim Single so groß ist. Für das Erstellen des Dictionaries(Farb und Werte Zuordnung) runde ich einfach nach jeder Addition und das reicht erstmal aus. Mir ging es hier hauptsächlich um die Daten Typen und ich kann jetzt je nach Fall meine internen Berechnung darauf anpassen. Das wird darauf hinaus lauf das ich nur mit Integer/Int64 rechne und erst am Ende auf eine Gleitkomma Zahl um schwenke, denn so sollte sich der Fehler reduzieren lassen.
Jan
Ein neuer Tag bringt so einiges mit sich. Was auch immer es ist, es bleibt ein kleines Abenteuer.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Berechnungen mit Gleitkomma Werten

  Alt 16. Feb 2024, 13:54
Eigentlich sollte Extended auch nie zum Speichern verwendet werden (war nur für Zischenschritte von Berechnungen gedacht).
Außerdem ist der Typ nicht überall verfügbar, z.B. nicht unter Win64 oder iOS/Android ... dort ist es intern ein DOUBLE (und belegt überall auch noch unterschliedlich viel Speicher > SizeOf)

Zitat:
Dieser Zustand tritt im 64-Bit sowie ... auf
Dort sollten also Double und Extended das Gleiche anzeigen.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Antwort Antwort


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 11:47 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-2025 by Thomas Breitkreuz