c++给出了奇怪的大数字答案(恐怕不是溢出)
C++ giving weird answers with large numbers (afaik not overflow)
我正在写一个小程序来比较CPP和Matlab之间的速度,我注意到在处理大数时我得到了错误的答案。
代码如下:
#include "stdafx.h"
#include <iostream>
#include "time.h"
int main()
{
clock_t t = clock();
long x = 1000000;
long sum = 0;
for (long i = 1;i <= x;i++) {
sum = sum + i;
}
t = clock() - t;
printf("It took %d ms, sum equals=",t);
std::cout << sum << std::endl;
return 0;
}
100000返回正确答案,但大于1000000则不返回。有人知道是怎么回事吗?我无法想象这个问题是溢出的,因为涉及的数字并不是那么大(正确答案是5e9)。
问题是溢出。5e9是5'000'000'000,但最大的32位有符号整数(在32位平台和64位Windows上都是长整数);
我给了你的程序一个测试运行,它返回了正确的答案(与wolfram alpha相比)。所以我要说,代码中没有错误。
编辑:在64位机器上运行,所以你可能会使用32位,并得到上面答案中告诉的溢出
相关文章:
- 欧拉项目#8答案是大以获得有效答案
- 首要问题的答案让值班员搞错了
- 'short int'持有的值溢出,但"自动"不会溢出?
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- 大于65535的C++数组[size]引发不一致的溢出
- 为什么我在leetcode上收到AddressSanitizer:地址0x602000000058上的堆缓冲区溢出错误
- C++中无符号字符溢出
- C++问题:用户认为数字1-100,程序提出问题不超过6次即可得到答案。无法正确
- 我试图制作一个程序,要求用户输入问题和答案,但程序循环不正确
- 使用 bfs 解决连接组件问题时得到错误的答案
- 在 leetcode 上提交解决方案时出现堆栈缓冲区溢出错误
- 我的 int main() 中出现堆栈溢出错误
- 整数溢出,最大值为 pow(10,19)
- 获取隐式转换溢出从无符号到已签名的警告
- 使用 strcat 获取缓冲区溢出错误
- LeetCode 1:两和 - 地址清理器:堆缓冲区溢出地址
- 同一对象的"sizeof"的不同答案
- 给定一个类型,如何派生一个泛型更广泛的类型(例如,用于溢出安全求和)?
- 较大值的答案溢出
- c++给出了奇怪的大数字答案(恐怕不是溢出)