gpt4 book ai didi

c++ - 在不同机器之间使用 float / double 时我应该知道什么?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:05:22 25 4
gpt4 key购买 nike

我听说不同 CPU 上的 float / double 存在很多问题。

如果我想制作一款对所有内容都使用 float 的游戏,我如何才能确保每台机器上的 float 计算完全相同,以便我的模拟在每台机器上看起来完全一样?

我还担心写入/读取文件或将浮点值发送/接收到不同的计算机。必须进行哪些转换(如果有)?

我需要 100% 确定我的浮点值的计算结果完全相同,因为即使计算结果稍有不同,也会导致完全不同的 future 。这甚至可能吗?

最佳答案

除了范围限制之外,标准 C++ 没有规定任何关于浮点类型的细节,并且可能某些数学函数(如正弦函数和指数函数)必须正确到一定的精度水平。

除此之外,在这种普遍性水平上,您真的没有什么可以依赖的了!

也就是说,您很可能不需要在每个平台上进行二进制相同的计算,floatdouble 类型的精度和准确度保证实际上足以用于模拟目的。

请注意,当您修改子表达式的求值顺序时,您甚至无法在自己的程序中产生可靠的代数表达式结果,因此无论如何要求您想要的那种可再现性可能有点不现实。如果您需要真正的浮点精度和准确性保证,您最好使用具有正确舍入的任意精度库,例如 MPFR - 但这对于游戏来说似乎不现实。

序列化 float 是一个完全不同的故事,您必须对目标平台使用的表示有一些了解。如果所有平台实际上都使用 32 位或 64 位大小的 IEEE 754 float ,您可能只需直接交换二进制表示(模字节顺序)。如果您有其他平台,则必须考虑自己的序列化方案。

关于c++ - 在不同机器之间使用 float / double 时我应该知道什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6873118/

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