diff --git a/ts2panda/ts2abc/ts2abc.cpp b/ts2panda/ts2abc/ts2abc.cpp index 4f928f5185db6d9a9d446f765e6a90953afb2f25..0c8b4fd68b803bf5529ac4cd9a20beeb85e5e20c 100755 --- a/ts2panda/ts2abc/ts2abc.cpp +++ b/ts2panda/ts2abc/ts2abc.cpp @@ -12,6 +12,7 @@ * limitations under the License. */ +#include #include #include #include @@ -121,6 +122,11 @@ static bool IsValidInt32(double value) value >= static_cast(std::numeric_limits::min())); } +static bool EqualZero(double number) +{ + return abs(number - 0.0) < std::numeric_limits::epsilon(); +} + // Unified interface for debug log print static void Logd(const char *format, ...) { @@ -352,7 +358,7 @@ static void ParseInstructionImms(const Json::Value &ins, panda::pandasm::Ins &pa double imsValue = imms[i].asDouble(); Logd("imm: %lf ", imsValue); double intpart; - if (std::modf(imsValue, &intpart) == 0.0 && IsValidInt32(imsValue)) { + if (EqualZero(std::modf(imsValue, &intpart)) && IsValidInt32(imsValue)) { pandaIns.imms.emplace_back(static_cast(imsValue)); } else { pandaIns.imms.emplace_back(imsValue);