使用pow()进行除法溢出

Division overflow using pow()

本文关键字:除法 溢出 pow 使用      更新时间:2023-10-16
Q = (a_i + b_i) / (2^s)
-10^10 ≤ s ≤ 10^10
1 ≤ a_i, b_i ≤ 10^9
It is guaranteed that -10^10 ≤ Q ≤  10^10.
Here s,a_i,b_i are integers and Q is a decimal no.

在计算Q时,由于2^s的值太大,导致溢出。我用pow(2,s)来计算2^s。我如何计算Q,给定语句中Q的取值范围。

根据您的陈述,我假设Q是十进制,这涉及浮点运算而不是整数运算。

如果由于某种原因不能使用对数,较慢的方法是计算一个值等于a_i + b_i的浮点值。如果s为正,只需将该值s乘以2(在一个循环中)。如果s为负,则乘而不是除。

对于任意a_ib_i,您仍然有溢出(当s为负)或下溢(s为正)的风险,并且需要管理它。但是,您声称有保证情况并非如此.....