Skip to content

A wrapper struct for f64 to guarantee certain f64 values are non-negative using types.

License

Notifications You must be signed in to change notification settings

hydrogen602/unsigned-f64

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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).

For a more complete feature set, see typed_floats.

In order to address issues with -0.0 being able to turn into negative numbers, -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 for UnsignedF64
  • Implement traits for &UnsignedF64
  • Implement serde's Serialize & Deserialize (using features?)

About

A wrapper struct for f64 to guarantee certain f64 values are non-negative using types.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages