You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift斐波那契函数第93次迭代触发EXC_BAD_INSTRUCTION错误求助

解决Swift中生成斐波那契数时的溢出错误

你遇到的这个问题本质是整数溢出导致的!咱们来一步步理清楚:

问题根源

Int64类型能容纳的最大值是9223372036854775807,而第93个斐波那契数是12200160415121876738——这个数值已经远远超出了Int64的范围。当你执行numbers[x-1] + numbers[x-2]时,两个大数相加的结果撑爆了Int64的存储上限,Swift作为静态类型语言,默认会严格触发溢出错误(也就是你看到的EXC_BAD_INSTRUCTION),它不允许这种隐式的不安全数值操作。

两种解决方案

根据你的需求,有两种靠谱的处理方式:

1. 用溢出运算符避免崩溃(但结果不准确)

Swift提供了专门的溢出运算符&+,它会在溢出时自动截断数值,虽然不会崩溃,但得到的结果是错误的,适合只需要避免崩溃、不追求准确值的场景:

func buildFibonacci(){ 
    var numbers: [Int64] = [0,1] 
    for x in (2...99) { 
        numbers.append(numbers[x-1] &+ numbers[x-2]) // 替换为溢出加法
    } 
    print(numbers) 
}
buildFibonacci()

2. 用任意精度整数获取准确结果

如果需要得到完全正确的前100个斐波那契数,推荐使用BigInt类型,它可以处理任意大小的整数,完全不会有溢出问题。你需要先引入第三方库BigInt(比如attaswift的开源实现):

首先在Swift Package Manager的Package.swift中添加依赖:

dependencies: [
    .package(url: "https://github.com/attaswift/BigInt.git", from: "5.3.0")
]

然后修改你的代码:

import BigInt

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

这样就能顺利生成前100个准确的斐波那契数啦。

顺带提一句:静态类型语言对类型安全的要求很高,这种严格的溢出检查其实是在帮你规避潜在的数值错误,习惯之后会觉得挺贴心的~

内容的提问来源于stack exchange,提问作者Paul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:27:10