gpt4 book ai didi

c++ - 如何强制32位浮点计算跨平台一致性?

转载 作者:行者123 更新时间:2023-11-30 02:42:49 26 4
gpt4 key购买 nike

我有一段使用浮点运算的简单代码。循环中很少有乘法、除法、exp()、减法和加法。当我在不同平台(如 PC、Android 手机、iPhone)上运行同一段代码时,我得到的结果略有不同。结果在所有平台上几乎相同,但差异很小 - 通常为浮点值的 1/1000000。

我想原因是有些手机没有浮点寄存器,只是用整数模拟那些计算,有些手机有浮点寄存器,但有不同的实现。这里有证明:http://christian-seiler.de/projekte/fpmath/

有没有办法强制所有平台产生一致的结果?例如,一个用整数(在软件中)实现浮点机制的良好且快速的开源库,因此我可以避免硬件实现差异。

我需要精确一致性的原因是为了避免计算层之间的复合错误。目前,这些复合错误确实会产生截然不同的结果。换句话说,我不太关心哪个平台有更正确的结果,而是想要强制一致性以便能够重现相同的行为。例如,在手机上发现的错误在 PC 上更容易调试,但我需要重现这个确切的行为

最佳答案

一个相对广泛使用和高质量的软件 FP 实现是 MPFR .不过,它比硬件 FP 慢很多

当然,这不会解决您的算法存在的复合错误的实际问题,它只会使其在所有平台上产生相同的错误。如果可行的话,可能更好的方法是设计一种对 FP 算法中的微小差异不那么敏感的算法。或者,如果您采用 MPFR 路线,则可以使用更高精度的 FP 类型并查看是否有帮助,而无需限制自己模拟硬件单精度/ double 。

关于c++ - 如何强制32位浮点计算跨平台一致性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26730081/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com