В программе, которая должна обрабатывать функцию sin (x)/x, я столкнулся с проблемой NAN, я упростил проблему в следующем коде:
#include <iostream>
#include <cmath>
int main()
{
std::cout.precision(15);
//This line compiles and run in g++, but does not compile in Visual Studio 2013
std::cout << 0.0/0.0 << std::endl;
//This line compiles and run in both g++ and VS2013
std::cout << std::sin(0.0)/0.0 << std::endl;
return 0;
}
В g++ вывод: -nan -nan, в VS2013 вывод: -1.IND, потому что первая строка не компилируется, поэтому я прокомментировал ее.
Мои вопросы:
-
Что означает этот "-1.IND"?
-
Кажется, что процесс NAN зависит от компилятора, должен ли он быть стандартизован в С++? Почему?
-
Я использовал этот хак для решения этой проблемы:
double sinc(double x) { if(x == 0.0) return 1.0; return std::sin(x)/x; }
Правильно ли это?
EDIT: другой вопрос, 4. почему VS2013 имеет дело с 0.0/0.0 и sin (0.0)/0.0 иначе?