发布模式下的 OMNeT++ 4.6 浮点精度问题

OMNeT++ 4.6 floating point precision issue in release mode

我尝试将我的 OMNet++ 项目从 Linux 移动到 Windows 平台。

在我移动到 Windows 之后,我注意到在 运行 处于释放模式时浮点数不是那么精确。

比如我有一个时间参数叫GUARD_INTERVAL.

我设置为0.000001,在模拟过程中。 我看到它在发布模式下打印为 0.000000999999。 但它在调试模式下显示为 0.000001。

我认为它不会影响模拟结果。 但事实证明它会。

那么,有没有办法让release模式和debug模式的精度一样呢?

作为第一个猜测,您可以尝试从 configure.user:

中的这一行删除哈希标记 (#) 和 -march=native -mtune=native 部分
#CFLAGS_RELEASE='-O3 -march=native -mtune=native -DNDEBUG=1'

所以就变成了这样:

CFLAGS_RELEASE='-O3 -DNDEBUG=1'

然后从头开始重建 OMNeT++(从 ./configure 开始)。

如果这没有帮助,那么您也可以尝试将此行中的 -O3 降低到 -O2,然后是 -O1,甚至 -O0 - 每次都这样做全新构建。