pub fn factorial(n: u32) -> f64 {
        let mut result = 1.0_f64;
        let mut i = 1_u32;
        while i <= n {
            result *= i as f64;
            i += 1;
        }
        result
    }