AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Single wert ist unterschiedlich obwohl gleich

Single wert ist unterschiedlich obwohl gleich

Ein Thema von EWeiss · begonnen am 17. Jun 2018 · letzter Beitrag vom 19. Jun 2018
Antwort Antwort
Seite 1 von 2  1 2   
EWeiss
(Gast)

n/a Beiträge
 
#1

AW: Single wert ist unterschiedlich obwohl gleich

  Alt 17. Jun 2018, 21:51
Ich habe es so gelöst.. Danke.
Delphi-Quellcode:
const
   SCALE_DEFAULT: single = 0.68;
gruss
Freut mich zu lesen, mein Edit hatte sich mit Deiner Antwort gekreuzt.
Macht ja nichts
Danke trotzdem.
Die kleine Abfrage hat bei mir 35% CPU Auslastung verursacht weil es immer true war.

gruss
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.960 Beiträge
 
Delphi 12 Athens
 
#2

AW: Single wert ist unterschiedlich obwohl gleich

  Alt 17. Jun 2018, 22:17
Wenn das an einer Stelle wichtig ist, würde ich immer zusätzlich zum Vergleich IsZero benutzen um mit einem genügend kleinen Epsilon die Gleichheit auszuschließen.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Single wert ist unterschiedlich obwohl gleich

  Alt 18. Jun 2018, 10:08
Single = 7-8 signifikante Dezimalstellen, also im Wost-Case nur 7.
Die erste Signifikante ist von links die erste Nicht-Null.

0.68000000715

Selbst Schuld, wenn du einen Wertebereich haben willst, der nichtmals Ansatzweise in den Datentyp passt.
Und selbst wenn, dann sind auch innerhalb der Signifikanten Rundungsfehler möglich, vor allem bei gewissen unendlich langen Werten ala 2/3.

Single hat einen 8 Bit-Exponent und eine Mantisse von 23 Bit Länge, inkl. einem virtuellen Bit, wenn der Exponent 0 ist, also 24.
2^24 = 16.777.215 = nicht ganz 8 Dezimalstellen (nur 1. bis 7. können alles von 0 bis 9 sein)
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (18. Jun 2018 um 10:29 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#4

AW: Single wert ist unterschiedlich obwohl gleich

  Alt 18. Jun 2018, 10:56
Zitat:
Selbst Schuld, wenn du einen Wertebereich haben willst, der nichtmals Ansatzweise in den Datentyp passt.
0.68 passt nicht rein?
Nun gut wenn du das sagst ist es wohl so.

Zitat:
Und selbst wenn, dann sind auch innerhalb der Signifikanten Rundungsfehler möglich, vor allem bei gewissen unendlich langen Werten ala 2/3.
Hallo ?
Und wer erstellt diese? Genau! Delphi.
Ich habe übergeben 0.68 und Delphi mach daraus deinen unendlich langen Werten 0.68000000715 lese doch bitte nochmal was ich geschrieben habe.

Zitat:
2^24 = 16.777.215 = nicht ganz 8 Dezimalstellen (nur 1. bis 7. können alles von 0 bis 9 sein)
Sage das den Entwicklern des Delphi Compiler nicht mir
Wie gesagt.. Ich habe 0.68 übergeben und erwarte eigentlich das dieser wert auch berechnet wird.

gruss

Geändert von EWeiss (18. Jun 2018 um 11:40 Uhr)
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#5

AW: Single wert ist unterschiedlich obwohl gleich

  Alt 18. Jun 2018, 10:57
Single = 7-8 signifikante Dezimalstellen, also im Wost-Case nur 7.
Die erste Signifikante ist von links die erste Nicht-Null.

0.68000000715

Selbst Schuld, wenn du einen Wertebereich haben willst, der nichtmals Ansatzweise in den Datentyp passt.
Und selbst wenn, dann sind auch innerhalb der Signifikanten Rundungsfehler möglich, vor allem bei gewissen unendlich langen Werten ala 2/3.
Und warum sollte 0.68 nicht in den Single-Bereich passen? Es ist nur nicht exakt darstellbar, ebenso wenig wie als Double oder Extended. Also ist das Gerede vom falschen Datentyp noch nicht mal 10% der Wahrheit.
Single hat einen 8 Bit-Exponent und eine Mantisse von 23 Bit Länge, inkl. einem virtuellen Bit, wenn der Exponent 0 ist, also 24.
2^24 = 16.777.215 = nicht ganz 8 Dezimalstellen (nur 1. bis 7. können alles von 0 bis 9 sein)
Querfrage: Warum ist 0.000000000931322574615478515625 exakt als Single dastellbar, obwohl es 21 signifikante Stellen hat?

Wenn der Exponent 0 ist hat man subnormale Zahlen, und im Gegensatz zu Deiner Behauptung wird das signifikante Bit in dieser Situation gerade nicht versteckt!

Normalisierte Zahlen haben immer eine 24-Bit Mantisse bzw. Signifikand (falls Du Deine Info vom deutschen Wikipedia schau mal ins englische oder in den Standard IEEE754_2008 Tabelle 3.2).

Geändert von gammatester (18. Jun 2018 um 10:59 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

AW: Single wert ist unterschiedlich obwohl gleich

  Alt 18. Jun 2018, 11:35
Zitat:
Und warum sollte 0.68 nicht in den Single-Bereich passen?
Nun weil @himitsu es sagt.

Was ich nicht verstehe.. Warum hier der Compiler von Delphi wieder eine Extrawurst kreiert (Double oder Extended)
Definiere ich in C++ die gleiche Const dann gibt es so was nicht.

gruss
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#7

AW: Single wert ist unterschiedlich obwohl gleich

  Alt 18. Jun 2018, 11:41
Zitat:
Und warum sollte 0.68 nicht in den Single-Bereich passen?
Nun weil @himitsu es sagt.

Was ich nicht verstehe.. Warum hier der Compiler von Delphi wieder eine Extrawurst kreiert (Double oder Extended)
Definiere ich in C++ die gleiche Const dann gibt es so was nicht.

gruss
C++ rechnet wohl immer double (aber legt mich nicht fest).

Delphi-32-Bit rechnet intern mit extended.

Delphi-64-Bit via SSE immer als double.
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.307 Beiträge
 
Delphi 12 Athens
 
#8

AW: Single wert ist unterschiedlich obwohl gleich

  Alt 18. Jun 2018, 11:39
Für Gleitkomma-Datentypen verwende ich mittlerweile (fast) immer Funktionen aus der Unit System.Math

IsZero oder Samevalue oder compareValue ist da dein Freund.
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#9

AW: Single wert ist unterschiedlich obwohl gleich

  Alt 18. Jun 2018, 11:42
Für Gleitkomma-Datentypen verwende ich mittlerweile (fast) immer Funktionen aus der Unit System.Math

IsZero oder Samevalue oder compareValue ist da dein Freund.
Ja warum es einfach machen wenn es auch umständlich geht.
Bleibt unverständlich für mich.

Zitat:
C++ rechnet wohl immer double (aber legt mich nicht fest).
Delphi-32-Bit rechnet intern mit extended.
Delphi-64-Bit via SSE immer als double.
Jo..
Ich habe schon Anwendungen in Sharp, VBNet, Vb6, C++ geschrieben
Nirgendwo habe ich je solche Probleme mit Single gehabt.

gruss

Geändert von EWeiss (18. Jun 2018 um 11:45 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Single wert ist unterschiedlich obwohl gleich

  Alt 18. Jun 2018, 12:03
Ich habe schon Anwendungen in Sharp, VBNet, Vb6, C++ geschrieben
Nirgendwo habe ich je solche Probleme mit Single gehabt.
Und mit welchen Typen?

Je feiner der typ auflöst, also je größer er ist, um so kleiner werden die Problembereiche und so schwerer wird es sie zu treffen.



Beim Unwandeln dieser Werte in eine Textdarstellung sollte man niemals mehr als die signifikanten Stellen umwandeln, da alles danach quasi "zufällig" ist und diesen Rundungsfehler potenziert darstellt, je weiter man dahinter schaut.

Bei Vergleichen, vor allem Gleich, Kleiner-Gleich und Größer-Gleich, aber auch bei Kleiner und Größer muss man eben auch diese Rundungsfehler mit einbeziehen, was eben IsZero oder CompareValue machen (Delta).


Wer unbedingt genaue Werte braucht, muss auch die passenden Typen verwenden, wie z.B. Currency, BCD oder Dergleichen.


@gammatester: Wer mit solch kleinen Werten arbeitet, muß eben entweder das Delta anpassen oder eine andere Vergleichsmethode verwenden.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (18. Jun 2018 um 12:06 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 15:02 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