指令不能正确进入并移出整型范围的指令数

Number of instructions not comming correctly and moving out of int range

本文关键字:指令 整型 范围 移出 不能      更新时间:2023-10-16

我是一个编程和计算新手。

我正在运行一个基于c++的程序,在这台机器上大约需要6个小时。我使用我工作的框架的计时工具。

我试着通过一个简单的程序来计算嵌套循环的总迭代次数:

{
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;
}

在数学上,我希望它与1.9360889031 × 10^10的值一致,这是2元素子集的总数。我插入cout语句是想看看是否发生了什么有趣的事情,结果确实发生了。

  1. 输出超过数学期望值。我算错了吗?
  2. 输出在一段时间后变为负值,因为它超出了int范围,但它不应该。

在我手动中断

的末尾的示例输出
Number of Instructions: -2078590001
 Number of Instructions: -2078580001
 Number of Instructions: -2078570001
 Number of Instructions: -2078560001

我发现Int的范围是2147483647,但是我做了计算,得出的结论是我的k永远不会超过这个极限。那么问题在哪里呢?

数学上我希望它与1.9360889031 × 10^10的值一致

1.9360889031 × 10^10(19,360,889,031)大于2,147,483,647,int所能表示的最大值(至少在你的编译器上)。

当它超出int范围时,输出在一段时间后变为负值,但它不应该。

您可以使用unsigned int,当计算产生的值太大而无法表示(或负值)时,它会正确地"滚动"。当你的int溢出时,你会得到未定义行为