Math::Logic::Ternary::TAPI27 - ternary arbitrary precision integer format
This documentation refers to version 0.003 of Math::Logic::Ternary::TAPI27.
use Math::Logic::Ternary::TAPI27; $i1 = Math::Logic::Ternary::TAPI27->new(@trits); $i2 = $i1->Ineg; $i3 = $i1->Iadd($i2); $i3 = $i1->Isub($i2); $i3 = $i1->Imul($i2); $i3 = $i1->Idiv($i2); $i3 = $i1->Imod($i2); ($q, $r) = $i1->Idivmod($i2); $i3 = $i1->Ipow($i2); $i2 = $i1->Iabs; $trit = $i1->Icmp($i2); $trit = $i1->Iasc($i2); @nonets = $i1->Words(9); $bigint = $i1->as_int;
This module defines an arbitrary precision ternary integer format and emulates some basic operations on numbers of this format.
TAPI27 numbers are coded as sequences of variable length of 27-trit words. The first word is interpreted as a balanced ternary integer number. It must not be negative. It denotes the size of the actual number in words (not including itself). It is followed by the given number of 27-trit words ordered from least to most significant word. Thus zero has the smallest possible representation of a single 27-trit zero.
The largest representable number takes 3_812798_742494 words (102_945566_047338 trits) and is equal to (3 ** 102_945566_047311 - 1) / 2, which is close to 2 ** 163_164861_800500 or 4.014 * 10 ** 49_117517_640318.
(3 ** 102_945566_047311 - 1) / 2
2 ** 163_164861_800500
4.014 * 10 ** 49_117517_640318
Examples (words written in most significant trit left, balanced base 27 notation):
-3 = ________a, ________X -2 = ________a, ________Y -1 = ________a, ________Z 0 = _________ 1 = ________a, ________a 2 = ________a, ________b 3 = ________a, ________c 3812798742493 = ________a, mmmmmmmmm 3812798742494 = ________b, NNNNNNNNN, ________a 3812798742495 = ________b, NNNNNNNNO, ________a 29074868501520029845195084 = ________b, mmmmmmmmm, mmmmmmmmm 29074868501520029845195085 = ________c, NNNNNNNNN, NNNNNNNNN, ________a 29074868501520029845195086 = ________c, NNNNNNNNO, NNNNNNNNN, ________a
Note that the trits within a TAPI27 number are in the same order as in a very large word but need only 27-trit alignment.
Nothing is exported into the caller's namespace.
This module depends on Math::BigInt and Math::Logic::Ternary::Word. Installing Math::BigInt::GMP or Math::BigInt::Pari should make it faster.
As of version 0.003, this module is not fully implemented. The documentation is intended as a preview of its eventual content.
However, the definition of the TAPI27 number format, as given here, should be taken as authoritative, and can be used as a reference.
Note that there is actually a size limit for TAPI27 numbers a little above 100 Teratrits. Architectures built for higher precision than that should use TAPI27a as a replacement, which is upward compatible and unlimited.
Note also that TAPI27/TAPI27a numbers on one hand and TAPI_9 numbers on the other hand are not intended to be interoperable, beyond simple type conversions.
Math::Logic::Ternary
Math::Logic::Ternary::Word
Math::BigInt
Martin Becker <becker-cpan-mp@cozap.com>
Copyright (c) 2012-2017 by Martin Becker. All rights reserved.
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.8.0 or, at your option, any later version of Perl 5 you may have available.
To install Math::Logic::Ternary, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Math::Logic::Ternary
CPAN shell
perl -MCPAN -e shell install Math::Logic::Ternary
For more information on module installation, please visit the detailed CPAN module installation guide.