比较 float 比 double 更有效吗?
Is it more efficient to compare float than double?
我认为它们在 64 位架构师上是相同的。
例如我正在写一个函数模板,我应该提供一个 float 和 double 的规范,还是我应该只提供一个规范接受一个 double 并让其他数字自动转换为 double?假设唯一考虑的数字类型是 float、double、int、long、unsigned int、unsigned long。
最佳解决方案:使用模板化类型。这将自动使用提供的类型,所有速度优化将由编译器完成。
仍然是个不错的解决方案:一个函数用于整数,一个函数用于浮点类型,使用您要支持的最大类型(通常是 long
和 double
)。
对整数类型使用浮点运算会失去精度,应该避免。
将浮点数与浮点数进行比较通常比将双精度数与双精度数进行比较相同或稍快,但两种方式的差异通常很小。您可能会看到的更大的性能问题是从 float 到 double 的转换,它可以是免费的也可以是非常昂贵的,具体取决于转换的位置和方式。
无论哪种方式,除非您分析并发现涉及此函数的某个巨大循环中的瓶颈,否则真的不值得担心太多,在这种情况下,您可以自己测试性能差异并做出相应的反应。
我认为它们在 64 位架构师上是相同的。
例如我正在写一个函数模板,我应该提供一个 float 和 double 的规范,还是我应该只提供一个规范接受一个 double 并让其他数字自动转换为 double?假设唯一考虑的数字类型是 float、double、int、long、unsigned int、unsigned long。
最佳解决方案:使用模板化类型。这将自动使用提供的类型,所有速度优化将由编译器完成。
仍然是个不错的解决方案:一个函数用于整数,一个函数用于浮点类型,使用您要支持的最大类型(通常是 long
和 double
)。
对整数类型使用浮点运算会失去精度,应该避免。
将浮点数与浮点数进行比较通常比将双精度数与双精度数进行比较相同或稍快,但两种方式的差异通常很小。您可能会看到的更大的性能问题是从 float 到 double 的转换,它可以是免费的也可以是非常昂贵的,具体取决于转换的位置和方式。
无论哪种方式,除非您分析并发现涉及此函数的某个巨大循环中的瓶颈,否则真的不值得担心太多,在这种情况下,您可以自己测试性能差异并做出相应的反应。