diff --git a/src/sql/engine/expr/ob_expr_sqrt.cpp b/src/sql/engine/expr/ob_expr_sqrt.cpp index 9c646fd1577b8b31763d20fe14d96cca60434860..d2546f6a799c33f4ab1538786baa320c509fb6b6 100644 --- a/src/sql/engine/expr/ob_expr_sqrt.cpp +++ b/src/sql/engine/expr/ob_expr_sqrt.cpp @@ -74,7 +74,7 @@ int ObExprSqrt::calc_result1(ObObj& result, const ObObj& obj, ObExprCtx& expr_ct double value = obj.get_double(); if (value < 0) { ret = OB_ERR_ARGUMENT_OUT_OF_RANGE; - } else if (value == -0) { + } else if (std::fpclassify(value) == FP_ZERO) { result.set_double(-0); } else { result.set_double(sqrt(value)); @@ -83,7 +83,7 @@ int ObExprSqrt::calc_result1(ObObj& result, const ObObj& obj, ObExprCtx& expr_ct float value = obj.get_float(); if (value < 0) { ret = OB_ERR_ARGUMENT_OUT_OF_RANGE; - } else if (value == -0) { + } else if (std::fpclassify(value) == FP_ZERO) { result.set_float(-0); } else { result.set_float(sqrtf(value));