| Crates.io | unsigned-f64 |
| lib.rs | unsigned-f64 |
| version | 0.2.0 |
| created_at | 2023-02-26 07:34:21.468489+00 |
| updated_at | 2023-10-05 03:54:50.418585+00 |
| description | A wrapper around f64 that guarantees that the value is always non-negative on the type level. |
| homepage | https://github.com/hydrogen602/unsigned-f64 |
| repository | https://github.com/hydrogen602/unsigned-f64 |
| max_upload_size | |
| id | 794889 |
| size | 18,119 |
A library to add the equivalent of unsigned ints to floats by making a UnsignedF64 that can't be negative. This idea is for cases like simulation code, where bugs are hard to debug and types don't add much safety (Since everyting is a f64).
Note:
Given that this problem is way more complicated than I thought (e.g. -0.0 isn't negative but creates a path to negative numbers via -Inf, see https://github.com/hydrogen602/unsigned-f64/issues/1), I would thus recommend the typed_floats library which addresses this problem much more throughly.
In order to address the above issue, -0.0 will be converted to 0.0 when calling UnsignedF64::new.
Create new unsigned floats using UnsignedF64::new. This will check if the f64 is negative or not and return an Option. Many f64 methods are implemented on UnsignedF64 so that numbers don't have to be rechecked when non-negativeness is guaranteed, e.g. the square root of an UnsignedF64 is guaranteed to be non-negative, so sqrt returns UnsignedF64.
// An example of using the UnsignedF64 type.
let point1 = (3., 4.);
let point2 = (5., 12.);
fn distance(p1: (f64, f64), p2: (f64, f64)) -> UnsignedF64 {
let x = p1.0 - p2.0;
let y = p1.1 - p2.1;
(UnsignedF64::square(x) + UnsignedF64::square(y)).sqrt()
}
let d = distance(point1, point2);
println!(
"The distance between {:?} and {:?} is {}",
point1, point2, d
);
std::ops::Rem for UnsignedF64&UnsignedF64