utils: big_decimal: optimize big_decimal::compare()
before this change in the worst case, the underlying `number::compare()` gets called twice. as it is used by Boost::multiprecision to implement the comparing operators of `number`. but since we can have the result in one go, there is no need to to perform the comparison multiple times. so, in this change, we just call `number::compare()` explicitly, and use it to implement `compare()`. this should save a call of `number::compare()`. also, the chained ternary expression is replaced using if-else statement for better readability. Signed-off-by: Kefu Chai <kefu.chai@scylladb.com>
This commit is contained in:
@@ -141,7 +141,7 @@ std::strong_ordering big_decimal::compare(const big_decimal& other) const
|
||||
boost::multiprecision::cpp_int rescale(10);
|
||||
boost::multiprecision::cpp_int x = _unscaled_value * boost::multiprecision::pow(rescale, max_scale - _scale);
|
||||
boost::multiprecision::cpp_int y = other._unscaled_value * boost::multiprecision::pow(rescale, max_scale - other._scale);
|
||||
return x == y ? std::strong_ordering::equal : x < y ? std::strong_ordering::less : std::strong_ordering::greater;
|
||||
return x.compare(y) <=> 0;
|
||||
}
|
||||
|
||||
big_decimal& big_decimal::operator+=(const big_decimal& other)
|
||||
|
||||
Reference in New Issue
Block a user