gpt4 book ai didi

c++ - x86 4 字节 float 与 8 字节 double (与 long long 相比)?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:10:17 27 4
gpt4 key购买 nike

我们有一个测量数据处理应用程序,目前所有数据都保存为 C++ float,这意味着在我们的 x86/Windows 平台上为 32 位/4 字节。 (32 位 Windows 应用程序)。

由于精度成为一个问题,因此一直在讨论转向另一种数据类型。当前讨论的选项是切换到 double(8 字节)或在 __int64(8 字节)之上实现固定的十进制类型。

甚至讨论使用 __int64 作为基础类型的固定小数解决方案的原因是有人声称 double 性能(仍然)比处理 差得多float,我们可能会看到使用 native 整数类型来存储数字的显着性能优势。 (请注意,我们真的可以使用固定的小数精度,尽管代码显然会变得更加复杂。)

显然我们最终需要进行基准测试,但我想问一下,对于现代处理器而言, double 更差的说法是否成立?我猜想对于大型数组, double 可能会使缓存命中更多的 float ,但除此之外我真的看不出它们在性能上有何不同?

最佳答案

这取决于你做什么。 double 上的加法、减法和乘法与当前 x86 和 POWER 架构处理器上的 float 一样快。除法、平方根和超越函数(exp、log、sin、cos 等)在使用双参数时通常速度较慢,因为它们的运行时间取决于所需的精度。

如果你使用定点,乘法和除法需要用长整数乘法/除法指令来实现,这通常比 double 上的算术运算慢(因为处理器没有针对它进行优化) ).如果您在 32 位模式下运行,则更是如此,其中需要从多个 32 位长乘法合成具有 128 位结果的长 64 位乘法!

缓存利用率在这里是一个转移注意力的问题。 64 位整数和 double 的大小相同 - 如果您需要超过 32 位的整数,无论​​如何您都会受到惩罚。

关于c++ - x86 4 字节 float 与 8 字节 double (与 long long 相比)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4163049/

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