看板 C_and_CPP 關於我們 聯絡資訊
原PO是C++新手 最近老師出了個問題 是要判別溢位的 ab相乘結果若溢位 顯示的結果就會是錯的 EX: 2147483647*2 會等於 4 目的要我寫程式在發生溢位之前先預知可能會發生溢位 那有什麼方法可以預知嗎? 謝謝~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.223.194.219
Sany:try catch? 04/03 22:30
※ 編輯: maydayai 來自: 61.223.194.219 (04/03 22:32)
F23ko:try catch好像不會抓溢位喔.... 04/03 22:32
rephansu:取最高位元加一加就知道... 04/03 22:41
nowar100:我記得C/C++不管溢位 要自己寫判斷式去抓吧 04/03 22:42
ogamenewbie:用型態的最大值反推算後跟左側的比大小? (亂猜 04/03 22:42
rephansu:我想錯了... 04/03 22:57
AstralBrain:把它cast成long long算 04/03 23:03
對了 他要我們不用*去寫相乘 而是用連加去寫相乘 不曉得這資訊有沒有幫助 有個想法是當快要加到溢位的時候 最接近的那個值跟溢位值相差小於下一次要加上的值 那就停止 (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)
Yshuan:原po都有想法了 程式一定寫得出來阿~ 感覺這練習不錯~ 04/03 23:46
maydayai:我才剛學不到一個月= = 寫不出來阿~ˊˋ 04/03 23:47
Yshuan:c=a*b| for(i=0,c=0;i<a;i++){ c+=b; if(OVER-c>b) break;} 04/03 23:51
hilorrk:可以參考硬體的overflow和carry的作法...判斷高位元 04/03 23:54
hilorrk:我想要求用連加的方法來算乘法也是為了如此 04/03 23:54
rephansu:用2位元運算的話要看最高兩位才可以完全預測 04/03 23:59
maydayai:謝謝Y大的程式碼 不過以我目前程度可能要研究好一陣子= = 04/04 00:00
andyjy12:logA+logB >MAX ->break; 04/04 17:42
suhorng:那為什麼不一開始就先用除法判斷 ? 04/04 18:33
maydayai:除法???@@ 04/04 20:04
FAITHY:推andyjy12的方法 04/04 21:37
FAITHY:andyjy12的方法簡單兩三行程式碼就解決了 不過老師說要用 04/04 21:39
FAITHY:連加法 是把A.B轉為二位數 做乘法法運算並allocate陣列作 04/04 21:41
FAITHY:值得相加 04/04 21:42
pico2k:寫asm去檢查溢位flag比較快... 04/04 23:06