我正在處理的一些代碼讓我難堪。我似乎正在處理整數溢出,我承認我以前沒有遇到過,但我已經嘗試了幾件事情來解決它,並沒有一個工作到目前爲止。我使用的是MSVC++ 2010儘管類型足夠大,整數溢出?
相關的代碼非常簡單,如下:
int64_t numerator = cdfVal * (maxIntensity - 1);
這種失敗對我來說,其中cdfVal(這僅僅是從一個數組中讀取值的情況下,沒什麼特別)是8667003,maxIntensity - 1是255.一個簡單的計算表明解決方案應該是2210085765,而我得到的值是-2084881531。我知道這是一個整數溢出的情況,但我認爲64位將足夠大來保存結果。我切換到uint64_t,但在那種情況下,我得到了一個長度爲20位的結果,這顯然是不正確的! 我試過使用Boost的multiprecision整數,但也得到了類似的結果。
我覺得這是一件非常簡單的事情,我很想念。
什麼類型'cdfVal'和'maxIntensity'是誰? – 2014-09-03 18:18:58
兩者都只是普通的'int's。 – CommanderDJ 2014-09-03 18:20:16
'int' *'int' ='int' – 2014-09-03 18:21:31