h_math 1.0.0

A Rust library for simple and advanced mathematical computations.
Documentation

/// h_math /// /// A comprehensive math library for Rust, providing a wide range of mathematical functions and utilities. /// The library is designed to be easy to use with traits and generics. /// The naming conventions for traits and functions are h_ followed by what the trait and function does. /// /// # Examples /// h_average, h_median, h_haramond_product, h_factorial, h_sphere_volume ect. /// /// use h_math::prelude::*; for the best experience, as it will import all the traits and functions into scope. /// and since the traits are implemented for primitive types, you can call the functions directly on the values. /// also, since the functions and traits always hav h_xxxxxx you won't have to worry about naming conflicts with other libraries. /// /// Please refer to the documentation for each module for more details on the available functions and how to use them. /// /// # Core Mathematics Functions /// /// ## Factorial Trait (Factorial) /// - Function: h_factorial() /// - Input: Any numeric type implementing Copy + PartialOrd + Into<u32> /// - Output: u64 /// - Purpose: Calculates the factorial of a number (n!) /// - Formula: n! = n × (n-1) × (n-2) × ... × 1 /// - Panics: If given a negative number /// /// ## Root Degree Trait (RootDegree) /// - Function: h_root_degree(degree: u32) /// - Input: Self (numeric type), degree (u32) /// - Output: f64 /// - Purpose: Calculates the nth root of a number /// - Formula: ⁿ√x = x^(1/n) /// /// ## h_sigma Function /// - Signature: h_sigma<T>(start: T, repetitions: u32, steps: T) -> f64 /// - Input: start value, number of repetitions, step size /// - Output: f64 (sum) /// - Purpose: Calculates the sum of an arithmetic sequence /// - Example: h_sigma(1, 5, 1) sums 1+2+3+4+5 = 15 /// /// ## h_arrange_vec Function /// - Signature: h_arrange_vec<I>(start: I, stop: I, step: I) -> Vec<f64> /// - Input: start value, stop value, step size /// - Output: Vec<f64> containing evenly spaced values /// - Purpose: Creates a vector of evenly spaced numbers from start to stop /// - Returns empty: If step is 0, or if direction is invalid (positive step but start > stop) /// /// ## h_pi Function /// - Signature: h_pi() -> f64 /// - Input: None /// - Output: f64 (π) /// - Purpose: Returns the mathematical constant π (3.14159265...) /// /// # Algebra Functions /// /// ## h_quadratic_equation Function /// - Signature: h_quadratic_equation<A,B,C>(a: A, b: B, c: C) -> (f64, f64) /// - Input: Coefficients a, b, c of ax² + bx + c = 0 /// - Output: (f64, f64) tuple with two roots /// - Purpose: Solves quadratic equations using the quadratic formula /// - Formula: x = (-b ± √(b² - 4ac)) / 2a /// - Panics: If discriminant is negative (no real roots) /// /// ## h_simple_eq_checker_x Function /// - Signature: h_simple_eq_checker_x<...>(x_value: X, num_left: NL, x_left: XL, num_right: NR, x_right: XR) -> bool /// - Input: x value to check, left side numeric coefficient, left side x coefficient, right side numeric coefficient, right side x coefficient /// - Output: bool /// - Purpose: Checks if a given x value satisfies a linear equation: (x_left × x + num_left) = (x_right × x + num_right) /// /// # Temperature Conversions /// /// ## CelsiusToFahrenheit Trait /// - Function: h_celsius_to_fahrenheit() /// - Input: Temperature in Celsius /// - Output: f64 (Fahrenheit) /// - Formula: (C × 9/5) + 32 /// /// ## FahrenheitToCelsius Trait /// - Function: h_fahrenheit_to_celsius() /// - Input: Temperature in Fahrenheit /// - Output: f64 (Celsius) /// - Formula: (F - 32) × 5/9 /// /// ## CelsiusToKelvin Trait /// - Function: h_celsius_to_kelvin() /// - Input: Temperature in Celsius /// - Output: f64 (Kelvin) /// - Formula: C + 273.15 /// /// ## KelvinToCelsius Trait /// - Function: h_kelvin_to_celsius() /// - Input: Temperature in Kelvin /// - Output: f64 (Celsius) /// - Formula: K - 273.15 /// /// ## FahrenheitToKelvin Trait /// - Function: h_fahrenheit_to_kelvin() /// - Input: Temperature in Fahrenheit /// - Output: f64 (Kelvin) /// - Formula: ((F - 32) × 5/9) + 273.15 /// /// ## KelvinToFahrenheit Trait /// - Function: h_kelvin_to_fahrenheit() /// - Input: Temperature in Kelvin /// - Output: f64 (Fahrenheit) /// - Formula: ((K - 273.15) × 9/5) + 32 /// /// # Length Conversions /// /// ## MetersToKilometers Trait /// - Function: h_meters_to_kilometers() /// - Input: Distance in meters /// - Output: f64 (kilometers) /// - Formula: m ÷ 1000 /// /// ## KilometersToMeters Trait /// - Function: h_kilometers_to_meters() /// - Input: Distance in kilometers /// - Output: f64 (meters) /// - Formula: km × 1000 /// /// ## CentimetersToMeters Trait /// - Function: h_centimeters_to_meters() /// - Input: Distance in centimeters /// - Output: f64 (meters) /// - Formula: cm ÷ 100 /// /// ## MetersToCentimeters Trait /// - Function: h_meters_to_centimeters() /// - Input: Distance in meters /// - Output: f64 (centimeters) /// - Formula: m × 100 /// /// ## CentimetersToMillimeters Trait /// - Function: h_centimeters_to_millimeters() /// - Input: Distance in centimeters /// - Output: f64 (millimeters) /// - Formula: cm × 10 /// /// ## MillimetersToCentimeters Trait /// - Function: h_millimeters_to_centimeters() /// - Input: Distance in millimeters /// - Output: f64 (centimeters) /// - Formula: mm ÷ 10 /// /// ## KilometersToMiles Trait /// - Function: h_kilometers_to_miles() /// - Input: Distance in kilometers /// - Output: f64 (miles) /// - Formula: km × 0.621371 /// /// ## MilesToKilometers Trait /// - Function: h_miles_to_kilometers() /// - Input: Distance in miles /// - Output: f64 (kilometers) /// - Formula: miles ÷ 0.621371 /// /// ## InchesToCentimeters Trait /// - Function: h_inches_to_centimeters() /// - Input: Distance in inches /// - Output: f64 (centimeters) /// - Formula: inches × 2.54 /// /// ## CentimetersToInches Trait /// - Function: h_centimeters_to_inches() /// - Input: Distance in centimeters /// - Output: f64 (inches) /// - Formula: cm ÷ 2.54 /// /// ## CentimetersToDecimeters Trait /// - Function: h_centimeters_to_decimeters() /// - Input: Distance in centimeters /// - Output: f64 (decimeters) /// - Formula: cm ÷ 10 /// /// ## DecimetersToCentimeters Trait /// - Function: h_decimeters_to_centimeters() /// - Input: Distance in decimeters /// - Output: f64 (centimeters) /// - Formula: dm × 10 /// /// # Geometry Functions /// /// ## CircleCircumference Trait /// - Function: h_circle_circumference() /// - Input: Radius of circle /// - Output: f64 /// - Purpose: Calculates the circumference of a circle /// - Formula: 2πr /// /// ## CircleArea Trait /// - Function: h_circle_area() /// - Input: Radius of circle /// - Output: f64 /// - Purpose: Calculates the area of a circle /// - Formula: πr² /// /// ## h_pythagorean_theorem Function /// - Signature: h_pythagorean_theorem<A, B>(a: A, b: B) -> f64 /// - Input: Two sides of a right triangle (a, b) /// - Output: f64 (hypotenuse) /// - Purpose: Calculates the hypotenuse of a right triangle /// - Formula: c = √(a² + b²) /// /// ## h_reverse_pythagorean_theorem Function /// - Signature: h_reverse_pythagorean_theorem<K, H>(x: K, h: H) -> f64 /// - Input: One known side (x) and hypotenuse (h) /// - Output: f64 (other side) /// - Purpose: Finds the missing side of a right triangle /// - Formula: a = √(h² - x²) /// /// ## h_find_equal_legs_from_hypotenuse Function /// - Signature: h_find_equal_legs_from_hypotenuse<H>(h: H) -> f64 /// - Input: Hypotenuse of an isosceles right triangle /// - Output: f64 (length of equal legs) /// - Purpose: Finds the length of equal legs in a 45-45-90 triangle /// - Formula: leg = √(h²/2) /// /// ## ShortFromLongLeg30_60_90 Trait /// - Function: h_short_from_long_leg_30_60_90() /// - Input: Long leg of a 30-60-90 triangle /// - Output: f64 (short leg) /// - Formula: short_leg = long_leg ÷ √3 /// /// # 3D Geometry Functions /// /// ## SphereVolume Trait /// - Function: h_sphere_volume() /// - Input: Radius of sphere /// - Output: f64 /// - Purpose: Calculates the volume of a sphere /// - Formula: V = (4/3)πr³ /// /// ## SphereSurfaceArea Trait /// - Function: h_sphere_surface_area() /// - Input: Radius of sphere /// - Output: f64 /// - Purpose: Calculates the surface area of a sphere /// - Formula: A = 4πr² /// /// ## CylinderVolume Trait /// - Function: h_cylinder_volume(height: H) /// - Input: Radius and height of cylinder /// - Output: f64 /// - Purpose: Calculates the volume of a cylinder /// - Formula: V = πr²h /// /// ## CylinderSurfaceArea Trait /// - Function: h_cylinder_surface_area(height: H) /// - Input: Radius and height of cylinder /// - Output: f64 /// - Purpose: Calculates the surface area of a cylinder /// - Formula: A = 2πr² + 2πrh /// /// ## CubeVolume Trait /// - Function: h_cube_volume() /// - Input: Side length of cube /// - Output: f64 /// - Purpose: Calculates the volume of a cube /// - Formula: V = s³ /// /// ## CubeSurfaceArea Trait /// - Function: h_cube_surface_area() /// - Input: Side length of cube /// - Output: f64 /// - Purpose: Calculates the surface area of a cube /// - Formula: A = 6s² /// /// ## ConeVolume Trait /// - Function: h_cone_volume(height: H) /// - Input: Radius and height of cone /// - Output: f64 /// - Purpose: Calculates the volume of a cone /// - Formula: V = (1/3)πr²h /// /// ## ConeSurfaceArea Trait /// - Function: h_cone_surface_area(height: H) /// - Input: Radius and height of cone /// - Output: f64 /// - Purpose: Calculates the surface area of a cone /// - Formula: A = πr(r + √(r² + h²)) where √(r² + h²) is the slant height /// /// ## RectangularPrismVolume Trait /// - Function: h_rectangular_prism_volume(height: H) /// - Input: Length/width and height of rectangular prism /// - Output: f64 /// - Purpose: Calculates the volume of a rectangular prism /// - Formula: V = l × w × h /// /// ## RectangularPrismSurfaceArea Trait /// - Function: h_rectangular_prism_surface_area(height: H) /// - Input: Length/width and height of rectangular prism /// - Output: f64 /// - Purpose: Calculates the surface area of a rectangular prism /// - Formula: A = 2(lw + lh + wh) /// /// ## PyramidVolume Trait /// - Function: h_pyramid_volume(height: H) /// - Input: Base area and height of pyramid /// - Output: f64 /// - Purpose: Calculates the volume of a pyramid /// - Formula: V = (1/3) × base_area × height /// /// ## SquarePyramidSurfaceArea Trait /// - Function: h_square_pyramid_surface_area(height: H) /// - Input: Base area and height of square pyramid /// - Output: f64 /// - Purpose: Calculates the surface area of a square pyramid /// - Formula: A = base_area + 2 × √(base_area/4) × slant_height /// /// # Finance Functions /// /// ## ROI Trait (Return on Investment) /// - Function: h_return_on_investment(new_value: f64) /// - Input: Initial investment value, new value /// - Output: f64 (percentage) /// - Purpose: Calculates return on investment as a percentage /// - Formula: ROI = ((new_value - initial) / initial) × 100 /// /// ## DiscountedPrice Trait /// - Function: h_decreased_price(decrease_percent: f64) /// - Input: Original price, discount percentage /// - Output: f64 (discounted price) /// - Purpose: Calculates the price after a percentage discount /// - Formula: discounted_price = original × (1 - percentage/100) /// /// ## IncreasedPrice Trait /// - Function: h_increased_price(increase_percent: f64) /// - Input: Original price, increase percentage /// - Output: f64 (increased price) /// - Purpose: Calculates the price after a percentage increase /// - Formula: new_price = original × (1 + percentage/100) /// /// # Probability Functions /// /// ## h_permutations Function /// - Signature: h_permutations<T, S>(total: &T, select: &S) -> u64 /// - Input: Total items (n), items to select (r) /// - Output: u64 (number of permutations) /// - Purpose: Calculates the number of ways to arrange r items from n items /// - Formula: P(n,r) = n! / (n-r)! /// /// ## h_combinations Function /// - Signature: h_combinations<T, S>(total: &T, select: &S) -> u64 /// - Input: Total items (n), items to select (r) /// - Output: u64 (number of combinations) /// - Purpose: Calculates the number of ways to choose r items from n items (order doesn't matter) /// - Formula: C(n,r) = n! / (r! × (n-r)!) /// /// # Statistics Functions /// /// ## Average Trait /// - Function: h_average() /// - Input: Slice of numeric values &[T] /// - Output: f64 /// - Purpose: Calculates the arithmetic mean of a set of numbers /// - Returns 0.0: If slice is empty /// /// ## Median Trait /// - Function: h_median() /// - Input: Slice of numeric values &[T] /// - Output: f64 /// - Purpose: Calculates the median (middle value) of a set of numbers /// - Behavior: For even-length sets, returns the average of two middle values /// - Returns 0.0: If slice is empty /// /// ## Sum Trait /// - Function: h_sum() /// - Input: Slice or Vec of numeric values /// - Output: f64 /// - Purpose: Calculates the sum of all elements /// /// ## Variance Trait /// - Function: h_variance() /// - Input: Slice of numeric values &[T] /// - Output: f64 /// - Purpose: Calculates the variance (range) between max and min values /// - Formula: max - min /// - Returns 0.0: If less than 2 elements /// /// ## ModusMult Trait /// - Function: h_modus_mult() /// - Input: Slice of numeric values &[T] /// - Output: Vec<f64> (all modes) /// - Purpose: Finds all values that appear most frequently /// - Returns empty: If no value appears more than once /// /// # Linear Algebra Functions /// /// ## h_hadamard_product Function (private) /// - Signature: h_hadamard_product<I, T>(vec1: &[I], vec2: &[T]) -> Vec<f64> /// - Input: Two vectors of equal length /// - Output: Vec<f64> (element-wise product) /// - Purpose: Computes element-wise multiplication of two vectors /// - Panics: If vectors have different lengths /// /// ## h_2d_dot_product Function /// - Signature: h_2d_dot_product<A, B>(vec1: &Vec<A>, vec2: &Vec<B>) -> f64 /// - Input: Two vectors of equal length /// - Output: f64 (scalar) /// - Purpose: Calculates the dot product of two vectors /// - Formula: vec1 · vec2 = Σ(a_i × b_i) /// - Panics: If vectors have different lengths /// /// # Collection/Functionality Traits /// /// ## HashMapValuesToHashSet Trait /// - Function: h_hashmap_values_to_hashset() /// - Input: HashMap with cloneable values /// - Output: HashSet<V> containing all unique values /// - Purpose: Extracts all values from a HashMap into a HashSet /// /// ## HashMapKeysToHashSet Trait /// - Function: h_hashmap_keys_to_hashset() /// - Input: HashMap with cloneable keys /// - Output: HashSet<K> containing all unique keys /// - Purpose: Extracts all keys from a HashMap into a HashSet /// /// ## ListToHashMap Trait /// - Function: h_list_to_hashmap(&self, values: &[V]) /// - Input: Keys (Vec or slice), values slice /// - Output: HashMap<K, V> /// - Purpose: Creates a HashMap from a list of keys and a list of values /// - Panics: If keys and values have different lengths, or if keys contain duplicates /// /// ## ListToHashSet Trait /// - Function: h_list_to_hashset() /// - Input: Slice or Vec of values /// - Output: HashSet<T> with unique elements /// - Purpose: Converts a list to a HashSet, removing duplicates /// /// ## Tof64 Trait /// - Function: h_f64() /// - Input: Any numeric type implementing Copy + Into<f64> /// - Output: f64 /// - Purpose: Generic conversion to f64 for any numeric type /// /// ## Toi32 Trait /// - Function: h_i32() /// - Input: Any numeric type implementing Copy + Into<i32> /// - Output: i32 /// - Purpose: Generic conversion to i32 for any numeric type /// /// ## ToVecf64 Trait /// - Function: h_to_vec_f64() /// - Input: Vec where T implements Copy + Into<f64> /// - Output: Vec<f64> /// - Purpose: Converts a vector of any numeric type to a vector of f64 /// /// ## ToVeci32 Trait /// - Function: h_to_vec_i32() /// - Input: Vec where T implements Copy + Into<i32> /// - Output: Vec<i32> /// - Purpose: Converts a vector of any numeric type to a vector of i32 /// /// # Terminal Input Functions /// /// ## h_input_data_single_f64 Function /// - Signature: h_input_data_single_f64(length: i32) -> Vec<f64> /// - Input: /// - length: Number of data points to collect (if ≤ 0, collects until user enters "<<") /// - Output: Vec<f64> containing the input numbers /// - Purpose: Prompts user to enter f64 numbers one at a time /// - Behavior: /// - Skips zero values automatically /// - If length > 0, collects exactly that many non-zero numbers /// - If length ≤ 0, continues until user enters "<<" /// /// ## h_input_data_single_i32 Function /// - Signature: h_input_data_single_i32(length: i32) -> Vec<i32> /// - Input: /// - length: Number of data points to collect (if ≤ 0, collects until user enters "<<") /// - Output: Vec<i32> containing the input integers /// - Purpose: Prompts user to enter i32 integers one at a time /// - Behavior: /// - Skips zero values automatically /// - If length > 0, collects exactly that many non-zero numbers /// - If length ≤ 0, continues until user enters "<<" /// /// ## InputType Enum /// - Variants: Lowercase, Uppercase, Letters, Integer /// - Purpose: Specifies validation requirements for input strings /// - Usage: Used with the ValidateInput trait to validate string content /// /// ## ValidateInput Trait /// - Function: h_validate_input(input_requirements: InputType) -> Result<(), String> /// - Input: /// - Self: String to validate /// - input_requirements: InputType enum specifying validation rules /// - Output: Result<(), String> /// - Ok(()) if validation passes /// - Err(String) with error message listing unexpected characters if validation fails /// - Purpose: Validates string input against specific requirements /// - Validation Options: /// - Lowercase: Only a-z allowed /// - Uppercase: Only A-Z allowed /// - Letters: Both uppercase and lowercase letters allowed (A-Z, a-z) /// - Integer: Only digits 0-9 allowed (must be parseable as i32) /// - Returns Error: If input is empty or contains invalid characters /// ///