Open jiaheni1127 opened 4 years ago
Hi, In
inline std::int32_t SaturatingRoundingDoublingHighMul(std::int32_t a, std::int32_t b) { bool overflow = a == b && a == std::numeric_limits<std::int32_t>::min(); std::int64_t a_64(a); std::int64_t b_64(b); std::int64_t ab_64 = a_64 * b_64; std::int32_t nudge = ab_64 >= 0 ? (1 << 30) : (1 - (1 << 30)); std::int32_t ab_x2_high32 = static_cast<std::int32_t>((ab_64 + nudge) / (1ll << 31)); return overflow ? std::numeric_limits<std::int32_t>::max() : ab_x2_high32; }
it seemed this function is computing a * b i wondered what is the relationship between _ab_x2high32 and _ab64. Could you explain how is _ab_x2high32 computed?
Thank you!
Hi, In
it seemed this function is computing a * b i wondered what is the relationship between _ab_x2high32 and _ab64. Could you explain how is _ab_x2high32 computed?
Thank you!