#include <iostream>
int main(){
std::cout<<1000000000000000*56687463565256476;
return 0;
}
上述程序的输出显示错误的答案。我怎样才能得到正确的答案?
答案 0 :(得分:3)
乘法的操作数是整数类型。由于您没有在操作数上提供后缀,因此编译器将尝试将它们强制转换为int
,如果失败,则为long int
。使用C ++ 11,它还会尝试强制转换为long long int
。因此,在C ++ 11之前,您的程序行为可能在此时未定义,但是对于C ++ 11,两个操作数都可以表示为long long int
,因为必须至少为64位
所以问题要么是因为你的系统没有足够大的整数类型来表示该产品(可能在编译时进行评估)。所以你的程序行为是未定义的。
如果你将其中一个参数提升为浮点数,那么输出将处于浮点状态,尽管相关的精度损失(通常约为15个有效数字)。
请查看std::numeric_limits
了解详情。