Im Zweifelsfall ist die Spezifikation zu lesen. Der C++ Standard besagt, dass digits10
ist:
Anzahl der Basis 10 Ziffern, die ohne Änderung dargestellt werden können.
Das ist ein wenig vage; Glücklicherweise gibt es eine Fußnote:
Entspricht FLT_DIG, DBL_DIG, LDBL_DIG
Diese werden im C-Standard definiert sind; Lassen Sie uns es dort nachschauen:
Anzahl der Dezimalstellen, q, so dass jeder Gleitkommazahl mit q Dezimalstellen in eine Fließkommazahl gerundet werden kann mit p radix b Ziffern und wieder zurück ohne Änderung die q Dezimalziffern.
So ist std::numeric_limits<float>::digits10
die Anzahl der Dezimalstellen, so dass jeder Gleitkommazahl mit so vielen Stellen ist unverändert, wenn Sie es zu einem float
und zurück konvertieren in Dezimalzahlen.
Wie Sie sagen, den Schwimmer hat etwa 7 Stellen der Dezimalgenauigkeit, aber die Fehler in Vertretung beiden feste Breite Dezimalzahlen und schwimmt nicht gleichmäßig logarithmisch. Der relative Fehler eine Zahl der Form 1.xxx .. auf eine feste Anzahl von Dezimalstellen gerundet ist nahezu zehnmal größer ist als die relativen Fehler von 9.xxx Rundung .. auf die gleiche Anzahl von Dezimalstellen. Auf ähnliche Weise, je nachdem wo ein Wert fiel in einem Binade, der relative Fehler es bis zu 24 Binärstellen in Abrunden kann um einen Faktor von nahezu zwei variieren.
Das Ergebnis davon ist, dass nicht alle siebenstelligen Dezimalzahlen die Rundreise überleben zu schweben und zurück, aber alle sechsstelligen Dezimalzahlen tun. Daher ist std::numeric_limits<float>::digits10
6.
Es gibt nicht so viele sechs- und siebenstellige Dezimalstellen mit Exponenten in einem gültigen Bereich für den Typ float
; Sie können ziemlich leicht ein Programm schreiben, um alle von ihnen erschöpfend zu prüfen, wenn Sie noch nicht überzeugt sind.
Ich denke du meintest std :: numeric_limits :: digits10, richtig? – Scharron
@Scharron: Richtig, danke, dass du das gesehen hast. Fehler beim Kopieren und Einfügen – liori
mögliches Duplikat von [Ist die höchstwertige Dezimalziffer die Genauigkeit, die ohne Signifikanzverlust in 6 oder 7,225 in binär und zurück in Dezimal konvertiert werden kann?] (Http://stackoverflow.com/questions/30688422/is-the-most-) signifikante Dezimalstellen-Genauigkeit-die-in-binär konvertiert werden kann – Bryan