@@ -326,7 +326,7 @@ BOOST_DECIMAL_EXPORT class decimal32_fast final
326326 template <BOOST_DECIMAL_DECIMAL_FLOATING_TYPE Decimal, std::enable_if_t <detail::is_decimal_floating_point_v<Decimal> && (detail::impl::decimal_val_v<Decimal> <= detail::impl::decimal_val_v<decimal32_fast>), bool > = true >
327327 explicit constexpr operator Decimal () const noexcept ;
328328
329- friend constexpr auto direct_init (std:: uint_fast32_t significand, std:: uint_fast8_t exponent, bool sign) noexcept -> decimal32_fast;
329+ friend constexpr auto direct_init (significand_type significand, exponent_type exponent, bool sign) noexcept -> decimal32_fast;
330330
331331 // <cmath> or extensions that need to be friends
332332 template <BOOST_DECIMAL_DECIMAL_FLOATING_TYPE T>
@@ -379,7 +379,7 @@ constexpr decimal32_fast::decimal32_fast(T1 coeff, T2 exp, bool sign) noexcept
379379 exp = 0 ;
380380 }
381381
382- auto biased_exp {static_cast <std:: uint_fast32_t >(exp + detail::bias)};
382+ auto biased_exp {static_cast <exponent_type >(exp + detail::bias)};
383383
384384 // Decimal32 exponent holds 8 bits
385385 if (biased_exp > detail::max_biased_exp_v<decimal32_fast>)
@@ -431,7 +431,7 @@ BOOST_DECIMAL_CXX20_CONSTEXPR decimal32_fast::decimal32_fast(Float val) noexcept
431431# pragma GCC diagnostic pop
432432#endif
433433
434- constexpr auto direct_init (std:: uint_fast32_t significand, std:: uint_fast8_t exponent, bool sign = false ) noexcept -> decimal32_fast
434+ constexpr auto direct_init (decimal32_fast::significand_type significand, decimal32_fast::exponent_type exponent, bool sign = false ) noexcept -> decimal32_fast
435435{
436436 decimal32_fast val;
437437 val.significand_ = significand;
@@ -1028,10 +1028,12 @@ constexpr auto div_impl(decimal32_fast lhs, decimal32_fast rhs, decimal32_fast&
10281028 << " \n exp rhs: " << exp_rhs << std::endl;
10291029 #endif
10301030
1031+ using promoted_type = std::uint64_t ;
1032+
10311033 // We promote to uint64 since the significands are currently 32-bits
10321034 // By appending enough zeros to the LHS we end up finding what we need anyway
1033- const auto big_sig_lhs {static_cast <std:: uint_fast64_t >(lhs.significand_ ) * detail::pow10 (static_cast <std:: uint_fast64_t >(detail::precision_v<decimal32>))};
1034- const auto res_sig {big_sig_lhs / static_cast <std:: uint_fast64_t >(rhs.significand_ )};
1035+ const auto big_sig_lhs {static_cast <promoted_type >(lhs.significand_ ) * detail::pow10 (static_cast <promoted_type >(detail::precision_v<decimal32>))};
1036+ const auto res_sig {big_sig_lhs / static_cast <promoted_type >(rhs.significand_ )};
10351037 const auto res_exp {(lhs.biased_exponent () - detail::precision_v<decimal32>) - rhs.biased_exponent ()};
10361038
10371039 q = decimal32_fast (res_sig, res_exp, lhs.sign_ != rhs.sign_ );
@@ -1499,7 +1501,7 @@ struct numeric_limits<boost::decimal::decimal32_fast>
14991501 static constexpr int min_exponent10 = min_exponent;
15001502 static constexpr int max_exponent = 96 ;
15011503 static constexpr int max_exponent10 = max_exponent;
1502- static constexpr bool traps = numeric_limits<std::uint_fast32_t >::traps;
1504+ static constexpr bool traps = numeric_limits<std::uint32_t >::traps;
15031505 static constexpr bool tinyness_before = true ;
15041506
15051507 // Member functions
0 commit comments