gpt4 book ai didi

c++ - 将 float 转换为 double

转载 作者:可可西里 更新时间:2023-11-01 17:36:27 24 4
gpt4 key购买 nike

float 转换为 double 的代价是多少?它是否像 intlong 的转换一样微不足道?

编辑:我假设一个平台,其中 float 是 4 个字节,double 是 8 个字节

最佳答案

平台注意事项

这取决于用于 float 计算的平台。对于 x87 FPU,转换是免费的,因为寄存器内容是相同的——您有时可能付出的唯一代价是内存流量,但在许多情况下甚至没有流量,因为您可以简单地使用该值而无需任何转换。 x87 在这方面实际上是一个奇怪的野兽 - 很难正确区分 float 和 double ,因为使用的指令和寄存器是相同的,不同的是加载/存储指令和计算精度本身是使用状态位控制的.使用混合浮点/ double 计算可能会导致意外结果(因此有编译器命令行选项可以控制确切的行为和优化策略)。

当您使用 SSE 时(有时 Visual Studio 默认使用 SSE),它可能会有所不同,因为您可能需要传输 FPU 寄存器中的值或做一些明确的事情来执行转换。

内存节省性能

作为总结,并在别处回答你的评论:如果你想将 float 计算的结果存储到 32b 存储中,结果将是相同的速度或更快,因为:

  • 如果您在 x87 上执行此操作,转换是免费的 - 唯一的区别是将使用 fstp dword[] 而不是 fstp qword[]。
  • 如果您在启用 SSE 的情况下执行此操作,您甚至可能会看到一些性能提升,因为一旦计算的精度仅为 float 而不是默认的 double,就可以使用 SSE 完成一些 float 计算。
  • 在所有情况下,内存流量都较低

关于c++ - 将 float 转换为 double ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1421684/

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