在普通单个计算中,`float` 和 `double` 有什么区别?

5
我发现有些人在编写需要浮点数的代码时,会声明使用float类型(在C/C++中)。这不是一个巨大的矩阵,空间并不是问题,也没有尝试将更多内容放入SIMD等等。很小的事情,比如按百分比缩放值,或者在两个量之间找到一个比率。
我一直使用double,并认为float只在空间真正成问题时才使用。我还记得桌面CPU没有浮点硬件的日子,可能会有一些关于软件库性能的说法,但随着第一个“287协处理器”的出现,本地精度已经达到了80位,而float仅用于长期存储值在RAM或文件中,并不影响计算速度。
今天,在这种习惯性方式下,是否有任何理由使用float而不是double呢?情况1:特定于PC/Mac硬件; 情况2:可移植的代码,可能在台式机和手机等移动设备上运行。
我是否应该向我的团队传授我所记得的方式:“嘿,你知道吗,float是一种半尺寸的东西,而double则是正常的。”或者有没有一些权衡或原因,使C++程序员在似乎(对我来说)不知道double存在的情况下到处使用float呢?
我的问题不特定于语言,但是我的术语是float为4个字节,而double为8个字节。

我认为除非你关心性能或POD大小,否则应该使用double。我猜以前人们出于同样的原因更喜欢使用“short”而不是“int”,但现在这已经不那么相关了。 - user3703887
1
我认为对于一次性使用,这并不影响性能。 - JDługosz
2
相关:https://dev59.com/AnNA5IYBdhLWcg3wI6V4 - Thomas Padron-McCarthy
1个回答

1
正如我在此答案中指出的那样,floatdouble更快的方法有几种,但通常除非你确定浮点运算是瓶颈,否则建议使用double。这也可以避免像这个, 这个这个的问题。
一个明显的例外是只有单精度硬件支持的情况(例如Cortex M4)。

即使有强有力的性能论点,这只意味着应该进行分析以查看浮点数是否足够好。快速得出错误答案是没有意义的。 - Patricia Shanahan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接