2 stable releases
1.0.1 | Oct 15, 2024 |
---|
#87 in No standard library
51KB
1.5K
SLoC
OmegaNum.rs
This is a direct port of Naruyoko's OmegaNum.js to Rust.
Using this library, you are able to store numbers up to 10{N}9e15 in Bower's operator notation, with no hard limit on N. Note that some functions (for example, the gamma function) are left unimplemented. I may add them in later.
This crate supports #![no-std]
.
Features
default
: Enablesstd
std
: Enables using the standard libraryerror_in_core
: Enables implementing the recently stabilized[^1]core::error::Error
on error types whenstd
is not enabledlibm
: Required withoutstd
enabled for mathserde
: Enables support forserde::Serialize
andserde::Deserialize
f16
: Enables support for converting from the experimentalf16
type
An f128
feature is planned for when that type gains the necessary method log10
.
[^1]: in Rust version 1.81.0
Usage
use omeganum::{OmegaNum, constant};
use std::borrow::Cow;
// Create constants like this:
const ONE: OmegaNum = constant!(1);
// or like this:
const TEN_E_TWENTY: OmegaNum = OmegaNum::from_parts(
// The base and array are stored separately,
// which makes numerous operations much faster by avoiding
// accessing the heap
1.0, Cow::Borrowed(&[20.0])
);
// Numbers will coerce to OmegaNum when operated with them
assert_eq!(ONE + 1, 2);
// ONE + OmegaNum::from(1) == OmegaNum::from(2)
// Math operations move the value, requiring explicitly defined cloning
let seventeen = OmegaNum::from(17);
let log10_17 = seventeen.log10();
// The below code doesn't work, as log10 consumed seventeen
// println!("log10 {seventeen} is {log10_seventeen}");
// Instead, do this:
let seventeen = OmegaNum::from(17);
let log10_17 = seventeen.clone().log10();
println!("log10 {seventeen} is {log10_17}");
// Constants store their arrays statically:
let c = constant!(7);
assert!(matches!(c.into_parts().1, Cow::Borrowed(_)));
Licensing
This project is under the MIT license, which can be found at the root of the repository under LICENSE
.
Additionally, the license of OmegaNum.js, the work this is derived from, can be found at LICENSE-OMEGANUM
- it is also licensed under the MIT license.
Dependencies
~93–405KB