Swiftpack.co - mgriebling/Integers as Swift Package

Swiftpack.co is a collection of thousands of indexed Swift packages. Search packages.
mgriebling/Integers 1.1.1
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.
⭐️ 0
🕓 6 days ago
.package(url: "https://github.com/mgriebling/Integers.git", from: "1.1.1")

Integers

Implements integer values of arbitrary magnitude. Includes all standard arithmetic and logic operations. The Integer type is compliant to the BinaryInteger and SignedInteger Swift protocols. A preliminary version of rational numbers is also included with basic arithmetic operations. Original Oberon-2 source Copyright © 2002, 2003, 2015 Michael van Acken and Michael Griebling Ported to Swift by Michael Griebling, 18 July 2015. Swift source Copyright © 2015 - 2022 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 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

Examples

Check standard Int conversion to Integer:

Int.max = 9223372036854775807
Int.min = -9223372036854775808
1000! = 40238726007709377354370243392300398571937486421071463254379991042993851239862902059204420848696
9404800479988610197196058631666872994808558901323829669944590997424504087073759918823627727188732519779
5059509952761208749754624970436014182780946464962910563938874378864873371191810458257836478499770124766
3288983595573543251318532395846307555740911426241747434934755342864657661166779739666882029120737914385
3719588249808126867838374559731746136085379534524221586593201928090878297308431392844403281231558611036
9768013573042161687476096758713483120254785893207671691324484262361314125087802080002616831510273418279
7770478463586817016436502415369139828126481021309276124489635992870511496497541990934222156683257208082
1333186116811553615836546984046708975602900950537616475847728421889679646244945160765353408198901385442
4879849599533191017233555566021394503997362807501378376153071277619268490343526252000158885351473316117
0210396817592151090778801939317811419454525722386554146106289218796022383897147608850627686296714667469
7562911234082439208160153780889893964518263243671616762179168909779911903754031274622289988005195444414
2820121873617459926429565817466283029555702990243241531816172104658320367869061172601587835207515162842
2554026517048330422614397428693306169089796848259012545832716822645806652676995865268227280707578139185
8178889652208164348344825993266043367660176999612831860788386150279465955131156552036093988180612138558
6003014356945272242063446317974605946825731037900840244324384656572450144028218852524709351906209290231
3649327349756551395872055965422874977401141334696271542284586237738753823048386568897646192738381490014
0767310446640259899490222221765904339901886018566526485061799702356193897017860040811889729918311021171
2298459016419210688843871218556461249607987229085192968193723886426148396573822911231250241866493531439
7013742853192664987533721894069428143411852015801412334482801505139969429015348307764456909907315243327
8288269864602789864321139083506217095002597389863554277196742822248757586765752344220207573630569498825
0879689281627538488633969099598262809561214509948717012445164612603790293091208890869420285106401821543
9945715680594187274899809425474217358240106367740459574178516082923013535808184009699637252423056085590
3700624271243416909004153690105933983835777939410970027753472000....000

Testing Integer sequence...

1
2
3
4

Integer(1.23456789e+18) = 1234567890000000000

Debug description of Integer(69)! ->

Dump =  size=11, digits=0 0 208483648 1760158 815281888 388340220 147380948 549955052 405677315 320051255 84005611 , base=1073741824

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: 6 days ago
Something's broken? Yell at me @ptrpavlik. Praise and feedback (and money) is also welcome.

Release Notes

V1.0.0 Release
29 weeks ago

Changed method visibility to allow public access.

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