From 978f579a8c6a6cff3803cc62d4b09c974f476285 Mon Sep 17 00:00:00 2001 From: Edward Welbourne Date: Mon, 2 Sep 2019 18:22:43 +0200 Subject: [PATCH] Use quiet NaNs instead of signaling ones I see no good reason why the NaN returned when reading "nan" as a double should be a signaling one; a quiet one should be just fine. [ChangeLog][QtCore][QLocale] The NaN obtained when reading "nan" as a floating-point value is now quiet rather than signaling. [ChangeLog][QtCore][QTextStream] The NaN obtained when reading "nan" as a floating-point value is now quiet rather than signaling. Change-Id: Ife477a30bfb813c611b13a33c38ea82f9e8a93eb Reviewed-by: Lars Knoll Reviewed-by: Thiago Macieira --- src/corelib/serialization/qtextstream.cpp | 2 +- src/corelib/text/qlocale_tools.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/corelib/serialization/qtextstream.cpp b/src/corelib/serialization/qtextstream.cpp index a675c3cede4..cf59cc54c7d 100644 --- a/src/corelib/serialization/qtextstream.cpp +++ b/src/corelib/serialization/qtextstream.cpp @@ -2056,7 +2056,7 @@ bool QTextStreamPrivate::getReal(double *f) // nan/+inf/-inf, so here we also check for uppercase and mixed // case versions. if (!qstricmp(buf, "nan") || !qstricmp(buf, "+nan") || !qstricmp(buf, "-nan")) { - *f = qSNaN(); + *f = qQNaN(); return true; } else if (!qstricmp(buf, "+inf") || !qstricmp(buf, "inf")) { *f = qInf(); diff --git a/src/corelib/text/qlocale_tools.cpp b/src/corelib/text/qlocale_tools.cpp index db8c8cd12f8..c246028b4d7 100644 --- a/src/corelib/text/qlocale_tools.cpp +++ b/src/corelib/text/qlocale_tools.cpp @@ -293,7 +293,7 @@ double qt_asciiToDouble(const char *num, int numLen, bool &ok, int &processed, // "-nan" or "+nan" if (qstrcmp(num, "nan") == 0) { processed = 3; - return qt_snan(); + return qt_qnan(); } else if ((num[0] == '-' || num[0] == '+') && qstrcmp(num + 1, "nan") == 0) { processed = 0; ok = false; @@ -322,7 +322,7 @@ double qt_asciiToDouble(const char *num, int numLen, bool &ok, int &processed, conv_flags = double_conversion::StringToDoubleConverter::ALLOW_LEADING_SPACES | double_conversion::StringToDoubleConverter::ALLOW_TRAILING_SPACES; } - double_conversion::StringToDoubleConverter conv(conv_flags, 0.0, qt_snan(), 0, 0); + double_conversion::StringToDoubleConverter conv(conv_flags, 0.0, qt_qnan(), 0, 0); d = conv.StringToDouble(num, numLen, &processed); if (!qIsFinite(d)) {