gpt4 book ai didi

swift - 简单的 Swift Fibonacci 程序崩溃(Project Euler 2)

转载 作者:搜寻专家 更新时间:2023-11-01 06:20:43 24 4
gpt4 key购买 nike

我正在尝试解决 Project Euler 上的第二个问题。问题如下:


斐波那契数列中的每一项都是通过添加前两项生成的。从 1 和 2 开始,前 10 项将是:1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...考虑斐波那契数列中不超过四百万的项,求偶数项之和。


我想我已经写了一个解决方案,但是当我尝试运行我的代码时它使我的 Swift playground 崩溃并给我这个错误消息:

Playground execution aborted: Execution was interrupted, reason: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)


var prev = 0
var next = 1
var num = 0
var sum = 0

for var i = 1; i < 400; i++ {
num = prev + next
if next % 2 == 0 {
sum += next
}
prev = next
next = num
}
print(sum)

奇怪的是,如果我将循环中的计数器设置为小于 93,它就可以正常工作。将变量名称显式设置为 Double 没有帮助。有人知道这里发生了什么吗?

最佳答案

这根本没有什么奇怪的。你知道 400 斐波那契数有多大吗?

176023680645013966468226945392411250770384383304492191886725992896575345044216019675

Swift Int64UInt64 根本无法处理那么大的数字。后者最多可以达到 18446744073709551615 - 甚至不接近。

如果您将变量更改为 double 变量,它可以工作但会不准确:

var prev : Double = 0
var next : Double = 1
var num : Double = 0
var sum : Double = 0

会产生

2.84812298108489e+83

这有点接近于的实际值

1.76e+83

幸运的是,您不需要获得那么大的值。我建议不要编写 for 循环,而应编写 while 循环来计算下一个斐波那契数,直到满足中断条件其值不超过四百万

关于swift - 简单的 Swift Fibonacci 程序崩溃(Project Euler 2),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34707568/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com