为什么Swift默认使用双精度浮点数?

3
Swift语言指南中提到:

Double 表示64位浮点数。在需要极大或特别精确的浮点数值时使用它。

Float 表示32位浮点数。当浮点数不需要64位精度时应使用它。

但后来又提到:

Swift在推断浮点数类型时总是选择 Double (而非 Float )。

这不是有些矛盾吗?对于大部分浮点数来说,64位精度是否过高?这是否意味着我应该明确地定义 Float 数字?还是在实践中这种差异并不重要?


Double是处理标量值的最佳选择,原因有几点。首先,浮点数的精度并不高——将0.01加到一个总和上一百万次,结果可能是9865。其次,大多数现代处理器都是64位的,所以在移动double和float时速度基本相同。第三,CPU使用80位寄存器进行浮点数运算,无论使用float还是double,计算速度都不会更快。然而,在3D游戏中,数组类型的float仍然是最佳选择,因为它们可以最大限度地减少内存使用量,同时提高内存复制速度和渲染速度——并且并非所有图形卡都支持double。 - AbePralle
2个回答

12

默认使用Double会保证类型推断不会导致任何浮点精度错误。

默认使用Float在某些情况下可能会引起问题,因此我认为这是一种保守的选择。

我没有确切的数据支持我的说法,但我怀疑性能差异并不那么重要,这也可以证明这种选择的合理性。


2

为什么浮点数被推断为Double可能是由于:

1)许多其他语言,如JAVA和Haskell,将浮点数推断为Double

2)通过使用更高的精度Double确保不会丢失精度。他们做出了保持精度而非潜在性能提升(较低内存)的决定,这可能在使用Float时可能会看到。


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