【C/C++】运算结果出现1.#Q0问题分析

30 篇文章 5 订阅

打印代码结果时发现出现了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时,ab的值是-1.#IND000;而导致ab的值出现问题的原因是:在求解最小二乘拟合系数时,只有1个支撑点,但是却需要求解2个系数,计算过程中出现除数为0,导致求出的系数ab-1.#IND000

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值