一个“-1.#INF000”引发的bug

本文介绍了一种在C++代码中调试包含无穷大值(-1.#INF000)变量的方法。通过加入特定条件的assert断言,可以快速定位到产生异常值的代码位置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在c++代码中,今天调试时,发现一个变量的值都变成了“-1.#INF000”。如下图所示:

出错的变量


  

变量值变得不正常了,所以接下来的操作都不正确了,最终导致了不正常的结果。

起初不知道该怎么去调试,感觉无从下手。后来加了测试的判断,当满足该判断时加入assert(false), 这样就可以轻松的找到引起错误的罪魁祸首了。

出错的变量名为:box,box.mMinimum 和 box.mMaximum存的是float类型的值。

加入的判断为:

 if(box.mMinimum -10.0f == box.mMinimum)
{
    assert(false);
}

这里其实box.mMinimum做任何的操作都不会改变其本身的值。利用这一特点快速调试出bug出错的地方。

下面对这一类的值做一下解释:

(1)1.#INF: 表示无穷小
(2)-1.#IND: 做除法时除数为0
(3)1.#INF000:正无穷大
(4)-1.#INF000:负无穷大
再遇到类似的出错信息时,就可以解决了。

Traceback (most recent call last): File "D:\demo\detr_o\ultralytics-8.3.19\train_o.py", line 62, in <module> main(opt) File "D:\demo\detr_o\ultralytics-8.3.19\train_o.py", line 9, in main results = model.train(data=r'D:\demo\detr_o\ultralytics-8.3.19\ultralytics\cfg\datasets\TomatoPlantfactoryDataset.yaml', # 训练参数均可以重新设置 File "D:\demo\detr_o\ultralytics-8.3.19\ultralytics\engine\model.py", line 802, in train self.trainer.train() File "D:\demo\detr_o\ultralytics-8.3.19\ultralytics\engine\trainer.py", line 207, in train self._do_train(world_size) File "D:\demo\detr_o\ultralytics-8.3.19\ultralytics\engine\trainer.py", line 328, in _do_train self._setup_train(world_size) File "D:\demo\detr_o\ultralytics-8.3.19\ultralytics\engine\trainer.py", line 264, in _setup_train self.amp = torch.tensor(check_amp(self.model), device=self.device) File "D:\demo\detr_o\ultralytics-8.3.19\ultralytics\utils\checks.py", line 696, in check_amp assert amp_allclose(YOLO("yolo11n.pt"), im) File "D:\demo\detr_o\ultralytics-8.3.19\ultralytics\utils\checks.py", line 683, in amp_allclose a = m(batch, imgsz=imgsz, device=device, verbose=False)[0].boxes.data # FP32 inference File "D:\demo\detr_o\ultralytics-8.3.19\ultralytics\engine\model.py", line 176, in __call__ return self.predict(source, stream, **kwargs) File "D:\demo\detr_o\ultralytics-8.3.19\ultralytics\engine\model.py", line 554, in predict return self.predictor.predict_cli(source=source) if is_cli else self.predictor(source=source, stream=stream) File "D:\demo\detr_o\ultralytics-8.3.19\ultralytics\engine\predictor.py", line 168, in __call__ return list(self.stream_inference(source, model, *args, **kwargs)) # merge list of Result into one File "D:\Anaconda\envs\yolo11\lib\site-packages\torch\utils\_contextlib.py", line 36, in generator_context response = gen.send(None) File "D:\demo\detr_o\ultralytics-8.3.19\ultralytics\engine\predictor.py", line 234, in stream_in
04-01
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值