omnet veins 错误No packet was ready

本文介绍了在使用Omnet++的Veins时遇到的精度问题,该问题在release模式下出现,而在debug模式下未出现。通过对double类型精度丢失原因的分析,给出了使用SimTime().setRaw()方法进行解决的具体步骤。

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

最近在使用omnet的veins 时候出现错误,如下所示:

<!> Error in module (Mac1609_4) scenario.node[1579].nic.mac1609_4 (id=11066) at event #877979, t=29.404181564383: Model error: No packet was ready

 

在release模式下出现的错误,在debug模式下没有这个错误。

写了一些输出语句,对比如下:

1.  debug模式下,13e-6 的double型正常转变为 0.000013.

2.release模式下,13e-6 的double型正常转变为 0.000012999999.

问题解释:

release模式下,由于优化,导致double本身在表示数据时候的准确度丢失,比如

0.5=2(-1);0.5就可以准确表示,但是0.1就不能完全由二进制数准确表示,于是产生准确度丢失。

 

解决方法:

一般的,可以将double转变成整型来处理。因为所有的整型数据都可以完全准确表示成二进制数据的组合。

omnet中,有相应的处理方法,simtime的setRaw()方法,就可以很好的解决这个问题。

如  SimTime().setRaw(13000000),就能够准确的表示 13e-6。于是本人将<Consts80211p.h>中的所有 有关802.11p的物理层参数改成上述setRaw方法。

bug得到解决。

本来想向veins反应此种情况,后来在最新的版本中,发现他们已经解决这个bug,把<Consts80211p.h>文件改了,同时把mac1609也改了。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值