summaryrefslogtreecommitdiff
path: root/src/mongo/platform/decimal128.cpp
diff options
context:
space:
mode:
authorLucas de Castro Borges <lucas@gnuabordo.com.br>2025-02-11 15:07:35 -0300
committerLucas de Castro Borges <lucas@gnuabordo.com.br>2025-02-11 15:07:35 -0300
commit4cb8841196d0625dfa3825aa326f071cd27c7b8b (patch)
tree1682a647d4463397c119183369ae6f750d5fdcff /src/mongo/platform/decimal128.cpp
parentaa03c6362cbaa767638e6eed9b031d86dd2643d1 (diff)
parent8f0827553e09872941945a093b647a4211a9db7f (diff)
Update upstream source from tag 'upstream/6.0.0'master
Update to upstream version '6.0.0' with Debian dir 5604a80ec1c96ca76f25f40d78e6ef855abec322
Diffstat (limited to 'src/mongo/platform/decimal128.cpp')
-rw-r--r--src/mongo/platform/decimal128.cpp23
1 files changed, 13 insertions, 10 deletions
diff --git a/src/mongo/platform/decimal128.cpp b/src/mongo/platform/decimal128.cpp
index ef785025b17..0d12479f70a 100644
--- a/src/mongo/platform/decimal128.cpp
+++ b/src/mongo/platform/decimal128.cpp
@@ -827,33 +827,36 @@ Decimal128 Decimal128::exponential(std::uint32_t* signalingFlags, RoundingMode r
return Decimal128{libraryTypeToValue(current)};
}
-Decimal128 Decimal128::naturalLogarithm(RoundingMode roundMode) const {
+Decimal128 Decimal128::logarithm(RoundingMode roundMode) const {
std::uint32_t throwAwayFlag = 0;
- return naturalLogarithm(&throwAwayFlag, roundMode);
+ return logarithm(&throwAwayFlag, roundMode);
}
-Decimal128 Decimal128::naturalLogarithm(std::uint32_t* signalingFlags,
- RoundingMode roundMode) const {
+Decimal128 Decimal128::logarithm(std::uint32_t* signalingFlags, RoundingMode roundMode) const {
BID_UINT128 current = decimal128ToLibraryType(_value);
current = bid128_log(current, roundMode, signalingFlags);
return Decimal128{libraryTypeToValue(current)};
}
-Decimal128 Decimal128::logarithm(const Decimal128& base, RoundingMode roundMode) const {
+Decimal128 Decimal128::logarithm(const Decimal128& other, RoundingMode roundMode) const {
std::uint32_t throwAwayFlag = 0;
- if (base.isEqual(Decimal128(2))) {
+ if (other.isEqual(Decimal128(2))) {
BID_UINT128 current = decimal128ToLibraryType(_value);
current = bid128_log2(current, roundMode, &throwAwayFlag);
return Decimal128{libraryTypeToValue(current)};
}
- if (base.isEqual(Decimal128(10))) {
+ if (other.isEqual(Decimal128(10))) {
BID_UINT128 current = decimal128ToLibraryType(_value);
current = bid128_log10(current, roundMode, &throwAwayFlag);
return Decimal128{libraryTypeToValue(current)};
}
- // Logarithm with a generic base is equivalent to `ln(input) / ln(base)`.
- return naturalLogarithm(&throwAwayFlag, roundMode)
- .divide(base.naturalLogarithm(&throwAwayFlag, roundMode));
+ return logarithm(other, &throwAwayFlag);
+}
+
+Decimal128 Decimal128::logarithm(const Decimal128& other,
+ std::uint32_t* signalingFlags,
+ RoundingMode roundMode) const {
+ return logarithm(signalingFlags, roundMode).divide(other);
}
Decimal128 Decimal128::modulo(const Decimal128& other) const {