程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> C語言基礎知識 >> 深入分析C++中兩個大數相乘結果不正確的問題

深入分析C++中兩個大數相乘結果不正確的問題

編輯:C語言基礎知識
在編寫代碼做測試時發現兩個大數相乘結果不正確的問題,測試代碼如下:
#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;
}
經過測試發現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;
}
經過測試發現temp1與temp2並相等。
分析原因:
    1345172428和1000000都是當做int型來處理的,他們相乘的結果也是當做int型,只是乘積會被強制轉換成time_t,但是在求乘積的時候就已經溢出了,所以在轉換成time_t也是錯的。
結論:
    在大數乘法時需要考慮乘積溢出問題。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved