为什么两个大数字相乘会显示错误答案?

时间:2015-06-01 17:45:24

标签: c++

#include <iostream>
int main(){
   std::cout<<1000000000000000*56687463565256476;
   return 0;
}

上述程序的输出显示错误的答案。我怎样才能得到正确的答案?

1 个答案:

答案 0 :(得分:3)

乘法的操作数是整数类型。由于您没有在操作数上提供后缀,因此编译器将尝试将它们强制转换为int,如果失败,则为long int。使用C ++ 11,它还会尝试强制转换为long long int。因此,在C ++ 11之前,您的程序行为可能在此时未定义,但是对于C ++ 11,两个操作数都可以表示为long long int,因为必须至少为64位

所以问题要么是因为你的系统没有足够大的整数类型来表示该产品(可能在编译时进行评估)。所以你的程序行为是未定义的。

如果你将其中一个参数提升为浮点数,那么输出将处于浮点状态,尽管相关的精度损失(通常约为15个有效数字)。

请查看std::numeric_limits了解详情。