2 unstable releases
0.2.0 | Oct 5, 2023 |
---|---|
0.1.0 | Feb 26, 2023 |
#1164 in Math
17KB
407 lines
UnsignedF64
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
.
How To
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
);
ToDo
- Implement the methods where I'm not sure if they can return negative numbers or not
- Implement
std::ops::Rem
forUnsignedF64
- Implement traits for
&UnsignedF64
- Implement serde's Serialize & Deserialize (using features?)