【C/C++】运算结果出现1.#Q0问题分析
打印代碼結(jié)果時發(fā)現(xiàn)出現(xiàn)了1.#Q0,就在網(wǎng)上搜索,發(fā)現(xiàn)相關(guān)的中文資料介紹很少,在stackoverflow上找到了個提問(https://stackoverflow.com/questions/5939573/what-float-value-makes-sprintf-s-produce-1-qo),雖然不完全相同,但還是按照介紹逐步分析,排查其中的原因。
char dispParams[100];
sprintf_s(dispParams,"( %.3f)", dist);
putText(srcImg, dispParams, Point(60,60), 2, 1, CV_RGB(0,255,0),1);
首先,1.#Q0是對1.#QNAN00進行%.3f格式控制輸出的結(jié)果。Debug下向前排查,找到計算dist的語句:
dist= 0.3*expf (-x * x * rho);
發(fā)現(xiàn)x的值為-1.#IND000,導(dǎo)致計算得到的dist的值為1.#QNAN00,-1.#IND000表示負無窮大的意思。
再繼續(xù)往前排查,查看x的-1.#IND000值是如何出現(xiàn)的。
x = a + b * y;
發(fā)現(xiàn)計算x時,a和b的值是-1.#IND000;而導(dǎo)致a和b的值出現(xiàn)問題的原因是:在求解最小二乘擬合系數(shù)時,只有1個支撐點,但是卻需要求解2個系數(shù),計算過程中出現(xiàn)除數(shù)為0,導(dǎo)致求出的系數(shù)a和b為-1.#IND000。
總結(jié)
以上是生活随笔為你收集整理的【C/C++】运算结果出现1.#Q0问题分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【机器学习】通俗易懂的条件概率公式
- 下一篇: 【OpenCV】函数imread的使用之