Эквивалент BigInteger в Swift?

Есть ли эквивалент classа BigInteger Java в Swift? Я связываю большие вычисления в Swift с положительными целыми числами, большими, чем максимальное число UInt64. Каков наилучший способ обработки этих чисел?

Я также работаю над библиотекой BigNumber, с помощью которой вы можете делать вычисления большого количества. Фактически библиотека основана на библиотеке GNU Multiple Precision (GMP), и я написал обертку Objective-C / Swift. В настоящее время возможна большая целая математика, в том числе большая перегрузка оператора. Пример кода выглядит так:

var err : NSError? var bi1 = BigInt(nr: 12468642135797531) var bi2 = BigInt(nr: "12345678901011121314151617181920", error: &err) var res = bi1 * bi2 println("Multiply 2 BigInts: bi1 * bi2 = \(res.toString())") 

что приводит к:

 Multiply 2 BigInts: bi1 * bi2 = 153933852140173822960829726365674325601913839520 

Вы можете найти библиотеку по адресу: https://github.com/githotto/osxgmp

Вы можете использовать class NSDecimalNumber из Cocoa. Это не бесконечная точность, но она может представлять собой 38 десятичных цифр точности, которых может быть достаточно для того, что вам нужно.

Я написал библиотеку, которая позволяет работать с большими целыми числами в Swift. Подобным образом, как BigInteger Java. Существуют также перегрузки операторов, чтобы сделать работу более удобной. Пример:

 let a = BigInteger("111111111111111111111111111111111111111111111110000000001")! let b = 999_999_999 let c = a + b // 111111111111111111111111111111111111111111111111000000000 

https://github.com/kirsteins/BigInteger

Я написал большую целую и большую двойную реализацию для быстрой, что не требует дополнительной библиотеки. Просто скопируйте его в свой проект. Он поддерживает целые числа (BInt) и фракции (BDouble) с большинством общих математических операторов, таких как сложение, вычитание, умножение, возведение в степень, модуль и разделение. Также реализованы некоторые оптимизированные математические функции, такие как факториал или gcd.

Вот несколько примеров кода:

 // Create a new number: let num = BInt(232) print(num) // prints "232" // You can also use Strings to create a number: let veryBig = BInt("-827846184963421874362418746238453267452971345218746328715380000000000") // Every standard math operator works well, even with normal Integers // Visit the github page for more informations let v0 = (BInt(5) + BInt(4)) - BInt(3) let v1 = veryBig * 1000 let v2 = vergBig ^ num let v3 = (veryBig ^ 50000) / (BInt(2) ^ 900) + 1 let v4 = gcd(abs(veryBig), num) // BDouble is very similar, you can find a detailed description on Github let fraction = BDouble("27", over: "31") print(fraction) // prints "27/31" 

Вы можете использовать его свободно, не давая мне кредита, и, пожалуйста, внесите свой вклад, если хотите.

Вы можете найти его здесь: https://github.com/mkrd/Swift-Big-Integer

Вот.

https://github.com/dankogai/swift-pons

На самом деле BigInt является лишь частью этого. В дополнение к BigInt вы получаете:

  • общий Rational, который принимает форму Int8 в BigInt как числитель и знаменатель
  • generic Complex, который принимает либо целые числа (гауссовские целые числа), либо реальные числа не только Double и Float, но и Rational.
  • Чисто быстро. Работает не только на OS X, iOS и tvOS, но и на Linux. Успешно работает на игровой площадке.

Но, самое главное, он ориентирован на протокол, поэтому вы можете расширить целое число, например:

 import PONS func fib(n:T)->T { // with a little better algorithm if n < T(2) { return n } var (a, b) = (T(0), T(1)) for _ in 2...n { (a, b) = (b, a+b) } return b } let F11 = fib(11 as Int8) let F13 = fib(13 as UInt8) let F23 = fib(23 as Int16) let F24 = fib(24 as UInt16) let F46 = fib(46 as Int32) let F47 = fib(47 as UInt32) let F92 = fib(92 as Int64) let F93 = fib(93 as UInt64) let F666 = fib(666 as BigInt) 

Дэн генератор чисел

Я нашел прототип BigInt в официальном репозитории Swift: https://github.com/apple/swift/blob/master/test/Prototypes/BigInt.swift

Возможно, вы можете просто скопировать его в свой проект и использовать его. Может быть, когда-нибудь он будет добавлен в стандартную библиотеку.

  • Как сделать случайное число между диапазоном для arc4random_uniform ()?
  • Как отправить запрос POST с BODY в быстром
  • Безопасный (проверенный граница) поиск массива в Swift через дополнительные привязки?
  • Xcode 8 / Swift 3: простой код UIPicker не работает
  • iAd в xcode 6 с Swift
  • Прочитайте файл / URL-адрес по строке в Swift
  • Можно ли смешивать Swift с C ++? Как и файлы Objective - C .mm
  • Какова точка входа быстрого выполнения кода?
  • Получение «файла не обнаружено» в заголовке Bridging при импорте инфраструктур Objective-C в проект Swift
  • Получить пользовательскую версию имени classа в swift (в objc NSStringFromClass было хорошо)
  • escape словарный ключ двойного кавычки при выполнении пункта println словаря в Swift
  • Interesting Posts

    В чем разница между ними (bCondition == NULL) и (NULL == bCondition)?

    Android: масштабировать графическое или фоновое изображение?

    Является ли строка Java действительно неизменной?

    Настройка с 8.1 по 10: что-то случилось> Установке не удалось проверить ключ продукта

    В мультимодульном проекте Maven, как отключить плагин у одного ребенка?

    Инициализировать определение вложенной структуры в Голанге

    В чем разница между JPA и Hibernate?

    Должен ли я включать каждый заголовок?

    Является ли HTTP-заголовком Referer отправленным при переходе на страницу http с https-страницы?

    Способы синхронизации комментариев интерфейса и реализации в C #

    Создание шаблона / стойкого шаблона заголовка / нижнего колонтитула в jQuery Mobile и PhoneGap

    Как разрешить «Дублировать файлы, скопированные в APK META-INF / *»,

    Устранение неполадок, связанных с подключением к Интернету через Wi-Fi на OS X

    Клавиатура iMessage Receding в приложении iOS

    Извлечение последних n символов из строки в R

    Давайте будем гением компьютера.