有没有更好的方法来检查值是否大于double类型?

时间:2010-05-18 02:56:13

标签: c++ double max minimum

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,我是否需要包含任何头文件?

2 个答案:

答案 0 :(得分:4)

最大和最小的double类型有常量,但由于x的类型为double,因此x不能大于或小于这些值!如果您希望将输入值与这些限制进行比较,则需要自己解析字符串并检查溢出。

答案 1 :(得分:4)

标头<cfloat>等同于C标头<float.h>,并且包含DBL_MINDBL_MAX等许多内容。整数限制(C中的<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