Fix nan comparison result of fixed double
This commit is contained in:
@ -459,13 +459,13 @@ int ObExprUtil::get_mb_str_info(const ObString &str,
|
||||
|
||||
double ObExprUtil::round_double(double val, int64_t dec)
|
||||
{
|
||||
const double pow_val = std::pow(10, static_cast<double>(std::abs(dec)));
|
||||
volatile double val_div_tmp = val / pow_val;
|
||||
volatile double val_mul_tmp = val * pow_val;
|
||||
volatile double res = 0.0;
|
||||
const double pow_val = std::pow(10.0, static_cast<double>(std::abs(dec)));
|
||||
double val_div_tmp = val / pow_val;
|
||||
double val_mul_tmp = val * pow_val;
|
||||
double res = 0.0;
|
||||
if (dec < 0 && std::isinf(pow_val)) {
|
||||
res = 0.0;
|
||||
} else if (dec >= 0 && std::isinf(val_mul_tmp)) {
|
||||
} else if (dec >= 0 && !std::isfinite(val_mul_tmp)) {
|
||||
res = val;
|
||||
} else {
|
||||
res = dec < 0 ? rint(val_div_tmp) * pow_val : rint(val_mul_tmp) / pow_val;
|
||||
@ -474,23 +474,6 @@ double ObExprUtil::round_double(double val, int64_t dec)
|
||||
return res;
|
||||
}
|
||||
|
||||
double ObExprUtil::round_double_nearest(double val, int64_t dec)
|
||||
{
|
||||
const double pow_val = std::pow(10, static_cast<double>(std::abs(dec)));
|
||||
volatile double val_div_tmp = val / pow_val;
|
||||
volatile double val_mul_tmp = val * pow_val;
|
||||
volatile double res = 0.0;
|
||||
if (dec < 0 && std::isinf(pow_val)) {
|
||||
res = 0.0;
|
||||
} else if (dec >= 0 && std::isinf(val_mul_tmp)) {
|
||||
res = val;
|
||||
} else {
|
||||
res = dec < 0 ? std::round(val_div_tmp) * pow_val : std::round(val_mul_tmp) / pow_val;
|
||||
}
|
||||
LOG_DEBUG("round double done", K(val), K(dec), K(res));
|
||||
return res;
|
||||
}
|
||||
|
||||
uint64_t ObExprUtil::round_uint64(uint64_t val, int64_t dec)
|
||||
{
|
||||
uint64_t res = 0;
|
||||
@ -524,7 +507,7 @@ double ObExprUtil::trunc_double(double val, int64_t dec)
|
||||
volatile double res = 0.0;
|
||||
if (dec < 0 && std::isinf(pow_val)) {
|
||||
res = 0.0;
|
||||
} else if (dec >= 0 && std::isinf(val_mul_tmp)) {
|
||||
} else if (dec >= 0 && !std::isfinite(val_mul_tmp)) {
|
||||
res = val;
|
||||
} else {
|
||||
if (val >= 0) {
|
||||
|
||||
Reference in New Issue
Block a user