Почему возвращаемые значения этих удвоений -1. # IND?

У меня есть:

double score = cvMatchContourTrees( CT1, CT2, CV_CONTOUR_TREES_MATCH_I1, 0.0 );
        cout<<score<<endl;

Есть значения, возвращаемые как -1. # IND. Помимо этого, положительные значения являются нормальными, например 1.34543.

Почему это происходит? Как его решить?

Ответы

Ответ 1

Как говорит Фредерик, это результат 'Not a Number', отформатированный приложением, созданным с помощью visual studio на окнах. John D Cook имеет отличную ссылку:

Windows отображает NaN как -1. # IND ( "IND" для "неопределенного" ), в то время как Linux отображает nan.

...

Короче говоря, если вы получите 1. # INF или inf, найдите переполнение или деление на ноль. Если вы получите 1. # IND или nan, найдите незаконные операции.

Следите за усечениями, если вы производите форматирование со своей строкой; Я столкнулся с связанными проблемами, когда сам справлялся с этими типами ошибок.

Ответ 2

std::cout << (0/0.f);
// Output: -1.#IND

Это NaN.

Ответ 3

В моем опыте -1.#IND происходит от мнимых чисел. Итак, для выполнения cout << sqrt(-1.); следует выводить -1.#IND