Есть ли лучший способ проверить, больше ли значение, чем тип double? - PullRequest
1 голос
/ 18 мая 2010
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 ]

4 голосов
/ 18 мая 2010

Заголовок <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
4 голосов
/ 18 мая 2010

Существуют константы для самого большого и самого маленького двойных типов, но поскольку x имеет тип double, x не может быть больше или меньше этих значений! Если вы хотите сравнить введенное значение с этими пределами, вам нужно самостоятельно проанализировать строку и проверить ее на переполнение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...