我是编程和计算的新手。指令数目不正确并且移出int范围
我正在运行一个基于C++的程序,在这台机器上需要大约6个小时。我用的是framework我在工作的时间安排效用
我想通过一个简单的程序来计算我的嵌套循环的迭代总数:
{
int k=0;
for (int i = 0; i < 196779; i++)
for (int j= i+1; j< 196779; j++)
{
k++;
if((k+1)%10000 == 0)
cout<< "\n Number of Instructions: " << k;
}
cout<< "\n Total Number of iterations = " << k << endl;
}
数学我就指望它agree with值1.9360889031 ×10^10,这是2元素子集的总数。我插入了这条语句,看看是否有趣的事情发生了,事实上的确如此。
- 输电超过数学预期值。我的计算错了吗?
- 输出在一段时间后变为负值,因为它超出了整数范围,但它不应该。在结束
样品输出,其中我手动打破
Number of Instructions: -2078590001
Number of Instructions: -2078580001
Number of Instructions: -2078570001
Number of Instructions: -2078560001
我发现Int的范围是2147483647,但是我做了计算,并得出结论,我ķ不应超过极限。那么问题在哪里?
要扩展数字变量的范围,请将其从“int”更改为“unsigned int”。 'unsigned'表示该数字永远不会为负数,因此可以使用该额外容量来存储更高的正值。如果你需要一个更大的数字并且你的编译器支持它,你可以使用'unsigned long long',通常(至少)是64位。您可以在这里查看整数类型的常见限制:http://en.wikipedia.org/wiki/Limits.h –
我想我明白了。整数范围将近2 * 10^9,而我的数字要高一个数量级。 – yayu