2016-10-22 105 views
1

我写了一个小巧的Swift程序,将数字添加到前一个数字,直到达到无穷远。但是,在达到双倍最大值之前达到无穷大。为什么Double在达到Double Max之前达到`Double.infinity`?

  • 双限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") 
+0

在current = prev + register后添加一个打印电流 – Benj

+1

挂了一分钟我意识到我将它自己添加到它自己...... –

+0

您不会添加之前的当前,您基本上每倍增加当前时间。 8.98846567431158e + 307 * 2将大于Double.max – courteouselk

回答

0

加入后:

print((DBL_MAX - register) - previous) 

到我的代码的最后,我意识到自己的错误没有完全把握e+符号。

因此,上述打印出:

-3.17059852116705e+307 

表示双人Max是过度射中最后的计算,证明为何达到无穷大。

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

相关问题