summaryrefslogtreecommitdiff
path: root/src/mongo/platform/decimal128.cpp
diff options
context:
space:
mode:
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 {