diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-07-28 11:46:30 +0200 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2020-07-28 22:40:18 +0000 |
commit | 46caf7a449baed61516605bb6feb595ab747adea (patch) | |
tree | aa3851dcb1fe1bda46c35faad178f45dc728876d /src/corelib/global | |
parent | 659a52bcaa4abcf2b8a8fff87d94c41af7a25d06 (diff) |
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.
Change-Id: I897fc0dc3b8a9c557bb1922ea7ca8df501e91859
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
(cherry picked from commit d782df48612a932f03a579c889670d34c26e9574)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
Diffstat (limited to 'src/corelib/global')
-rw-r--r-- | src/corelib/global/qfloat16.h | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/src/corelib/global/qfloat16.h b/src/corelib/global/qfloat16.h index f35eefd922..c7a9c87af3 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) {} |