added lacking overloads to avoid potential ambiguity

This commit is contained in:
Pavel Novikov 2025-09-06 00:12:37 +03:00
parent 6702cd4244
commit e12463583f
No known key found for this signature in database
GPG Key ID: F2C305CAE4167D14
2 changed files with 16 additions and 0 deletions

View File

@ -373,6 +373,18 @@ integer_times_pow10(int64_t mantissa, int decimal_exponent) noexcept {
// the following overloads are here to avoid surprising ambiguity for int, // the following overloads are here to avoid surprising ambiguity for int,
// unsigned, etc. // unsigned, etc.
#if !defined(_MSC_VER)
FASTFLOAT_CONSTEXPR20 inline double
integer_times_pow10(unsigned long long mantissa,
int decimal_exponent) noexcept {
return integer_times_pow10(static_cast<uint64_t>(mantissa), decimal_exponent);
}
FASTFLOAT_CONSTEXPR20 inline double
integer_times_pow10(long long mantissa, int decimal_exponent) noexcept {
return integer_times_pow10(static_cast<int64_t>(mantissa), decimal_exponent);
}
#endif
FASTFLOAT_CONSTEXPR20 inline double FASTFLOAT_CONSTEXPR20 inline double
integer_times_pow10(unsigned mantissa, int decimal_exponent) noexcept { integer_times_pow10(unsigned mantissa, int decimal_exponent) noexcept {
return integer_times_pow10(static_cast<uint64_t>(mantissa), decimal_exponent); return integer_times_pow10(static_cast<uint64_t>(mantissa), decimal_exponent);

View File

@ -2140,6 +2140,10 @@ TEST_CASE("integer_times_pow10") {
-3141592653589793238, -18, -3.141592653589793238); -3141592653589793238, -18, -3.141592653589793238);
verify_integer_multiplication_by_power_of_10<uint64_t>( verify_integer_multiplication_by_power_of_10<uint64_t>(
3141592653589793238, -18, 3.141592653589793238); 3141592653589793238, -18, 3.141592653589793238);
verify_integer_multiplication_by_power_of_10<long long>(
-3141592653589793238, -18, -3.141592653589793238);
verify_integer_multiplication_by_power_of_10<unsigned long long>(
3141592653589793238, -18, 3.141592653589793238);
for (int mode : {FE_UPWARD, FE_DOWNWARD, FE_TOWARDZERO, FE_TONEAREST}) { for (int mode : {FE_UPWARD, FE_DOWNWARD, FE_TOWARDZERO, FE_TONEAREST}) {
fesetround(mode); fesetround(mode);