Hallo,
mal eine Frage zu Präzision einer 4 Byte floating, es gibt verschiedene Aussagen zur Präzision. Mir ist im Grunde das floating Thema nicht ganz fremd aber so eine richtig präzise Aussage konnte ich nicht finden.
6-stellig
http://openbook.rheinwerk-verlag.de...en_008.htm#mj357b36b759cbb526c1701f1341d99a96
6-9 significant digits, typically 7
https://www.learncpp.com/cpp-tutorial/floating-point-numbers/
float has 7 decimal digits of precision.
https://www.geeksforgeeks.org/difference-float-double-c-cpp/
Jetzt mal die Frage, wenn im Programm irgendwann mal ein float von einem double gefüttert wird, wieviele Stellen sind jetzt wirklich save?
6, 7, 8, 9 ?
Ich habe selber mal getestet und eine double einer float übergeben und geschaut ab wann die Werte nicht mehr stimmen:
(ausgegeben mit std::setprecition(20); und std::fixed)
double 0.123456789 -> float 0.1234567 (8 korrekte Stellen)
double 100.123456789 -> float 100.12345 (8 korrekte Stellen)
double 10000.123456789 -> float 10000.123 (8 korrekte Stellen)
Also beim eigenen Test bleiben 8 Stellen korrekt.
Noch kurz der Hintergrund, ich will eine Funktion schreiben, die prüft ob ein double in ein float passt und falls nicht ein false zurück liefert. Dazu runde ich das double zunächst auf 10 Stellen (in dem Usecase wird nie mehr Präzision kommen) dann konvertiere ich es zu einem String, lösche die überflüssigen Nullen und gucke wie lang das string ist. Jetzt muss natürlich mit einem Wert verglichen werden der die maximale Anzahl an float Stellen definiert um dann ein flase oder true zurückzugeben. Nach dem eigenen Test würde ich eine 8 als max definieren aber die anderen Quellen sagen eben auch andere Werte.
mal eine Frage zu Präzision einer 4 Byte floating, es gibt verschiedene Aussagen zur Präzision. Mir ist im Grunde das floating Thema nicht ganz fremd aber so eine richtig präzise Aussage konnte ich nicht finden.
6-stellig
http://openbook.rheinwerk-verlag.de...en_008.htm#mj357b36b759cbb526c1701f1341d99a96
6-9 significant digits, typically 7
https://www.learncpp.com/cpp-tutorial/floating-point-numbers/
float has 7 decimal digits of precision.
https://www.geeksforgeeks.org/difference-float-double-c-cpp/
Jetzt mal die Frage, wenn im Programm irgendwann mal ein float von einem double gefüttert wird, wieviele Stellen sind jetzt wirklich save?
6, 7, 8, 9 ?
Ich habe selber mal getestet und eine double einer float übergeben und geschaut ab wann die Werte nicht mehr stimmen:
(ausgegeben mit std::setprecition(20); und std::fixed)
double 0.123456789 -> float 0.1234567 (8 korrekte Stellen)
double 100.123456789 -> float 100.12345 (8 korrekte Stellen)
double 10000.123456789 -> float 10000.123 (8 korrekte Stellen)
Also beim eigenen Test bleiben 8 Stellen korrekt.
Ergänzung ()
Noch kurz der Hintergrund, ich will eine Funktion schreiben, die prüft ob ein double in ein float passt und falls nicht ein false zurück liefert. Dazu runde ich das double zunächst auf 10 Stellen (in dem Usecase wird nie mehr Präzision kommen) dann konvertiere ich es zu einem String, lösche die überflüssigen Nullen und gucke wie lang das string ist. Jetzt muss natürlich mit einem Wert verglichen werden der die maximale Anzahl an float Stellen definiert um dann ein flase oder true zurückzugeben. Nach dem eigenen Test würde ich eine 8 als max definieren aber die anderen Quellen sagen eben auch andere Werte.
Zuletzt bearbeitet: