From d782df48612a932f03a579c889670d34c26e9574 Mon Sep 17 00:00:00 2001 From: Allan Sandfeld Jensen Date: Tue, 28 Jul 2020 11:46:30 +0200 Subject: Make qfloat16 helper functions consistent with float/double versions Infinite is only when the mantissa is 0, everything else is NaN. std::isnormal returns false on zero. Pick-to: 5.15 Change-Id: I897fc0dc3b8a9c557bb1922ea7ca8df501e91859 Reviewed-by: Thiago Macieira --- src/corelib/global/qfloat16.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/corelib/global/qfloat16.h b/src/corelib/global/qfloat16.h index 9ac811a3e6..ab480f84f5 100644 --- a/src/corelib/global/qfloat16.h +++ b/src/corelib/global/qfloat16.h @@ -80,9 +80,9 @@ public: inline operator float() const noexcept; // Support for qIs{Inf,NaN,Finite}: - bool isInf() const noexcept { return ((b16 >> 8) & 0x7e) == 0x7c; } - bool isNaN() const noexcept { return ((b16 >> 8) & 0x7e) == 0x7e; } - bool isFinite() const noexcept { return ((b16 >> 8) & 0x7c) != 0x7c; } + bool isInf() const noexcept { return (b16 & 0x7fff) == 0x7c00; } + bool isNaN() const noexcept { return (b16 & 0x7fff) > 0x7c00; } + bool isFinite() const noexcept { return (b16 & 0x7fff) < 0x7c00; } Q_CORE_EXPORT int fpClassify() const noexcept; // Can't specialize std::copysign() for qfloat16 qfloat16 copySign(qfloat16 sign) const noexcept @@ -96,10 +96,10 @@ public: static constexpr qfloat16 _limit_infinity() noexcept { return qfloat16(Wrap(0x7c00)); } static constexpr qfloat16 _limit_quiet_NaN() noexcept { return qfloat16(Wrap(0x7e00)); } #if QT_CONFIG(signaling_nan) - static constexpr qfloat16 _limit_signaling_NaN() noexcept { return qfloat16(Wrap(0x7f00)); } + static constexpr qfloat16 _limit_signaling_NaN() noexcept { return qfloat16(Wrap(0x7d00)); } #endif inline constexpr bool isNormal() const noexcept - { return (b16 & 0x7fff) == 0 || ((b16 & 0x7c00) && (b16 & 0x7c00) != 0x7c00); } + { return (b16 & 0x7c00) && (b16 & 0x7c00) != 0x7c00; } private: quint16 b16; constexpr inline explicit qfloat16(Wrap nibble) noexcept : b16(nibble.b16) {} -- cgit v1.2.3