为什么在达到 Double Max 之前 Double 达到 `Double.infinity`?

Why does Double reach `Double.infinity` BEFORE Double Max is reached?

我写了一个很小的 ​​Swift 程序来将一个数字加到前面的数字上,直到它达到无穷大。但是,在达到双最大值之前达到无穷大。

这是为什么? (我在下面回答了这个问题。)

运行 自己动手:

import Foundation
import Darwin

var current: Double = 1
var previous: Double = 0
var register: Double = 0

var infinity = Double.infinity
var isInfinite = infinity.isInfinite

var n = 1
while current < infinity {

    register = current
    current = previous + register
    print("\(n): \(current)")

    guard current != infinity else { break }

    previous = register

    n += 1
}

print("\n")
print("Double limit is \(DBL_MAX)")
print("Distance to limit is \(DBL_MAX - register)")
print("Yet, \(previous) + \(register) reached infinity")

添加后:

    print((DBL_MAX - register) - previous)

到我的代码结束时,我意识到我的错误是没有完全掌握 e+ 符号。

因此,上面打印出:

-3.17059852116705e+307

证明Double Max在最后的计算中超标了,证明了为什么会达到无穷大。

嗯,我已经在 public 完成了我的学习!