【发布时间】:2014-05-14 03:29:16
【问题描述】:
在我所看到的大部分代码中,double 与float 相比更受欢迎,即使在不需要高精度时也是如此。
既然在使用double类型(CPU/GPU/memory/bus/cache/...)的时候有performance penalties,那么这种double过度使用的原因是什么?
示例:在计算流体动力学中,我使用的所有软件都使用双精度数。在这种情况下,高精度是没有用的(由于数学模型中的近似值造成的误差),并且需要移动大量数据,可以使用浮点数将其减半。
今天的计算机功能强大这一事实毫无意义,因为它们被用来解决越来越复杂的问题。
【问题讨论】:
-
“即使不需要高精度” - 如果他们有
floats,您可能会抱怨“即使不需要高性能”... -
因为性能是大多数代码路径最不关心的问题,而且额外的精度不会受到伤害(反之亦然?)
-
根据架构,硬件(例如 x86)可能只实现
double并通过转换为double并返回到float来模拟float,从而使其更昂贵。 -
这里是关于double和float转换的stackoverflow讨论stackoverflow.com/questions/16737615/…
-
@DavidRodríguez-dribeas 我想当你说
double已实现但float未实现时,我想我明白了你所指的意思,但事实并非如此。旧的 FPU 指令适用于 80 位双扩展数字,既不是float也不是double,但没关系:它可以加载和保存浮点数和双精度数而不会降低性能(也许具有讽刺意味的是,指令加载/保存 80 位浮点数 很慢)。在非古代 x86 系统上,float 和 double 都直接使用 SSE(2) 实现。
标签: c++ performance floating-point double