Swift randomly crashes – Stack Overflow
This is an integer overflow problem when the next Fibonacci number (num2) becomes too large to represent as a signed 64-but integer. The crash seems random because the output from the program is buffered and not all the messages that have been printed will be visible yet. I tried adding a delay to try and remove the buffering and force output to appear:
var num1 = 0, num2 = 1
for i in 0..<100{
print(i, num1)
usleep(250_000)
var temp = num2
num2 += num1
num1 = temp
}
In swift playgrounds on the iPad this reliably shows me up to number 91:
89 1779979416004714189
90 2880067194370816120
91 4660046610375530309
Since Int.Max is 9223372036854775807 and the code is printing num1, this means that num2 has already been set to 7540113804746346429 in the i==90 iteration. Before the code can print num1 for i==92 it will need to add 4660046610375530309 to num2 (in the i==91 iteration) and that will be too large for a signed 64-bit integer (12200160415121876738)
Read more here: Source link
