首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在while循环中快速执行非法硬件指令

在while循环中快速执行非法硬件指令
EN

Stack Overflow用户
提问于 2017-08-19 18:25:19
回答 2查看 1.3K关注 0票数 4

我试图在Swift中解决Euler项目的25 (https://projecteuler.net/problem=25)问题,当我在while循环中更改我的条件时,我得到了一个非常好的密码错误消息。

起初,我从2开始,然后10开始,得到了正确的结果。但是有了100,程序就崩溃了。

代码语言:javascript
复制
var index = 3
var a = 1
var b = 2

while String(b).characters.count < 100 {
  let temp = b
  b = a + b
  a = temp
  index += 1
}

print(index)

这是一个错误:

代码语言:javascript
复制
0  swift                    0x00000001103b24f7 PrintStackTraceSignalHandler(void*) + 39
1  swift                    0x00000001103b19a6 SignalHandler(int) + 646
2  libsystem_platform.dylib 0x00007fffb3a89b3a _sigtramp + 26
3  libswiftCore.dylib       0x0000000112d6a40d (anonymous namespace)::Sentinels + 12861
4  swift                    0x000000010dcfadcf llvm::MCJIT::runFunction(llvm::Function*, llvm::ArrayRef<llvm::GenericValue>) + 655
5  swift                    0x000000010dd009c3 llvm::ExecutionEngine::runFunctionAsMain(llvm::Function*, std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > const&, char const* const*) + 707
6  swift                    0x000000010d1fdc69 swift::RunImmediately(swift::CompilerInstance&, std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > const&, swift::IRGenOptions&, swift::SILOptions const&) + 3385
7  swift                    0x000000010d1d2622 swift::performFrontend(llvm::ArrayRef<char const*>, char const*, void*, swift::FrontendObserver*) + 50738
8  swift                    0x000000010d17fd6c main + 9052
9  libdyld.dylib            0x00007fffb387a235 start + 1
Stack dump:
0.  Program arguments: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift -frontend -interpret ./project-euler/025/problem025.swift -enable-objc-interop -sdk /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk -color-diagnostics -module-name problem025 
[1]    8705 illegal hardware instruction  ./project-euler/025/problem025.swift

有人知道为什么会这样吗?在Python和Ruby中,完全相同的代码运行平稳。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-19 22:19:15

您的算法是正确的,但问题是Swift 64位整数只能容纳高达9,223,372,036,854,775,807的值,即9.22e+18。无符号整数可以是两倍大,但仍然不能接近1,000位数。Decimal/NSDecimalNumber可使您达到38位数字,这仍然不够。

您可能希望创建/使用一个可以表示任意大整数的库。只需在网上搜索“迅速任意大整数”或“迅捷双元”。

然后,您的例程将正确地计算结果。

票数 1
EN

Stack Overflow用户

发布于 2017-08-19 22:19:36

如果您的所有操作都是正的,则可以使用UInt64,而这些操作似乎都是正的。这可能会防止溢出,因为您将得到更长的范围。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45774995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档