Fibonacci计数函数的EXC_BAD_INSTRUCTION代码= EXC_I386_INVOP

时间:2018-05-05 16:58:17

标签: swift4

我是Swift(和非动态类型语言)的新手,并尝试创建一个函数,它创建了前100个Fibonacci数的数组。

就是这样:

func buildFibonacci(){
    var numbers: [Int64] = [0,1]
    for x in (2...99) {    
        numbers.append(numbers[x-1] + numbers[x-2])
    }
    print(numbers)
}

buildFibonacci()

但是当我运行它时,在第93次迭代中我得到一个错误:EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)。据我了解,它是在总和操作上提出的。

我的猜测这是关于Int的大小,所以我把它改成了Int64,但看起来问题出在其他方面。我使用swift 4.1,如果它很重要的话。有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:1)

你的假设是对的,这是一个溢出异常,数字太高而无法用64位表示。在64位计算机上Int无论如何都是Int64,因此类型更改没有任何区别。

解决方案是使用NSDecimalNumber,它不限于64位,并提供基本的算术方法。

func buildFibonacci(){
    var numbers: [NSDecimalNumber] = [.zero, .one]
    for x in 2...99 {
        numbers.append(numbers[x-1].adding(numbers[x-2]))
    }
    print(numbers)
}

buildFibonacci()