## no-std infinitable

Infinity for types without infinite values

### 8 stable releases

 1.6.0 May 10, 2024 Apr 13, 2023 Feb 4, 2023 Apr 18, 2020 Oct 10, 2017

#207 in Math

BSD-2-Clause

31KB
244 lines

# Infinitable (Rust)

Infinitable is a simple library for introducing the notion of "infinity" and "negative infinity" to numeric types, such as integers, that do not have infinite values.

A representation of infinity is useful for graph algorithms such as Dijkstra's algorithm, as well as for representing a graph with an adjacency matrix.

## Usage

Simply install the `infinitable` crate, available on Crates.io.

``````use infinitable::Infinitable;

fn main() {
let finite = Infinitable::Finite(5);
let infinity = Infinitable::Infinity;
let negative_infinity = Infinitable::NegativeInfinity;

assert!(finite < infinity);
assert!(finite > negative_infinity);
}
``````

## Tests

Tests are in the `tests` directory. Simply run `cargo test`.

The infinite values provided by Infinitable are different from the existing infinite values in floating-point numeric types. Therefore, simply using `Finite` or `Infinitable::from` to convert from a floating-point value to an `Infinitable` may lead to unintuitive results:

``````use infinitable::Infinitable;

fn main() {
let infinitable_infinity = Infinitable::Infinity;
let fp_infinity = Infinitable::Finite(f64::INFINITY);

assert!(infinitable_infinity > fp_infinity);
}
``````

The library provides the `from_f32` and `from_f64` functions to convert from floating-point values while taking into account infinite values and NaN:

``````use infinitable::Infinitable;

fn main() {
let infinitable_infinity = Infinitable::Infinity;
let fp_infinity = infinitable::from_f64(f64::INFINITY).unwrap();

assert!(infinitable_infinity == fp_infinity);
}
``````

Infinitable is available under the 2-clause BSD license. Refer to `LICENSE.txt` for details.