【问题标题】:Is it more efficient to compare float than double?比较 float 比比较 double 更有效吗?
【发布时间】:2015-02-09 17:30:25
【问题描述】:

我认为它们在 64 位架构师上是相同的。

例如我正在编写一个函数模板,我应该提供浮点数和双精度数的规范,还是应该只提供一个规范采用双精度数并让其他数字自动转换为双精度数?假设考虑的唯一数字类型是 float、double、int、long、unsigned int、unsigned long。

【问题讨论】:

  • 这取决于架构,因此您需要指定 - x86、ARM 或其他。
  • 即使在特定架构上,它也可能取决于上下文。但即使使用double,您也不能假设转换后的整数类型会给您相同的比较结果。
  • 规则:使用 double 除非你有充分的理由,你可以向其他人解释,使用 float。如果你问哪个更高效,使用double。
  • 你真的需要为所有类型指定吗?您不能只指定浮点类型和整数类型吗?见en.cppreference.com/w/cpp/types

标签: c++ floating-point


【解决方案1】:

将浮点数与浮点数进行比较通常比将双精度数与双精度数进行比较时相同或稍快一些,但两者之间的差异通常很小。您可能会看到更大的性能问题是从 float 到 double 的转换,这可能是免费的,也可能非常昂贵,具体取决于它在哪里以及如何完成。

无论哪种方式,除非您已经分析并在涉及此功能的一些巨大循环中发现了瓶颈,否则真的不值得太担心,在这种情况下,您可以自己测试性能差异并做出相应的反应。

【讨论】:

  • 你能解释一下是什么决定了浮动到双重转换的成本吗?编译器还是硬件实现?
【解决方案2】:

最佳解决方案:使用模板类型。这将自动使用提供的类型,所有速度优化都将由编译器完成。

仍然是一个很好的解决方案:使用您想要支持的最大类型(通常是long 和double)为整数和浮点类型设置一个函数。

对整数类型使用浮点运算会损失精度,应该避免。

【讨论】:

    猜你喜欢
    • 2018-11-30
    • 1970-01-01
    • 2011-11-15
    • 1970-01-01
    • 1970-01-01
    • 2011-03-26
    • 2013-05-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多