C++ 为什么这些双精度的返回值是-1.#IND?
我有:C++ 为什么这些双精度的返回值是-1.#IND?,c++,visual-studio-2008,visual-c++,opencv,C++,Visual Studio 2008,Visual C++,Opencv,我有: double score = cvMatchContourTrees( CT1, CT2, CV_CONTOUR_TREES_MATCH_I1, 0.0 ); cout<<score<<endl; double score=cvMatchContourTrees(CT1,CT2,CV_Contourt_TREES_MATCH_I1,0.0); coutstd::cout正如Frederic所说,它是由在windows上使用visual studi
double score = cvMatchContourTrees( CT1, CT2, CV_CONTOUR_TREES_MATCH_I1, 0.0 );
cout<<score<<endl;
double score=cvMatchContourTrees(CT1,CT2,CV_Contourt_TREES_MATCH_I1,0.0);
coutstd::cout正如Frederic所说,它是由在windows上使用visual studio构建的应用程序对“”进行格式化的结果。John D Cook有一个:
Windows将NaN显示为-1.#IND(“IND”表示“不确定”),而Linux显示NaN
简而言之,如果得到1.#INF或INF,请查找溢出或被零除。如果你得到1.#IND或nan,寻找非法操作
如果您对字符串进行任何形式的格式化,请注意截断;我自己在处理这类错误时遇到过。根据我的经验-1.#IND
来自虚数。因此,做cout#IND
是非常重要的。您可能想阅读。cvmatchtourtrees
和OpenCV在这个问题上完全是骗人的。@Tomalak,您怎么能确定?问题是“什么是-1.#IND的意思?”还是“CVT如何返回该值?”@Mark:Fair point。我想两者都有可能。看:我不确定0/0
是否会产生NaN
。我认为这就像任何其他被零除法一样,操作系统会出现浮点异常。@Tomalak:在Visual Studio中,0/0会抛出异常。0.0/0.0或者返回NaN或者抛出异常,您可以通过一个标志来控制它。默认情况下,它返回NaN。@user763305:是,完全正确。而这不是最初的引文所说的。我的观点是,当心维基百科的危险……也许。。。或者可能是在图书馆的电话中,图书馆默默地掩盖了异常,但仍然按照OPs的问题吐出NaN?
std::cout << (0/0.f);
// Output: -1.#IND