【问题标题】:Store and perform operations with huge numbers in iOS在 iOS 中存储和执行大量操作
【发布时间】:2013-01-04 16:29:35
【问题描述】:

我如何处理具有以下数字的操作: 48534588306961133067968196965257961415756656521818848750723547477673457670019632882524164647651492025728980571833579341743948678486

到目前为止,我尝试过的任何方法都没有... unsigned long、long long 等...

【问题讨论】:

  • 仅供参考 - iOS 中最大的原生类型是 64 位,这就是为什么使用原生类型无法接近如此大的数字的原因。

标签: ios numbers


【解决方案1】:

您需要的是一个支持任意长度整数运算的库。但是,据我所知,没有这样的库是用 Objective-C 编写的。

不过,您很幸运,因为 Objective-C 是 C 的超集。这使您可以使用 C 库,例如 this somewhat dated SO question 的答案中描述的那些库。

此外,由于 Clang 编译器支持 C++ 并结合了 Objective-C 和 C++ 代码,您可能可以使用 big int 之类的东西。

请注意,没有一个内置类型甚至接近于大到足以表示具有与您的示例一样多的数字的数字。最大的可用整数类型是unsigned long long,如果您不需要负数,它的大小是 8 字节/64 位,这为您提供了0-18446744073709551615 的范围,或最多 20 位。

【讨论】:

    【解决方案2】:

    您可以改用JKBigInteger,它是 LibTomMath C 库的 Objective-C 包装器。而且非常易于使用和理解。

    在你的情况下:

    JKBigInteger *int = [[JKBigInteger alloc] initWithString:@"48534588306961133067968196965257961415756656521818848750723547477673457670019632882524164647651492025728980571833579341743988603191694784406703"];
    

    【讨论】:

      【解决方案3】:

      你可以在这里试试:http://gmplib.org/

      GMP 是用于任意精度算术的免费库,可对有符号整数、有理数和浮点数进行运算。除了运行 GMP 的机器中的可用内存所暗示的精度外,对精度没有实际限制。 GMP功能丰富,功能接口规范。

      【讨论】:

      • 不幸的是,使用 Xcode 5.1 构建 bmp 存在太多问题,没有人共享二进制文件。太糟糕了:(
      猜你喜欢
      • 2017-10-27
      • 2016-10-08
      • 1970-01-01
      • 2016-02-04
      • 1970-01-01
      • 2015-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多