许多编程语言有两种二进制浮点类型:float(32 位)和 double(64 位)。它反映了大多数通用处理器本身支持这两种数据类型的事实。
通常我们需要在这两种类型之间进行转换。 ARM 和 x64 处理器都可以在一条廉价指令中完成。例如,ARM 系统可能使用fcvt指令。
细节可能有所不同,但大多数当前的处理器可以在每个 CPU 周期转换一个数字(从浮点数到双精度数,或从双精度数到浮点数)。延迟很小(例如,3 或 4 个周期)。
一个典型的处理器可能运行在 3 GHz,因此我们每秒有 30 亿个周期。因此,我们每秒可以转换 30 亿个数字。一个 64 位数字使用 8 个字节,因此它是每秒 24 个字节的吞吐量。
因此,一般来说,类型转换不太可能成为性能瓶颈。如果您想在自己的系统上测量速度:我编写了一个小型 C++ 基准测试。
原文: https://lemire.me/blog/2022/07/20/how-quickly-can-you-convert-floats-to-doubles-and-back/