作者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