Рассмотрим следующий код:
#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";
}
Пара вопросов:
- Когда я передаю 0 и 0 в качестве аргументов, выводится
dRes = inf
. Но я ожидал dRes = NaN
или что-то в этом роде.
- Представляется ли NaN двойными переменными? В этом отношении любая переменная?
- Когда я изменил тип данных d1, d2, dRes на int и передал 0 и 0, я получил
Floating exception
. В чем разница?
- Как проверить, равно ли значение переменной
inf
?