我在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的最大值?为什么它会在之前的代码中停止?
溢出的行为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.