e******o 发帖数: 757 | 1 比如要计算
1*2*3*...*n;
如何在要溢出之前停止计算。
难道一定要先把计算结果弄成double.
好像 string to integer的时候要考虑到这个问题 |
f*****e 发帖数: 2992 | 2 (x<<1) < 0 ?
【在 e******o 的大作中提到】 : 比如要计算 : 1*2*3*...*n; : 如何在要溢出之前停止计算。 : 难道一定要先把计算结果弄成double. : 好像 string to integer的时候要考虑到这个问题
|
e******o 发帖数: 757 | 3 不是吧,
比如一个3个比特的数
x=1;
x*8 = ‘100’ = -4; 这个就已经溢出了。
【在 f*****e 的大作中提到】 : (x<<1) < 0 ?
|
d**********x 发帖数: 4083 | 4 如果是INT
设M = INT_MAX
则 M / b < a ==> a * b 实际上 > M
证明如下: M / b < a ==> M / b <= a - 1 ==> M - M % b <= a * b - b
==> M <= a * b - b + M % b < a * b - b + b = a * b
反之,a * b > M ==> a > (doubld)M / b > M / b.
所以。。。
【在 e******o 的大作中提到】 : 比如要计算 : 1*2*3*...*n; : 如何在要溢出之前停止计算。 : 难道一定要先把计算结果弄成double. : 好像 string to integer的时候要考虑到这个问题
|
e******o 发帖数: 757 | 5 thanks。看来反推就行了。
【在 d**********x 的大作中提到】 : 如果是INT : 设M = INT_MAX : 则 M / b < a ==> a * b 实际上 > M : 证明如下: M / b < a ==> M / b <= a - 1 ==> M - M % b <= a * b - b : ==> M <= a * b - b + M % b < a * b - b + b = a * b : 反之,a * b > M ==> a > (doubld)M / b > M / b. : 所以。。。
|
d****o 发帖数: 1055 | 6 用long long,和INT_MAX还有INT_MIN比较
【在 e******o 的大作中提到】 : 比如要计算 : 1*2*3*...*n; : 如何在要溢出之前停止计算。 : 难道一定要先把计算结果弄成double. : 好像 string to integer的时候要考虑到这个问题
|