【问题标题】:Why does Swift default to double floating-point? [closed]为什么 Swift 默认使用双浮点? [关闭]
【发布时间】:2014-06-17 12:52:28
【问题描述】:

Swift Language Guide 说:

Double 表示 64 位浮点数。什么时候用 浮点值必须非常大或特别精确。

Float 表示一个 32 位浮点数。什么时候用 浮点值不需要 64 位精度。

但后来:

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

这不是有点矛盾吗? 大多数浮点数的 64 位精度会不会过高?这是否意味着我应该明确定义浮点数,或者实际上差异并不重要?

【问题讨论】:

  • Double 是标量值的最佳选择,原因有几个。首先,浮点数真的不是很准确——将 0.01 加到一百万次总和上,你会得到 9865。其次,大多数现代处理器都是 64 位的,因此在 double 中移动的速度与浮点数一样快。第三,无论哪种情况,CPU 都使用 80 位寄存器来进行浮点数学运算——使用浮点数并没有使计算速度更快。对于 3D 游戏来说,浮点数数组仍然是最好的,因为它们可以最大限度地减少内存使用,同时最大限度地提高内存复制速度和渲染速度 - 并且并非所有 gfx 卡都支持双倍。

标签: swift type-inference


【解决方案1】:

默认为Double 可以保证类型推断不会导致浮点精度错误。

默认为Float 在某些情况下会造成麻烦,所以我会说这是一个保守的选择。

我没有确凿的数字来支持我的主张,但我怀疑这也可以通过性能差异不那么相关来证明。

【讨论】:

    【解决方案2】:

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

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

    2)Double,精度更高,保证精度不丢失。他们已决定保持精度,而不是使用Float 时可能会看到的潜在性能改进(降低内存)。

    【讨论】:

      猜你喜欢
      • 2017-01-24
      • 2014-05-14
      • 2011-05-20
      • 1970-01-01
      • 2023-01-31
      • 2016-10-26
      • 1970-01-01
      • 2011-10-08
      • 2017-08-28
      相关资源
      最近更新 更多