Wir haben den Fließkomma-Parser und Formatierer für the Universal CRT und Visual C++ 2015 umgeschrieben, um die Korrektheit zu verbessern. Siehe die Breaking Changes in Visual C++ Dokumentation für Visual C++ 2015; Es gibt einen Abschnitt mit dem Titel "Gleitkommaformatierung und Parsing".
Das Visual C++ 2015-Ergebnis ist das korrekt gerundete Ergebnis. Das Eingabestring 0.182696884245135
ist mit dem folgenden Wert mit doppelter Genauigkeit umgewandelt, die der nächste darstellbare Wert ist:
0.18269688424513'49994693288181224488653242588043212890625
Beachten Sie die Häkchen nach dem 14. Nachkommastelle. Die 15. Ziffer ist eine 4
, wenn also die Zahl mit 14 Nachkommastellen formatiert wird, wird die Zahl "abgerundet" (oder abgeschnitten), nicht nach oben.
Das Visual C++ 2008-Ergebnis ist falsch. Ich weiß nicht, ob beim Parsen oder Formatieren ein Fehler aufgetreten ist. Es gibt keine Möglichkeit, das alte, falsche Verhalten mit dem Universal CRT und Visual C++ 2015 zu erhalten.
Das Visual C++ 2008-Ergebnis ist tatsächlich weniger korrekt. Siehe meine Antwort für Details. –
Sie sind der Experte! Ich werde dies löschen und Ihre Antwort aufwerten. – Bathsheba
Bevor ich es aber tun konnte, konnten Sie bestätigen, dass vs2008 80-Bit-Literale standardmäßig nicht verwendet hat? (Dh die Standardeinstellungen des Compilers). Ich erinnere mich, dass ich vor ein paar Jahren so etwas gesehen habe. – Bathsheba