C++ 给出大量奇怪的答案(afaik 不会溢出)

标签 c++ numbers

我正在编写一个小程序来比较 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;
}

100 000 返回正确答案,但高于 1000 0000 则不会。任何人都知道发生了什么事?我无法想象问题会溢出,因为涉及的数字根本没有那么大(正确答案是 5e9)。

最佳答案

问题是溢出。 5e9 是 5'000'000'000,但是 32 位有符号整数(在 32 位平台上为长整数,在 64 位 Windows 上为长;在 64 位 Linux 上为 64 位)可以容纳的最大数字是 2' 147'483'648。

关于C++ 给出大量奇怪的答案(afaik 不会溢出),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30413746/

相关文章:

c++ - 尝试使用 for 循环输出 10 行

c++ - 如何设置在 Windows 登录屏幕上打开应用程序的按钮

c++ - 为什么静态成员函数_declared_是静态的,而在C++中却是_defined_?

javascript - 考虑数字位数的增量字符串 (0, 1, 2, ..., 9, 00, 01)

javascript - 如何将二进制数转换为八进制数?

c++ - 仅计算 "core"QImage 数据(不包括元数据)的 QCryptographicHash

c++ - 在派生类中使用基类 typedef

javascript - 使用 javascript 解决数字键盘难题

java - 使用标识符 "long"时得到负值/错误值

java - JComboBox 列出年龄