Balanced Ternary
Balanced Ternary is a Rust library for manipulating
balanced ternary
numbers, a numeral system with digits -1, 0, and +1.
This system is useful in areas like computer science and mathematics due to its symmetry and unique arithmetic properties.
Features
- No Standard Library: Suitable for
#![no_std]environments. - Number Conversions: Convert between decimal and balanced ternary representations.
- Arithmetic Operations: Support for addition, subtraction, multiplication, and division.
- Three-value Logic Operations:
- Support for bitwise and, or, xor, and not (in Kleene algebra (K3)).
- Advanced logic: Implementation of K3, BI3, L3, RM3, paraconsistent-logic and HT imply operation, and some more HT, BI3, L3 and post-logic operations.
- Custom Representation: Parse and display numbers using
+,0, and-symbols. - Provides the types:
Digit(Neg,ZeroorPos),Ternary(heap allocated variable-length balanced-ternary number),Tryte(6 characters long copy-type ternary number).
Digits operations
| Unary operations | - | 0 | + |
|---|---|---|---|
| possibly (L3) | - | + | + |
| necessary (L3) | - | - | + |
| contingently (L3) | - | + | - |
| ht_not (HT) | + | - | - |
post (post logic)eqv. self.pre().pre() |
0 | + | - |
pre (inverse of post)eqv. self.post().post() |
+ | - | 0 |
! (not) / - (neg) (L3) |
+ | 0 | - |
| absolute_positive | + | 0 | + |
| positive | 0 | 0 | + |
| not_negative | 0 | + | + |
| not_positive | - | - | 0 |
| negative | - | 0 | 0 |
| absolute_negative | - | 0 | - |
| inc | 0 | + | +- |
| dec | -+ |
- | 0 |
| Binary operations | -- | -0 | -+ | 0- | 00 | 0+ | +- | +0 | ++ |
|---|---|---|---|---|---|---|---|---|---|
+ (add) |
-+ |
- | 0 | - | 0 | + | 0 | + | +- |
- (sub) |
0 | - | -+ |
+ | 0 | - | +- |
+ | 0 |
/ (div) |
+ | - | 0 | 0 | - | + | |||
* (mul) |
+ | 0 | - | 0 | 0 | 0 | - | 0 | + |
& (bitand) (L3) |
- | - | - | - | 0 | 0 | - | 0 | + |
| bi3_and (BI3) | - | 0 | - | 0 | 0 | 0 | - | 0 | + |
| (bitor) (L3) |
- | 0 | + | 0 | 0 | + | + | + | + |
| bi3_or (BI3) | - | 0 | + | 0 | 0 | 0 | + | 0 | + |
^ (bitxor) (L3) |
- | 0 | + | 0 | 0 | 0 | + | 0 | - |
| k3_equiv (K3) | + | 0 | - | 0 | 0 | 0 | - | 0 | + |
| k3_imply (K3) | + | + | + | 0 | 0 | + | - | 0 | + |
| bi3_imply (BI3) | + | 0 | + | 0 | 0 | 0 | - | 0 | + |
| l3_imply (L3) | + | + | + | 0 | + | + | - | 0 | + |
| rm3_imply (RM3) | + | + | + | - | 0 | + | - | - | + |
| para_imply (HT) | + | + | + | - | 0 | + | - | 0 | + |
| ht_imply (HT) | + | + | + | - | + | + | - | 0 | + |
Examples
Convert between decimal and balanced ternary
use *;
Perform arithmetic or logic operations
use *;
Handle negative numbers
use *;
Installation
Add the following to your Cargo.toml:
[]
= "0.2.*"
License
Copyright (c) 2025 Sébastien GELDREICH
Balanced Ternary is licensed under the MIT License.