1
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 之类的,我需要包含任何头文件吗?

4

2 回答 2

4

最大和最小的双精度类型都有常数,但由于x是双精度类型,x 不能大于或小于这些值!如果您希望将输入值与这些限制进行比较,您需要自己解析字符串并检查是否溢出。

于 2010-05-18T03:00:50.607 回答
4

标头<cfloat>等效于 C 标头,<float.h>其中包含许多其他内容。整数限制(在 C 中)保存在.DBL_MINDBL_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
于 2010-05-18T03:29:20.583 回答