Como verificar inf (e | ou) NaN em uma variável dupla

Considere o seguinte código:

#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";

}

Algumas perguntas:

Quando passo 0 e 0 como argumentos, ele geradRes = inf. Mas eu estava esperandodRes = NaN ou algo assim.NaN é representável em variáveis duplas? Para esse assunto, alguma variável?Quando alterei o tipo de dados d1, d2, dRes para int e passei 0 e 0, obtive umFloating exception. Qual é a diferença?Como verificar se o valor de uma variável é igual ainf?

questionAnswers(3)

yourAnswerToTheQuestion