看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《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)
sjgau:a*b must <= MAX_INT, SO MAX_INT/b must >= a, x.6g;4 04/05 22:09
FAITHY:也是可以 不過老師要連加法 而且不知道有沒限定ab型態 04/05 23:14
FAITHY:b如果是小數會不會在導致overflow 我也不清楚><" 04/05 23:16
nedbob:a = a-b+b 若不相同則溢位 我不確定這想法對不對 04/06 00:47
nedbob:打錯 應該是 a = a+b-b 若ab都為正 04/06 00:48
maydayai:抱歉沒說 有限制兩個都是正整數 04/06 01:38
LPH66:五樓的想法不對 因為 a+b 溢位後 -b 會不會再度溢位很難說 04/06 06:39
LPH66:(沒記錯的話 C 語言標準裡的規定是 04/06 06:40
LPH66: 溢位後的結果是 implementation defined) 04/06 06:41
LPH66:退一步說 在常見的實作上 a+b-b 後會再度溢位回來 04/06 06:42
LPH66:結果沒弄錯的話應該會變成 a 04/06 06:42