Заголовок <cfloat>
эквивалентен заголовку C <float.h>
и содержит DBL_MIN
и DBL_MAX
и многие другие. Целочисленные пределы (<limits.h>
в C) содержатся в <climits>
.
Это подробно описано в 18.3.2 проекта C ++ 0x. Но, как указано в другом месте, двойник не может содержать значения вне этого диапазона в любом случае. Вы должны будете использовать «больший» тип, например 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