【C/C++】运算结果出现1.#Q0问题分析
打印代碼結果時發現出現了1.#Q0,就在網上搜索,發現相關的中文資料介紹很少,在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格式控制輸出的結果。Debug下向前排查,找到計算dist的語句:
dist= 0.3*expf (-x * x * rho);
發現x的值為-1.#IND000,導致計算得到的dist的值為1.#QNAN00,-1.#IND000表示負無窮大的意思。
再繼續往前排查,查看x的-1.#IND000值是如何出現的。
x = a + b * y;
發現計算x時,a和b的值是-1.#IND000;而導致a和b的值出現問題的原因是:在求解最小二乘擬合系數時,只有1個支撐點,但是卻需要求解2個系數,計算過程中出現除數為0,導致求出的系數a和b為-1.#IND000。
總結
以上是生活随笔為你收集整理的【C/C++】运算结果出现1.#Q0问题分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【机器学习】通俗易懂的条件概率公式
- 下一篇: 【C/C++】lib 和 dll 的区别