Как проверить наличие inf (и | или) NaN в переменной типа double

Рассмотрим следующий код:

#include <iostream>
#include <cstdio>
#include <cstring>

using namespace std;

template<class T>
bool IsNaN(T t)
{
    return t != t;
}

int main(int argc, char**argv)
{
    double d1, d2;
    sscanf(argv[1], "%f", &d1);
    sscanf(argv[2], "%f", &d2);

    double dRes = d1/d2;

    cout << "dRes = " << dRes << "\n";

    if(IsNaN(dRes))
        cout << "Is NaN\n";
    else
        cout << "Not NaN\n";

}

Пара вопросов:

  1. Когда я передаю 0 и 0 в качестве аргументов, он выводит dRes = inf . Но я ожидал dRes = NaN или что-то в этом роде.
  2. Представляется ли NaN в переменных типа double? Если на то пошло, любая переменная?
  3. Когда я изменил тип данных d1, d2, dRes на int и передал 0 и 0, я получил исключение с плавающей запятой . В чем разница?
  4. Как проверить, равно ли значение переменной inf ?
20
задан nakiya 4 November 2010 в 09:35
поделиться