AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Delphi if-Abfrage mit Extended - Trotz gleichheit False
Thema durchsuchen
Ansicht
Themen-Optionen

if-Abfrage mit Extended - Trotz gleichheit False

Ein Thema von Captnemo · begonnen am 7. Nov 2012 · letzter Beitrag vom 8. Nov 2012
Antwort Antwort
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#1

AW: if-Abfrage mit Extended - Trotz gleichheit False

  Alt 7. Nov 2012, 21:43
Also stellt sich mir die Frage, ob eine Zuweisung ala
...
auch evtl. abweichende Nachkommastellen hinterläßt.
Ganz klar ja. Denn die 0.9 lassen sich nicht exakt als Zweierpotenz schreiben.
Der Computer macht daraus bei der Umwandlung sowas wie
Code:
29.9  = 11101.111001100110011
Und das ergibt jetzt 0.9001464844 im Dezimalsystem. Mit mehr Stellen wird es noch genauer, aber es deutet sich bereits an dass der Nachkommaanteil periodisch ist und somit durch eine endliche Anzahl an Bits nur angenähert werden kann
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#2

AW: if-Abfrage mit Extended - Trotz gleichheit False

  Alt 8. Nov 2012, 06:43
Vielleicht noch eine Anmerkung zu dem Thema: Früher wurde in Computersystemen anstatt mit Floating Point mit BCD-Arithmetik gerechnet. Dabei wird jede Ziffer durch 4 Bits dargestellt. Das führt dazu, das man 0.9 exakt so darstellen kann, und PI eben nicht. Irgendwie einfach zu verstehen, das Ganze: Genau aufschreibbar = Genau gespeichert.

Das ist bei Floating Point nicht der Fall, aber dafür kann man mit FP viel viel schneller rechnen. Ich persönlich habe ca. 10 Jahre meiner Programmiertätigkeit ausschließlich mit BCD gearbeitet und empfinde daher die unnatürliche Problematik "1.1 <> 1.1" als dem 21. Jahrhundert nicht würdig. Mit BCD wäre man in der Lage, viel genauer zu rechnen, da es die Rundungsfehler durch falsche interne Darstellung nicht gibt. Natürlich gibt es Rundungsfehler durch Rechnerei, aber das ist ein anderes Thema.

Aber letztendlich ist diese Problematik so mit der einzige Nachteil von FP ggü BCD mit vergleichbarer Genauigkeit, soweit ich informiert bin.
  Mit Zitat antworten Zitat
Medium
Online

Registriert seit: 23. Jan 2008
3.689 Beiträge
 
Delphi 2007 Enterprise
 
#3

AW: if-Abfrage mit Extended - Trotz gleichheit False

  Alt 8. Nov 2012, 08:12
Die Vorteile von Floats der direkten Vergleichbarkeit zu opfern wäre glaube ich auch nicht der goldene Weg. Was Floats gerade so nett macht ist, dass man einen irren Wertebereich damit abdecken kann, da es nur eine Anzahl signifikanter Stellen gibt - es ist aber egal wo dabei das Komma sitzt. Dass dabei dann non-uniforme Lücken zwischen den einzelnen Werten entstehen, deren Werte man folglich auch nicht genau darstellen kann, ist eine Notwendigkeit dabei. Sowas muss ich als Informatiker einfach lernen, der Maurer weiss ja auch um die richtigen Einsatzgebiete von Gummihammer und Kelle.

Am Rande: Ich empfinde BCD irgendwie als "unnatürlich" und "bloaty", weil eben Dezimalziffern in 4 Bit dargestellt werden. Da bleiben Kapazitäten ungenutzt, und Binärrechner zu zwingen in Hardware dezimal zu rechnen... würg Und letztlich ist der Genauigkeitsgewinn nur dort vorhanden, wo vornehmlich von Menschen eingegebene Zahlen eine Rolle spielen. Und schlussendlich ist es auch nur ein seltsam kodiertes Festkommaformat; da doch lieber gleich Currency.
"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
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#4

AW: if-Abfrage mit Extended - Trotz gleichheit False

  Alt 8. Nov 2012, 11:41
Am Rande: Ich empfinde BCD irgendwie als "unnatürlich" und "bloaty", weil eben Dezimalziffern in 4 Bit dargestellt werden. Da bleiben Kapazitäten ungenutzt, und Binärrechner zu zwingen in Hardware dezimal zu rechnen... würg Und letztlich ist der Genauigkeitsgewinn nur dort vorhanden, wo vornehmlich von Menschen eingegebene Zahlen eine Rolle spielen. Und schlussendlich ist es auch nur ein seltsam kodiertes Festkommaformat; da doch lieber gleich Currency.
BCD ist kein Festkommaformat, sondern eine nicht binäre Kodierung. Mann kann natürlich eine entsprechende Vereinbarung treffen ist aber wesentlich flexibler als Currency.

Und was die Menschen angeht, versuch einmal einem Mitarbeiter zu erklären warum auf seiner Gehaltsabrechnung immer wieder Rundungsfehler auftauchen, bei Werten, die jeder mäßig begabte Grundschüler addieren kann. Nichts gegen Floatingpoints, aber sie sind nun mal nicht für alles die richtige Lösung.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Medium
Online

Registriert seit: 23. Jan 2008
3.689 Beiträge
 
Delphi 2007 Enterprise
 
#5

AW: if-Abfrage mit Extended - Trotz gleichheit False

  Alt 8. Nov 2012, 14:01
Deswegen ja Currency (oder ein anderes Fixed-Format mit der gewünschten Nachkommaanzahl, da ist man ja genau so frei wie mit BCD). Und naja, BCD ist an sich ein Integerformat, daher meinte ich Festkomma - man kann es nur als Fixed für Zahlen mit Nachkommaanteil benutzen. Wo genau da jetzt der Vorteil gegenüber der binären Integerdarstellung sein soll erschließt sich mir noch immer nicht.
"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
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.499 Beiträge
 
Delphi 12 Athens
 
#6

AW: if-Abfrage mit Extended - Trotz gleichheit False

  Alt 8. Nov 2012, 08:32
Für Werte die ohne Rundungsdifferenzen gespeichert werden müssen, kann das Feld in der Datenbank als "Numeric(a,b)" (a Anzahl Vorkommastellen, b Anzahl Nachkommastellen) deklariert werden. Problemtisch ist eventuell das Auslesen, da die verwendeten Komponenten in der Regel in ein Fließkommaformat konvertieren.
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#7

AW: if-Abfrage mit Extended - Trotz gleichheit False

  Alt 8. Nov 2012, 08:42
@Blup
schön wäre es, Ado interpretiert es als TFMTBCD oder TBCD und ein cxGrid explodiert damit, also muss hier der Feldtyp manuell ausgetauscht werden. (sorry füt OT)
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
DanielJ

Registriert seit: 8. Sep 2008
Ort: Hamburg
35 Beiträge
 
Delphi XE Professional
 
#8

AW: if-Abfrage mit Extended - Trotz gleichheit False

  Alt 8. Nov 2012, 09:21
Hallo,


2 Anmerkungen:
1. für einfache vergleiche SameValue verwenden, gibt dann auch eine Bool zurück wie in
Code:
//if x=y then DoSth;
//stattdessen
if SameValue(x,y) then DoSth;
CompareValue ist etwas unhandlicher (und verwendet intern selber SameValue) wenn einen nicht interresiert ob ungleich-kleiner oder ungleich-größer.

2. Kleiner Artikel zur Problematik: What Every Computer Scientist Should Know About
Floating-Point Arithmetic


LG,
Daniel
  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 23:14 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