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.
答案 0 :(得分:0)
我假设您的语句Q
是十进制的,这涉及浮点运算而不是整数运算。
如果由于某种原因无法使用对数,则较慢的方法是计算值等于a_i + b_i
的浮点值。如果s
为正数,则只需将该值s
除以2
(在循环中)。如果s
为负数,则乘以而不是除数。
对于任意a_i
和b_i
,您仍有发生溢出(s
为负)或下溢(s
为正)的风险,并且需要管理那。但是,您声称有保证并非如此.....