double x;
cin>>x;
if( x > 1.7976931348623157e+308 || x < -1.7976931348623157e+308 )
{
cout<<"value not in range"<<endl;
exit(1);
}
是否有 DOUBLE_MAX 或 DOUBLE_MIN 之类的,我需要包含任何头文件吗?
最大和最小的双精度类型都有常数,但由于x
是双精度类型,x 不能大于或小于这些值!如果您希望将输入值与这些限制进行比较,您需要自己解析字符串并检查是否溢出。
标头<cfloat>
等效于 C 标头,<float.h>
其中包含许多其他内容。整数限制(在 C 中)保存在.DBL_MIN
DBL_MAX
<limits.h>
<climits>
这在 C++0x 草案的 18.3.2 中有详细说明。但是,正如在别处指出的那样,无论如何,双精度数都不能保持超出此范围的值。您将不得不使用“更大”的类型,例如 long double (尽管根据标准,它可能与 double 大小相同,因此不一定有帮助)。
这是一个完整的示例程序供您欣赏:-)
#include <iostream>
#include <cfloat>
int main (void) {
long double bignum;
std::cout << "Enter number: ";
std::cin >> bignum;
if ((bignum > (long double)DBL_MAX) || (bignum < (long double)DBL_MIN)) {
std::cout << "Value not in range" << std::endl;
} else {
double x = bignum;
std::cout << "Number was " << x << std::endl;
}
return 0;
}
附带成绩单:
$ ./qq.exe
Enter number: 1.7976931348623157e+308
Number was 1.79769e+308
$ ./qq.exe
Enter number: 1.7976931348623158e+308
Value not in range