Re: [問題] 判別溢位

看板C_and_CPP作者 ( )時間15年前 (2010/04/05 21:51), 編輯推噓4(407)
留言11則, 5人參與, 最新討論串5/5 (看更多)
※ 引述《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)

04/05 22:09, , 1F
a*b must <= MAX_INT, SO MAX_INT/b must >= a, x.6g;4
04/05 22:09, 1F

04/05 23:14, , 2F
也是可以 不過老師要連加法 而且不知道有沒限定ab型態
04/05 23:14, 2F

04/05 23:16, , 3F
b如果是小數會不會在導致overflow 我也不清楚><"
04/05 23:16, 3F

04/06 00:47, , 4F
a = a-b+b 若不相同則溢位 我不確定這想法對不對
04/06 00:47, 4F

04/06 00:48, , 5F
打錯 應該是 a = a+b-b 若ab都為正
04/06 00:48, 5F

04/06 01:38, , 6F
抱歉沒說 有限制兩個都是正整數
04/06 01:38, 6F

04/06 06:39, , 7F
五樓的想法不對 因為 a+b 溢位後 -b 會不會再度溢位很難說
04/06 06:39, 7F

04/06 06:40, , 8F
(沒記錯的話 C 語言標準裡的規定是
04/06 06:40, 8F

04/06 06:41, , 9F
溢位後的結果是 implementation defined)
04/06 06:41, 9F

04/06 06:42, , 10F
退一步說 在常見的實作上 a+b-b 後會再度溢位回來
04/06 06:42, 10F

04/06 06:42, , 11F
結果沒弄錯的話應該會變成 a
04/06 06:42, 11F
文章代碼(AID): #1BkUh5tV (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1BkUh5tV (C_and_CPP)