Skip to content

Commit 7e5c7be

Browse files
authored
Merge pull request #820 from cppalliance/814
Change values of fast nans and infs to reduce comparisons
2 parents 437d912 + 64797e7 commit 7e5c7be

File tree

2 files changed

+11
-12
lines changed

2 files changed

+11
-12
lines changed

include/boost/decimal/decimal32_fast.hpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,9 @@ namespace decimal {
2828

2929
namespace detail {
3030

31-
BOOST_DECIMAL_CONSTEXPR_VARIABLE auto d32_fast_inf = std::numeric_limits<std::uint_fast32_t>::max();
32-
BOOST_DECIMAL_CONSTEXPR_VARIABLE auto d32_fast_qnan = std::numeric_limits<std::uint_fast32_t>::max() - 1;
33-
BOOST_DECIMAL_CONSTEXPR_VARIABLE auto d32_fast_snan = std::numeric_limits<std::uint_fast32_t>::max() - 2;
31+
BOOST_DECIMAL_CONSTEXPR_VARIABLE auto d32_fast_inf = std::numeric_limits<std::uint_fast32_t>::max() - 3;
32+
BOOST_DECIMAL_CONSTEXPR_VARIABLE auto d32_fast_qnan = std::numeric_limits<std::uint_fast32_t>::max() - 2;
33+
BOOST_DECIMAL_CONSTEXPR_VARIABLE auto d32_fast_snan = std::numeric_limits<std::uint_fast32_t>::max() - 1;
3434

3535
}
3636

@@ -461,7 +461,7 @@ constexpr auto isinf(decimal32_fast val) noexcept -> bool
461461
constexpr auto isnan(decimal32_fast val) noexcept -> bool
462462
{
463463
#ifndef BOOST_DECIMAL_FAST_MATH
464-
return val.significand_ == detail::d32_fast_qnan || val.significand_ == detail::d32_fast_snan;
464+
return val.significand_ >= detail::d32_fast_qnan;
465465
#else
466466
static_cast<void>(val);
467467
return false;
@@ -489,7 +489,7 @@ constexpr auto isnormal(decimal32_fast val) noexcept -> bool
489489

490490
constexpr auto isfinite(decimal32_fast val) noexcept -> bool
491491
{
492-
return val.significand_ < detail::d32_fast_snan;
492+
return val.significand_ < detail::d32_fast_inf;
493493
}
494494

495495
constexpr auto operator==(decimal32_fast lhs, decimal32_fast rhs) noexcept -> bool

include/boost/decimal/decimal64_fast.hpp

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,9 @@ namespace decimal {
3131

3232
namespace detail {
3333

34-
BOOST_DECIMAL_CONSTEXPR_VARIABLE auto d64_fast_inf = std::numeric_limits<std::uint_fast64_t>::max();
35-
BOOST_DECIMAL_CONSTEXPR_VARIABLE auto d64_fast_qnan = std::numeric_limits<std::uint_fast64_t>::max() - 1;
36-
BOOST_DECIMAL_CONSTEXPR_VARIABLE auto d64_fast_snan = std::numeric_limits<std::uint_fast64_t>::max() - 2;
34+
BOOST_DECIMAL_CONSTEXPR_VARIABLE auto d64_fast_inf = std::numeric_limits<std::uint_fast64_t>::max() - 3;
35+
BOOST_DECIMAL_CONSTEXPR_VARIABLE auto d64_fast_qnan = std::numeric_limits<std::uint_fast64_t>::max() - 2;
36+
BOOST_DECIMAL_CONSTEXPR_VARIABLE auto d64_fast_snan = std::numeric_limits<std::uint_fast64_t>::max() - 1;
3737

3838
struct decimal64_fast_components
3939
{
@@ -479,8 +479,7 @@ constexpr auto isinf(decimal64_fast val) noexcept -> bool
479479
constexpr auto isnan(decimal64_fast val) noexcept -> bool
480480
{
481481
#ifndef BOOST_DECIMAL_FAST_MATH
482-
return val.significand_ == detail::d64_fast_qnan ||
483-
val.significand_ == detail::d64_fast_snan;
482+
return val.significand_ >= detail::d64_fast_qnan;
484483
#else
485484
static_cast<void>(val);
486485
return false;
@@ -513,12 +512,12 @@ constexpr auto isnormal(decimal64_fast val) noexcept -> bool
513512

514513
constexpr auto isfinite(decimal64_fast val) noexcept -> bool
515514
{
516-
return val.significand_ < detail::d64_fast_snan;
515+
return val.significand_ < detail::d64_fast_inf;
517516
}
518517

519518
constexpr auto not_finite(decimal64_fast val) noexcept -> bool
520519
{
521-
return val.significand_ >= detail::d64_fast_snan;
520+
return val.significand_ >= detail::d64_fast_inf;
522521
}
523522

524523
constexpr auto operator==(decimal64_fast lhs, decimal64_fast rhs) noexcept -> bool

0 commit comments

Comments
 (0)