为什么双重类型返回Infinity?

Lal*_*mar 2 c++

我在C++中创建此代码只是为了检查最大的整数int数据类型可以存储.

#include<iostream>
using namespace std;
int main() {
    int a, b;
    cin >> a;
    b = a;
    for(int c; a > 1; a = a * b)
        cout << a << "\n";
};
Run Code Online (Sandbox Code Playgroud)

当我在下面的代码中输入2时,打印的最大整数是1073741824.

我将代码更改为:

#include<iostream>

using namespace std;

double main() {
    double a, b;
    cin >> a;
    b = a;
    for(double c; a > 1; a = a * b)
        cout << a << "\n";
};
Run Code Online (Sandbox Code Playgroud)

第二个代码的输出从2快速打印到无限远.为什么代码不会停止在double的最大值?为什么它会在之前的代码中停止?

Bat*_*eba 5

溢出的行为int未定义的.因此,无法阐明可以存储的最大可能值int.因此,我们必须依赖您的平台将为您提供的常量:std::numeric_limits<int>::max()是最大的值int.

对于这种double情况,从技术上讲,行为也是未定义的.虽然如果你的平台实现IEEE754,那么+ Inf最终将通过重复乘以足够大的值来实现; 略超过1 1.最大double的不是+Inf您的平台支持的std::numeric_limits<double>::max().

最后,main不允许返回除了之外的任何内容int.你的编译器没有警告过你吗?


1 "一点点"的实际价值是std::numeric<double>::epsilon().Acknowledge @YSC.