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.

Copyright © 2002, 2003, 2015 Michael van Acken and Michael Griebling

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

Ad: Job Offers

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