diff options
author | James Wahlin <james@mongodb.com> | 2019-02-14 16:12:50 -0500 |
---|---|---|
committer | James Wahlin <james@mongodb.com> | 2019-02-20 08:59:01 -0500 |
commit | 5aa3f6dbc5e31beaf40e0828f7a24ecf71fb42f9 (patch) | |
tree | 6f003bf9b8b6fd2f0144f69e69e69cb7bc6205dd /src/mongo/platform | |
parent | 79a050141e79dc267f8723adb48b191652ba9fce (diff) | |
download | mongo-5aa3f6dbc5e31beaf40e0828f7a24ecf71fb42f9.tar.gz |
SERVER-39487 Decimal128::squareRoot() returns result for Decimal128::exponential()
Diffstat (limited to 'src/mongo/platform')
-rw-r--r-- | src/mongo/platform/decimal128.cpp | 30 | ||||
-rw-r--r-- | src/mongo/platform/decimal128_test.cpp | 24 |
2 files changed, 39 insertions, 15 deletions
diff --git a/src/mongo/platform/decimal128.cpp b/src/mongo/platform/decimal128.cpp index 9df4185db99..69ef39d593d 100644 --- a/src/mongo/platform/decimal128.cpp +++ b/src/mongo/platform/decimal128.cpp @@ -323,7 +323,7 @@ Decimal128 Decimal128::toAbs() const { Decimal128 Decimal128::acos(RoundingMode roundMode) const { std::uint32_t throwAwayFlag = 0; - return acos(&throwAwayFlag); + return acos(&throwAwayFlag, roundMode); } Decimal128 Decimal128::acos(std::uint32_t* signalingFlags, RoundingMode roundMode) const { @@ -334,7 +334,7 @@ Decimal128 Decimal128::acos(std::uint32_t* signalingFlags, RoundingMode roundMod Decimal128 Decimal128::acosh(RoundingMode roundMode) const { std::uint32_t throwAwayFlag = 0; - return acosh(&throwAwayFlag); + return acosh(&throwAwayFlag, roundMode); } Decimal128 Decimal128::acosh(std::uint32_t* signalingFlags, RoundingMode roundMode) const { @@ -345,7 +345,7 @@ Decimal128 Decimal128::acosh(std::uint32_t* signalingFlags, RoundingMode roundMo Decimal128 Decimal128::asin(RoundingMode roundMode) const { std::uint32_t throwAwayFlag = 0; - return asin(&throwAwayFlag); + return asin(&throwAwayFlag, roundMode); } Decimal128 Decimal128::asin(std::uint32_t* signalingFlags, RoundingMode roundMode) const { @@ -356,7 +356,7 @@ Decimal128 Decimal128::asin(std::uint32_t* signalingFlags, RoundingMode roundMod Decimal128 Decimal128::asinh(RoundingMode roundMode) const { std::uint32_t throwAwayFlag = 0; - return asinh(&throwAwayFlag); + return asinh(&throwAwayFlag, roundMode); } Decimal128 Decimal128::asinh(std::uint32_t* signalingFlags, RoundingMode roundMode) const { @@ -367,7 +367,7 @@ Decimal128 Decimal128::asinh(std::uint32_t* signalingFlags, RoundingMode roundMo Decimal128 Decimal128::atan(RoundingMode roundMode) const { std::uint32_t throwAwayFlag = 0; - return atan(&throwAwayFlag); + return atan(&throwAwayFlag, roundMode); } Decimal128 Decimal128::atan(std::uint32_t* signalingFlags, RoundingMode roundMode) const { @@ -394,7 +394,7 @@ Decimal128 Decimal128::atan2(const Decimal128& other, Decimal128 Decimal128::atanh(RoundingMode roundMode) const { std::uint32_t throwAwayFlag = 0; - return atanh(&throwAwayFlag); + return atanh(&throwAwayFlag, roundMode); } Decimal128 Decimal128::atanh(std::uint32_t* signalingFlags, RoundingMode roundMode) const { @@ -405,7 +405,7 @@ Decimal128 Decimal128::atanh(std::uint32_t* signalingFlags, RoundingMode roundMo Decimal128 Decimal128::cosh(RoundingMode roundMode) const { std::uint32_t throwAwayFlag = 0; - return cosh(&throwAwayFlag); + return cosh(&throwAwayFlag, roundMode); } Decimal128 Decimal128::cosh(std::uint32_t* signalingFlags, RoundingMode roundMode) const { @@ -416,7 +416,7 @@ Decimal128 Decimal128::cosh(std::uint32_t* signalingFlags, RoundingMode roundMod Decimal128 Decimal128::cos(RoundingMode roundMode) const { std::uint32_t throwAwayFlag = 0; - return cos(&throwAwayFlag); + return cos(&throwAwayFlag, roundMode); } Decimal128 Decimal128::cos(std::uint32_t* signalingFlags, RoundingMode roundMode) const { @@ -529,7 +529,7 @@ double Decimal128::toDouble(std::uint32_t* signalingFlags, RoundingMode roundMod Decimal128 Decimal128::sin(RoundingMode roundMode) const { std::uint32_t throwAwayFlag = 0; - return sin(&throwAwayFlag); + return sin(&throwAwayFlag, roundMode); } Decimal128 Decimal128::sin(std::uint32_t* signalingFlags, RoundingMode roundMode) const { @@ -540,7 +540,7 @@ Decimal128 Decimal128::sin(std::uint32_t* signalingFlags, RoundingMode roundMode Decimal128 Decimal128::sinh(RoundingMode roundMode) const { std::uint32_t throwAwayFlag = 0; - return sinh(&throwAwayFlag); + return sinh(&throwAwayFlag, roundMode); } Decimal128 Decimal128::sinh(std::uint32_t* signalingFlags, RoundingMode roundMode) const { @@ -617,7 +617,7 @@ std::string Decimal128::toString() const { Decimal128 Decimal128::tanh(RoundingMode roundMode) const { std::uint32_t throwAwayFlag = 0; - return tanh(&throwAwayFlag); + return tanh(&throwAwayFlag, roundMode); } Decimal128 Decimal128::tanh(std::uint32_t* signalingFlags, RoundingMode roundMode) const { @@ -628,7 +628,7 @@ Decimal128 Decimal128::tanh(std::uint32_t* signalingFlags, RoundingMode roundMod Decimal128 Decimal128::tan(RoundingMode roundMode) const { std::uint32_t throwAwayFlag = 0; - return tan(&throwAwayFlag); + return tan(&throwAwayFlag, roundMode); } Decimal128 Decimal128::tan(std::uint32_t* signalingFlags, RoundingMode roundMode) const { @@ -773,7 +773,7 @@ Decimal128 Decimal128::divide(const Decimal128& other, Decimal128 Decimal128::exponential(RoundingMode roundMode) const { std::uint32_t throwAwayFlag = 0; - return exponential(&throwAwayFlag); + return exponential(&throwAwayFlag, roundMode); } Decimal128 Decimal128::exponential(std::uint32_t* signalingFlags, RoundingMode roundMode) const { @@ -784,7 +784,7 @@ Decimal128 Decimal128::exponential(std::uint32_t* signalingFlags, RoundingMode r Decimal128 Decimal128::logarithm(RoundingMode roundMode) const { std::uint32_t throwAwayFlag = 0; - return logarithm(&throwAwayFlag); + return logarithm(&throwAwayFlag, roundMode); } Decimal128 Decimal128::logarithm(std::uint32_t* signalingFlags, RoundingMode roundMode) const { @@ -887,7 +887,7 @@ Decimal128 Decimal128::quantize(const Decimal128& reference, Decimal128 Decimal128::squareRoot(RoundingMode roundMode) const { std::uint32_t throwAwayFlag = 0; - return exponential(&throwAwayFlag); + return squareRoot(&throwAwayFlag, roundMode); } Decimal128 Decimal128::squareRoot(std::uint32_t* signalingFlags, RoundingMode roundMode) const { diff --git a/src/mongo/platform/decimal128_test.cpp b/src/mongo/platform/decimal128_test.cpp index 53c415365a3..dfce92f4fb8 100644 --- a/src/mongo/platform/decimal128_test.cpp +++ b/src/mongo/platform/decimal128_test.cpp @@ -1413,6 +1413,30 @@ void assertDecimal128ExactlyEqual(Decimal128 x, Decimal128 y) { ASSERT_EQUALS(x.getValue().low64, y.getValue().low64); } +TEST(Decimal128Test, TestExp) { + assertDecimal128ApproxEqual(Decimal128("-1").exponential(), + Decimal128("0.3678794411714423215955237701614609")); + assertDecimal128ApproxEqual(Decimal128("0").exponential(), Decimal128("1")); + assertDecimal128ApproxEqual(Decimal128("1").exponential(), + Decimal128("2.718281828459045235360287471352662")); + assertDecimal128ApproxEqual(Decimal128("1.5").exponential(), + Decimal128("4.481689070338064822602055460119276")); + assertDecimal128ApproxEqual(Decimal128("1.79769313486231E+308") + .exponential(Decimal128::RoundingMode::kRoundTowardNegative), + Decimal128("9.999999999999999999999999999999999E+6144")); +} + +TEST(Decimal128Test, TestSqrt) { + assertDecimal128ApproxEqual(Decimal128("0").squareRoot(), Decimal128("0")); + assertDecimal128ApproxEqual(Decimal128("1").squareRoot(), Decimal128("1")); + assertDecimal128ApproxEqual(Decimal128("25").squareRoot(), Decimal128("5")); + assertDecimal128ApproxEqual(Decimal128("25.5").squareRoot(), + Decimal128("5.049752469181038976681692958534800")); + assertDecimal128ApproxEqual(Decimal128("1.79769313486231E+308") + .squareRoot(Decimal128::RoundingMode::kRoundTowardNegative), + Decimal128("1.340780792994257506864497209340836E+154")); +} + TEST(Decimal128Test, TestAsin) { assertDecimal128ApproxEqual(Decimal128("-1.0").asin(), Decimal128("-1.57079632679")); assertDecimal128ApproxEqual(Decimal128("-0.9").asin(), Decimal128("-1.119769515")); |