在編寫代碼做測試時發現兩個大數相乘結果不正確的問題,今天武林技術小編就給各位深入剖析C++中兩個大數相乘的結果不正確,測試代碼如下:
#include "stdafx.h"
#include
#include
int _tmain(int argc, _TCHAR* argv[])
{?
??? time_t temp1=1345172428000000;
??? time_t temp2=1345172428*1000000;
?? ::system("pause");
??? return 0;
}
經過測試發現temp1與temp2并不相等。
但是修改為如下代碼:
#include "stdafx.h"
#include
#include
int _tmain(int argc, _TCHAR* argv[])
{
??? time_t temp1=1345172428000000;
??? time_t temp3=1345172428;
??? time_t temp4=1000000;
??? time_t temp2=temp3*temp4;
??? ::system("pause");
??? return 0;
}
經過測試發現temp1與temp2并相等。
分析原因:
??? 1345172428和1000000都是當做int型來處理的,他們相乘的結果也是當做int型,只是乘積會被強制轉換成time_t,但是在求乘積的時候就已經溢出了,所以在轉換成time_t也是錯的。
結論:
??? 在大數乘法時需要考慮乘積溢出問題。
以上就是深入剖析C++中兩個大數相乘的結果不正確的問題,如果大家想了解更多相關內容,請持續關注本站。
新聞熱點
疑難解答
圖片精選