指令不能正确进入并移出整型范围的指令数
Number of instructions not comming correctly and moving out of int range
我是一个编程和计算新手。
我正在运行一个基于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语句是想看看是否发生了什么有趣的事情,结果确实发生了。
- 输出超过数学期望值。我算错了吗?
- 输出在一段时间后变为负值,因为它超出了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
溢出时,你会得到未定义行为
相关文章:
- C 字符串返回字符串的整数/双精度/长整型值
- 是什么导致了这种使用三进制而不是短整型的有符号int到无符号int转换
- 无法在 Arduino 中uint8_t数组转换为无符号长整型数组
- JNI 日期值转换问题,在C++中获取不同的长整型值
- 将长整型值打印为带有前导零的十六进制
- 为什么在传递长整型时调用具有两个双精度类型的参数的重载函数?
- 将整型常量映射到类型
- 将元组和整型实例合并到引用元组中
- 提升不良词法强制转换:将字符串转换为无符号长整型时,无法将源类型值解释为目标
- 为什么C++不允许两个同名的函数/类模板,区别仅在于非类型模板参数(整型)的类型?
- 将最小值整数转换为无符号长整型
- 如何将小端格式的QByteArray转换为无符号长整型
- 直接初始化无符号短整型的标准行为
- 无符号长整型和无符号 int 之间有什么区别,这 2 种类型应该如何在 c# 中封送?
- 无符号和有符号短整型的位宽
- 将整型转换为浮点型时检测溢出
- 环礁和(长整型)的区别?
- 为什么允许将整型、枚举和指向成员的指针类型reinterpret_cast到自身?
- 如何使用 avx 指令将浮点数向量转换为短整型?
- 指令不能正确进入并移出整型范围的指令数