Swiftpack.co -  mgriebling/Integers as Swift Package
Swiftpack.co is a collection of thousands of indexed Swift packages. Search packages.
mgriebling/Integers
Implements integer values of arbitrary magnitude. Includes all standard arithmetic and logic operations. A preliminary version of rational numbers is also included with basic arithmetic operations.
.package(url: "https://github.com/mgriebling/Integers.git", from: "1.0.0")

Integers

Implements integer values of arbitrary magnitude. Includes all standard arithmetic and logic operations. A preliminary version of rational numbers is also included with basic arithmetic operations.

This module is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

This module is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public License along with Integers. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

This module is a reformulation of (parts of) Python's longobject.c in Swift. Optimizations like Karatsuba multiplication and string conversion for power of two base have been omitted. All errors are mine, of course.

Added algorithms are from Knuth: The Art Of Computer Programming, Vol 2, section 4.3.1

Ported to Swift by Michael Griebling, 18 July 2015.

Examples

Check standard Int conversion to Integer:

``````Int.max = 9223372036854775807
Int.min = -9223372036854775808
``````
``````1000! = 402387260077093773543702433923003985719374864210714632543799910429938512398629020592044208486969404800479988610197196058631666872994808558901323829669944590997424504087073759918823627727188732519779505950995276120874975462497043601418278094646496291056393887437886487337119181045825783647849977012476632889835955735432513185323958463075557409114262417474349347553428646576611667797396668820291207379143853719588249808126867838374559731746136085379534524221586593201928090878297308431392844403281231558611036976801357304216168747609675871348312025478589320767169132448426236131412508780208000261683151027341827977704784635868170164365024153691398281264810213092761244896359928705114964975419909342221566832572080821333186116811553615836546984046708975602900950537616475847728421889679646244945160765353408198901385442487984959953319101723355556602139450399736280750137837615307127761926849034352625200015888535147331611702103968175921510907788019393178114194545257223865541461062892187960223838971476088506276862967146674697562911234082439208160153780889893964518263243671616762179168909779911903754031274622289988005195444414282012187361745992642956581746628302955570299024324153181617210465832036786906117260158783520751516284225540265170483304226143974286933061690897968482590125458327168226458066526769958652682272807075781391858178889652208164348344825993266043367660176999612831860788386150279465955131156552036093988180612138558600301435694527224206344631797460594682573103790084024432438465657245014402821885252470935190620929023136493273497565513958720559654228749774011413346962715422845862377387538230483865688976461927383814900140767310446640259899490222221765904339901886018566526485061799702356193897017860040811889729918311021171229845901641921068884387121855646124960798722908519296819372388642614839657382291123125024186649353143970137428531926649875337218940694281434118520158014123344828015051399694290153483077644569099073152433278288269864602789864321139083506217095002597389863554277196742822248757586765752344220207573630569498825087968928162753848863396909959826280956121450994871701244516461260379029309120889086942028510640182154399457156805941872748998094254742173582401063677404595741785160829230135358081840096996372524230560855903700624271243416909004153690105933983835777939410970027753472000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
``````

Testing Integer sequence...

``````1
2
3
4
``````

Integer(1.23456789e+18) = 1234567890000000000

Debug description of Integer(1000) ->

``````[size=1, digits=1000 , base=1073741824]
[98, 112, 108, 105, 115, 116, 48, 48, 210, 1, 2, 3, 5, 85, 100, 105, 103, 105, 116, 88, 110, 101, 103, 97, 116, 105, 118, 101, 161, 4, 17, 3, 232, 8, 8, 13, 19, 28, 30, 33, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34]
``````

Encoding/decoding test:

``````Encoded 1000 = Decoded 1000
``````

Modulo Tests:

``````9 % 4 = 1
-9 % 4 = -1
9 % -4 = 1
-9 % -4 = -1
``````

Rational Tests:

``````a = 1/6; b = 2/3
a+b=5/6
a-b=-1/2
a\*b=1/9
a/b=1/4
b^10=1024/59049
``````

GitHub

 link Stars: 0 Last commit: 4 weeks ago

iOS Software Engineer @ Perry Street Software
Perry Street Software is Jack’d and SCRUFF. We are two of the world’s largest gay, bi, trans and queer social dating apps on iOS and Android. Our brands reach more than 20 million members worldwide so members can connect, meet and express themselves on a platform that prioritizes privacy and security. We invest heavily into SwiftUI and using Swift Packages to modularize the codebase.

Release Notes

V1.0.0 Release
4 weeks ago

Changed method visibility to allow public access.

Swiftpack is being maintained by Petr Pavlik | @ptrpavlik | @swiftpackco | API