[問題] 判別溢位

看板C_and_CPP作者時間15年前 (2010/04/03 14:22), 編輯推噓9(9013)
留言22則, 13人參與, 最新討論串1/5 (看更多)
原PO是C++新手 最近老師出了個問題 是要判別溢位的 ab相乘結果若溢位 顯示的結果就會是錯的 EX: 2147483647*2 會等於 4 目的要我寫程式在發生溢位之前先預知可能會發生溢位 那有什麼方法可以預知嗎? 謝謝~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.223.194.219

04/03 22:30, , 1F
try catch?
04/03 22:30, 1F
※ 編輯: maydayai 來自: 61.223.194.219 (04/03 22:32)

04/03 22:32, , 2F
try catch好像不會抓溢位喔....
04/03 22:32, 2F

04/03 22:41, , 3F
取最高位元加一加就知道...
04/03 22:41, 3F

04/03 22:42, , 4F
我記得C/C++不管溢位 要自己寫判斷式去抓吧
04/03 22:42, 4F

04/03 22:42, , 5F
用型態的最大值反推算後跟左側的比大小? (亂猜
04/03 22:42, 5F

04/03 22:57, , 6F
我想錯了...
04/03 22:57, 6F

04/03 23:03, , 7F
把它cast成long long算
04/03 23:03, 7F
對了 他要我們不用*去寫相乘 而是用連加去寫相乘 不曉得這資訊有沒有幫助 有個想法是當快要加到溢位的時候 最接近的那個值跟溢位值相差小於下一次要加上的值 那就停止 (EX:29是溢位值 3*11=33溢位 那當3加9次變成27 29-27>3就停止) 不過以原PO的程度還不曉得該怎麼寫 ※ 編輯: maydayai 來自: 61.223.194.219 (04/03 23:38) ※ 編輯: maydayai 來自: 61.223.194.219 (04/03 23:41)

04/03 23:46, , 8F
原po都有想法了 程式一定寫得出來阿~ 感覺這練習不錯~
04/03 23:46, 8F

04/03 23:47, , 9F
我才剛學不到一個月= = 寫不出來阿~ˊˋ
04/03 23:47, 9F

04/03 23:51, , 10F
c=a*b| for(i=0,c=0;i<a;i++){ c+=b; if(OVER-c>b) break;}
04/03 23:51, 10F

04/03 23:54, , 11F
可以參考硬體的overflow和carry的作法...判斷高位元
04/03 23:54, 11F

04/03 23:54, , 12F
我想要求用連加的方法來算乘法也是為了如此
04/03 23:54, 12F

04/03 23:59, , 13F
用2位元運算的話要看最高兩位才可以完全預測
04/03 23:59, 13F

04/04 00:00, , 14F
謝謝Y大的程式碼 不過以我目前程度可能要研究好一陣子= =
04/04 00:00, 14F

04/04 17:42, , 15F
logA+logB >MAX ->break;
04/04 17:42, 15F

04/04 18:33, , 16F
那為什麼不一開始就先用除法判斷 ?
04/04 18:33, 16F

04/04 20:04, , 17F
除法???@@
04/04 20:04, 17F

04/04 21:37, , 18F
推andyjy12的方法
04/04 21:37, 18F

04/04 21:39, , 19F
andyjy12的方法簡單兩三行程式碼就解決了 不過老師說要用
04/04 21:39, 19F

04/04 21:41, , 20F
連加法 是把A.B轉為二位數 做乘法法運算並allocate陣列作
04/04 21:41, 20F

04/04 21:42, , 21F
值得相加
04/04 21:42, 21F

04/04 23:06, , 22F
寫asm去檢查溢位flag比較快...
04/04 23:06, 22F
文章代碼(AID): #1BjqyPRW (C_and_CPP)
討論串 (同標題文章)
以下文章回應了本文 (最舊先):
問題
4
11
問題
完整討論串 (本文為第 1 之 5 篇):
問題
4
11
問題
2
14
問題
問題
9
22
文章代碼(AID): #1BjqyPRW (C_and_CPP)