veloren_common/util/div.rs
1/// Divides two floats or returns `None` if the denominator is zero or if any
2/// inputs are `NaN`. Rust provides `checked_div`, but not for floats, so this
3/// function is needed.
4///
5/// Here is an example:
6///
7/// ```
8/// use veloren_common::util::div::checked_div;
9///
10/// assert!(checked_div(50.0_f32, 0.0_f32).is_none());
11/// ```
12pub fn checked_div<T>(num: T, den: T) -> Option<T>
13where
14 T: num_traits::Float,
15{
16 if den.is_zero() || den.is_nan() || num.is_nan() {
17 None
18 } else {
19 Some(num / den)
20 }
21}