2017-08-30 34 views
1

我已實現了以下功能,用於檢測是否進行了乘法溢出:驗證乘法溢出測試

bool IsSafeMul(uint32_t x, uint32_t y) { 
    uint32_t z = x * y; 
    return (z >= x && z >= y); 
} 

我已經經驗證實,但想確保:

  1. 它是否100%保證正常工作(即沒有假陽性和假陰性)?
  2. 它是否100%保證能正確地爲其他unsigned類型工作?

謝謝。

+0

您也可以使用[Code Review](https://codereview.stackexchange.com/) – EsmaeelE

+0

[CERT介紹如何檢查溢出](https://stackoverflow.com/a/19920014/1708801)和[鏗鏘和海灣合作委員會已經建立,處理溢出](https://stackoverflow.com/a/32317442/1708801) –

回答

1

不,它不能保證正常工作。例如,

0x000FFFFF * 0x000FFFFF = 0xFFFFE00001 

它產生0xFFE00001後截斷到32位,它通過您的測試。但乘法溢出。

要測試乘法溢出,您可以簡單地檢查z/x == y,只要x不爲零。

+0

是的,這是我原來的實施,我試圖在這裏改進。謝謝!!! – goodvibration