深入分析C++中兩個大數相乘結果不正確的問題
更新時間:2013年05月16日 11:36:44 作者:
本篇文章是對C++中兩個大數相乘結果不正確的問題進行了詳細的分析介紹,需要的朋友參考下
在編寫代碼做測試時發(fā)現兩個大數相乘結果不正確的問題,測試代碼如下:
#include "stdafx.h"
#include<stdlib.h>
#include<time.h>
int _tmain(int argc, _TCHAR* argv[])
{
time_t temp1=1345172428000000;
time_t temp2=1345172428*1000000;
::system("pause");
return 0;
}
經過測試發(fā)現temp1與temp2并不相等。
但是修改為如下代碼:
#include "stdafx.h"
#include<stdlib.h>
#include<time.h>
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;
}
經過測試發(fā)現temp1與temp2并相等。
分析原因:
1345172428和1000000都是當做int型來處理的,他們相乘的結果也是當做int型,只是乘積會被強制轉換成time_t,但是在求乘積的時候就已經溢出了,所以在轉換成time_t也是錯的。
結論:
在大數乘法時需要考慮乘積溢出問題。
#include "stdafx.h"
#include<stdlib.h>
#include<time.h>
int _tmain(int argc, _TCHAR* argv[])
{
time_t temp1=1345172428000000;
time_t temp2=1345172428*1000000;
::system("pause");
return 0;
}
經過測試發(fā)現temp1與temp2并不相等。
但是修改為如下代碼:
#include "stdafx.h"
#include<stdlib.h>
#include<time.h>
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;
}
經過測試發(fā)現temp1與temp2并相等。
分析原因:
1345172428和1000000都是當做int型來處理的,他們相乘的結果也是當做int型,只是乘積會被強制轉換成time_t,但是在求乘積的時候就已經溢出了,所以在轉換成time_t也是錯的。
結論:
在大數乘法時需要考慮乘積溢出問題。
相關文章
文件編譯時出現multiple definition of ''xxxxxx''的具體解決方法
以下是對文件編譯時出現multiple definition of 'xxxxxx'的解決方法進行了詳細的分析介紹,如也遇到此問題的朋友們可以過來參考下2013-07-07
C++ boost::asio編程-同步TCP詳解及實例代碼
這篇文章主要介紹了C++ boost::asio編程-同步TCP詳解及實例代碼的相關資料,需要的朋友可以參考下2016-11-11

