源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

深入分析C++中两个大数相乘结果不正确的问题

  • 时间:2021-06-23 15:17 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:深入分析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; } [b]经过测试发现temp1与temp2并不相等。 [/b]但是修改为如下代码: #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; } [b]经过测试发现temp1与temp2并相等。 [/b]分析原因:     1345172428和1000000都是当做int型来处理的,他们相乘的结果也是当做int型,只是乘积会被强制转换成time_t,但是在求乘积的时候就已经溢出了,所以在转换成time_t也是错的。 结论:     在大数乘法时需要考虑乘积溢出问题。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部