作者suhorng ( )
看板C_and_CPP
标题Re: [问题] 判别溢位
时间Mon Apr 5 21:50:59 2010
※ 引述《maydayai ()》之铭言:
: 原PO是C++新手
: 最近老师出了个问题
: 是要判别溢位的
: ab相乘结果若溢位
: 目的要我写程式在发生溢位之前先预知可能会发生溢位
(啊, 先不考虑负数好了XD)
是要判断 a * b 有没有溢位吗 ?
我可能会选择这样判断:
if (MAX_INT/b < a) puts("Overflow!");
之类的~
因为整数除法刚好是无条件舍去 ^_^
所以如果 MAX_INT/b >= a 则 a*b 绝对不会溢位
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.122.45.114
※ 编辑: suhorng 来自: 140.122.45.114 (04/05 21:52)
1F:推 sjgau:a*b must <= MAX_INT, SO MAX_INT/b must >= a, x.6g;4 04/05 22:09
2F:→ FAITHY:也是可以 不过老师要连加法 而且不知道有没限定ab型态 04/05 23:14
3F:→ FAITHY:b如果是小数会不会在导致overflow 我也不清楚><" 04/05 23:16
4F:→ nedbob:a = a-b+b 若不相同则溢位 我不确定这想法对不对 04/06 00:47
5F:→ nedbob:打错 应该是 a = a+b-b 若ab都为正 04/06 00:48
6F:推 maydayai:抱歉没说 有限制两个都是正整数 04/06 01:38
7F:推 LPH66:五楼的想法不对 因为 a+b 溢位後 -b 会不会再度溢位很难说 04/06 06:39
8F:推 LPH66:(没记错的话 C 语言标准里的规定是 04/06 06:40
9F:→ LPH66: 溢位後的结果是 implementation defined) 04/06 06:41
10F:→ LPH66:退一步说 在常见的实作上 a+b-b 後会再度溢位回来 04/06 06:42
11F:→ LPH66:结果没弄错的话应该会变成 a 04/06 06:42