Problem mit Float und Double
-
Bei mir sagt er, dass d1 != d2 ist.
Welchen Compiler nimmst du?
-
Bin unter Ubunt in Kate und nut ze das Terminal mit.
gcc -std=89 -pedantic -wall -wextra
Diese Compiler einstellungen sind eine Vorgabe für unsere Programme
-
Odatas schrieb:
Problem das ich jetzt habe bei der Betrags Rechnung ist dass er ja 0,10000 und 0,10000534654631313 als gleich sieht....wie stell ich das an das er das nicht macht?
Erhöhe den Toleranzwert (Epsilon).
-
_matze schrieb:
Odatas schrieb:
Problem das ich jetzt habe bei der Betrags Rechnung ist dass er ja 0,10000 und 0,10000534654631313 als gleich sieht....wie stell ich das an das er das nicht macht?
Erhöhe den Toleranzwert (Epsilon).
Das hatte ich noch nicht. Wie macht man das?
-
Odatas schrieb:
Bei der Ausgabe zeigt er mir double aber immer nur mit 7 Nachkommmastellen an. Obwohl double doch 15 hat...was mach ich falsch?
double hat 15 signifikant Stellen. Das sind keine Nachkommastellen.
Wenn du z.B die Zahl 9.876543210123456e17 nimmst, bleibt da kein Platz mehr für Nachkommstellen.
Bei 9.876543210123456e-17 hättest du dagegen mehr als 30 Nachkommastellen.
-
Odatas schrieb:
_matze schrieb:
Odatas schrieb:
Problem das ich jetzt habe bei der Betrags Rechnung ist dass er ja 0,10000 und 0,10000534654631313 als gleich sieht....wie stell ich das an das er das nicht macht?
Erhöhe den Toleranzwert (Epsilon).
Das hatte ich noch nicht. Wie macht man das?
Wie hast du das mit dem Betrag und der Toleranz denn umgesetzt? Zeig mal her.
-
Wer verweist oder schreibt ein kleines Tutorial für den Umgang mit Gleitkommazahlen float, double, long double und wie man mit Epsilon und Absolutwerten auf Gleichheit abfragt? Und die Unterscheidung zwischen signifikanten Stellen und Nachkommastellen gehört auch erklärt und verstanden
Die Frage taucht hier sehr häufig auf!
-
DirkB schrieb:
Odatas schrieb:
Bei der Ausgabe zeigt er mir double aber immer nur mit 7 Nachkommmastellen an. Obwohl double doch 15 hat...was mach ich falsch?
double hat 15 signifikant Stellen.
double hat genau DBL_SIG signifikante Stellen, gemäß ANSI mind. 10.
-
berniebutt schrieb:
Wer verweist oder schreibt ein kleines Tutorial für den Umgang mit Gleitkommazahlen float, double, long double und wie man mit Epsilon und Absolutwerten auf Gleichheit abfragt?
Immer der, der fragt.
-
_matze schrieb:
Immer der, der fragt.
Oder vielleicht besser du?
Habe kurz gegoogelt, finde da aber wenig brauchbares als möglichen Verweis weil meist zu akademisch. In den Zeiten von FORTRAN war das jedem Programmierer klar, wieso nicht in C?
-
Weil es mehr C-Programmierer gibt: Da ist die Wahrscheinlichkeit auch hoeher, dass es nicht allen klar ist.
-
Das kann es nicht sein, FORTRAN und C haben dieselben Grundlagen für floating-point Datentypen und deren Arithmetik. Nur die interne Darstellung hat sich evtl. mit neueren Standards geändert. Juckt aber niemand zum Verstehen!
-
berniebutt schrieb:
Wer verweist oder schreibt ein kleines Tutorial für den Umgang mit Gleitkommazahlen float, double, long double und wie man mit Epsilon und Absolutwerten auf Gleichheit abfragt? Und die Unterscheidung zwischen signifikanten Stellen und Nachkommastellen gehört auch erklärt und verstanden
Die Frage taucht hier sehr häufig auf!
Naja, so etwas gibt es doch
http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm
http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.htmlIch poste beide Links hier regelmäßig. Aber offenbar werden die immer ignoriert :(.
Wer hat Lust einen kleinen FAQ-Eintrag zu schreiben?
btw. GCC hat ein -Wfloat-equal. Das warnt, wenn man == auf Fließkommazahlen anwendet.
edit:
auch ganz gut scheint:
http://hal.archives-ouvertes.fr/hal-00128124/en/
und auf der Homepage vom Kahan (der Typ hinter dem Standard) findet man auch ein paar gute Informationen (auch wenn sie teilweise mit ein bisschen Verbitterung gemischt sind) http://www.cs.berkeley.edu/~wkahan/
-
rüdiger schrieb:
Naja, so etwas gibt es doch
http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm
http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.htmlIch poste beide Links hier regelmäßig. Aber offenbar werden die immer ignoriert :(.
Wer hat Lust einen kleinen FAQ-Eintrag zu schreiben?
http://hal.archives-ouvertes.fr/hal-00128124/en/
http://www.cs.berkeley.edu/~wkahan/Es gibt eigentlich alles zu lesen, wenn man im web sucht. Viel einfacher ist aber, hier im Forum zu fragen. Die FAQs zu lesen ist schon etwas aufwendiger. Wer tut das?
Erscheint mir eine notwendige Sache in Deutsch für die Moderation dieses Forums zu sein, um nicht wieder antworten zu nüssen.
-
berniebutt schrieb:
Das kann es nicht sein, FORTRAN und C haben dieselben Grundlagen für floating-point Datentypen und deren Arithmetik. Nur die interne Darstellung hat sich evtl. mit neueren Standards geändert. Juckt aber niemand zum Verstehen!
Das habe ich damit nicht gemeint.