为什么在达到双倍最大值时双倍达到“Double.infinity”?

时间:2016-10-22 07:32:26

标签: swift xcode double infinite

我写了一个小小的Swift程序,为前一个数字添加一个数字,直到达到无穷大。但是,在达到双倍最大值之前达到无穷大。

  • 双限是1.79769313486232e + 308
  • 距离限制为4.90703911098917e + 307
  • 然而,8.07763763215622e + 307 + 1.3069892237634e + 308达到了无穷大

这是为什么? (我在下面回答。)

为自己运行:

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")

1 个答案:

答案 0 :(得分:0)

添加后:

    print((DBL_MAX - register) - previous)

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

因此,上面打印出来:

-3.17059852116705e+307

显示Double Max在最终计算中被覆盖,证明为什么达到无穷大。

嗯,我现在已经在公共场合学习了!

相关问题