相关疑难解决方法(0)

什么可能导致确定性过程产生浮点错误

已经阅读过这个问题,我有理由确定使用具有相同输入的浮点算术的给定进程(在相同的硬件上,使用相同的编译器编译)应该是确定性的.我正在研究一个不成立的案例,并试图确定可能导致这种情况的原因.

我已经编译了一个可执行文件,我正在为它提供完全相同的数据,在一台机器上运行(非多线程)但是我得到的错误约为3.814697265625e-06,经过仔细的谷歌搜索,我发现实际上等于1/4 ^ 9 = 1/2 ^ 18 = 1/262144.这非常接近32位浮点数的精度等级(根据维基百科大约7位数)

我怀疑它与已应用于代码的优化有关.我正在使用英特尔C++编译器并将浮点数推测转为快速而非安全或严格.这会使浮点过程不确定吗?是否存在可能导致此行为的其他优化措施?

编辑:根据Pax的建议,我重新编译了浮点投机的代码转向安全,我现在得到稳定的结果.这让我可以澄清这个问题 - 浮点推测实际上做了什么以及如何在应用于完全相同的输入时,导致相同的二进制(即一次编译,多次运行)产生不同的结果?

@Ben我正在使用英特尔(R)C++ 11.0.061 [IA-32]进行编译,而我正在运行英特尔四核处理器.

c++ floating-point deterministic intel

6
推荐指数
1
解决办法
2447
查看次数

标签 统计

c++ ×1

deterministic ×1

floating-point ×1

intel ×1