使用pow()溢出分区

时间:2015-09-12 05:49:08

标签: c++ c floating-point numbers double

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.

1 个答案:

答案 0 :(得分:0)

我假设您的语句Q是十进制的,这涉及浮点运算而不是整数运算。

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

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