long long sum;
sum=pow(10,19);
cout<<sum;
上面的 C++ 代码 给出了错误:
隐式常量转换溢出 [-Woverflow]
虽然以下代码运行良好:
long long sum;
sum=pow(10,18);
cout<<sum;
可能是什么问题?
原文由 mach 发布,翻译遵循 CC BY-SA 4.0 许可协议
long long sum;
sum=pow(10,19);
cout<<sum;
上面的 C++ 代码 给出了错误:
隐式常量转换溢出 [-Woverflow]
虽然以下代码运行良好:
long long sum;
sum=pow(10,18);
cout<<sum;
可能是什么问题?
原文由 mach 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答1.3k 阅读✓ 已解决
1 回答1.1k 阅读✓ 已解决
4 回答863 阅读
2 回答2.1k 阅读✓ 已解决
1 回答934 阅读
1 回答968 阅读
1 回答733 阅读
问题是
long long
太小而无法容纳pow(10,19)
的结果。long long
通常是 64 位,一个 64 位整数可以容纳大约。 1.8*10^19 个不同的值。然而,由于它是有符号的,你只能得到它的一半(另一半是负值)。其中一半是 0.9*10^19,显然小于 10^19。另一个问题(但不是警告/溢出的原因)是
pow()
函数返回一个浮点值。因此,即使结果适合long long
- 它不适合 - 您可能会失去一些精度并且无法获得确切的整数结果。编辑:当然,您可以使用
unsigned long long
代替这种情况。这对于 10 ^ 19 来说已经足够了,但对于 10 ^ 20 来说还不够。因此,当您使用不适合unsigned long long
的类似大数字时,您只是将问题推迟到以后。