Crate fraction [−] [src]
Fraction and its arithmetic
The main goal of Fraction is keeping precision that floats cannot do.
Fractions do not lose information about numbers and thus can be used for matching, comparisons and hashing (key values for HashMaps).
Base arithmetic operators are also available (+ - / *), even though they work slower than for native numbers.
Overflow checks are being performed for every arithmetic operation, so that Fraction becomes infinite, negative_infinite or NaN.
Examples
Simple arithmetic
use fraction::Fraction; fn main () { let mut fr = Fraction::zero (); fr = fr + Fraction::from (2); // 0 + 2 = 2 fr = fr / Fraction::from (0.5); // 2 / 0.5 = 4 assert_eq! (fr, Fraction::from (4)); }
Using as keys for a HashMap
use std::collections::HashMap; use fraction::Fraction; fn main () { let f = Fraction::from (0.75); let mut map: HashMap<Fraction, ()> = HashMap::new (); map.insert (f, ()); assert! (map.contains_key (&Fraction::new (3, 4))); // 0.75 == 3/4 assert! (map.contains_key (&Fraction::new (6, 8))); // 0.75 == 6/8 assert! (map.contains_key (&Fraction::new (12, 16))); // 0.75 == 12/16 assert! (! map.contains_key (&Fraction::from (0.5))); // 0.75 != 1/2 }
Comparison
use fraction::Fraction; fn main () { let f14 = Fraction::new (1, 4); // 1/4 == 0.25 let f12 = Fraction::new (1, 2); // 1/2 == 0.50 let f24 = Fraction::new (2, 4); // 2/4 == 0.50 let f34 = Fraction::new (3, 4); // 3/4 == 0.75 assert_eq! (f12, f24); // 1/2 == 2/4 assert_eq! (f34, f12 + f14); // 3/4 == 1/2 + 1/4 assert_eq! (f14, Fraction::from (0.25)); // 1/4 == 0.25 }
Structs
Fraction |
Fraction is the main structure that keeps number representation internally. |