发布模式下的 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
- 每次都这样做全新构建。
我尝试将我的 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
- 每次都这样做全新构建。