algebraic numbers library
Project description
Algebraic Numbers Library
Use when you need exact arithmetic, speed is not critical, and rational numbers aren't good enough.
Example:
use algebraics::prelude::*;
use algebraics::RealAlgebraicNumber as Number;
let two = Number::from(2);
// 2 is a rational number
assert!(two.is_rational());
// 1/2 is the reciprocal of 2
let one_half = two.recip();
// 1/2 is also a rational number
assert!(one_half.is_rational());
// 2^(1/4)
let root = (&two).pow((1, 4));
// we can use all the standard comparison operators
assert!(root != Number::from(3));
assert!(root < Number::from(2));
assert!(root > Number::from(1));
// we can use all of add, subtract, multiply, divide, and remainder
let sum = &root + &root;
let difference = &root - Number::from(47);
let product = &root * &one_half;
let quotient = &one_half / &root;
let remainder = &root % &one_half;
// root is not a rational number
assert!(!root.is_rational());
// the calculations are always exact
assert_eq!((&root).pow(4), two);
// lets compute 30 decimal places of root
let scale = Number::from(10).pow(30);
let scaled = &root * scale;
let digits = scaled.into_integer_trunc();
assert_eq!(
digits.to_string(),
1_18920_71150_02721_06671_74999_70560u128.to_string()
);
// get the minimal polynomial
let other_number = root + two.pow((1, 2));
assert_eq!(
&other_number.minimal_polynomial().to_string(),
"2 + -8*X + -4*X^2 + 0*X^3 + 1*X^4"
);
// works with really big numbers
let really_big = Number::from(1_00000_00000i64).pow(20) + Number::from(23);
assert_eq!(
&really_big.to_integer_floor().to_string(),
"100000000000000000000000000000000000000000000\
000000000000000000000000000000000000000000000\
000000000000000000000000000000000000000000000\
000000000000000000000000000000000000000000000\
000000000000000000023"
)
Python support
Using algebraics from Python:
python3 -m pip install algebraics
from algebraics import RealAlgebraicNumber
sqrt_2 = 2 ** (RealAlgebraicNumber(1) / 2)
assert sqrt_2 * sqrt_2 == 2
Using algebraics in your own Rust project:
[dependencies.algebraics]
version = "0.3"
Developing algebraics:
cargo install maturin
maturin develop --cargo-extra-args="--features python-extension"
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
algebraics-0.3.0.tar.gz
(131.1 kB
view details)
File details
Details for the file algebraics-0.3.0.tar.gz
.
File metadata
- Download URL: algebraics-0.3.0.tar.gz
- Upload date:
- Size: 131.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/34.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.9 tqdm/4.63.1 importlib-metadata/4.11.3 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.3 CPython/3.8.10
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5fa3e7ed05e9ab9782db293f9dc7913531725fba2c2439b90c0af8ee0e08d402 |
|
MD5 | 15d6ad817e6e468f08f0b1ced43e0c72 |
|
BLAKE2b-256 | 8f43cfefe13bd006d3a93398774f465d83d0c77218defdc2bdfb13c164bf60b2 |