Expand description

No-STD abstraction layer enabling numerical functions to be implemented once, and simultaneously support both real and complex numbers with, int, fixed and floating point types.

This is an experimental library.

Example

use mixed_num::*;
use mixed_num::traits::*;
use fixed::{types::extra::U27, FixedI32};
 
let number = FixedI32::<U27>::from_num(0.6f32);
let res:f32 = number.mixed_atan().mixed_to_num();
 
assert_eq!{ res, 0.5404195 };
 
let number = 0.6f32;
let res:f32 = number.mixed_atan().mixed_to_num();
 
assert_eq!{ res, 0.5404195 };

The library supplies complex structs Polar<T> and Cartesian<T> with no-std implementation of math traits, including MixedNum traits.

Some interoperability with num::Complex is implemented.

Example

use mixed_num::*;
use mixed_num::traits::*;
 
let number = Cartesian::new(1f32,2f32);
 
assert_eq!{ number.to_string(), "1+2i" };
 
let polar_number = number.to_polar();
assert_eq!{ polar_number.to_string(), "2.236068∠1.1071488" };
 
let polar_conj: Polar<f32> = polar_number.conj();
 
assert_eq!{ polar_conj.to_string(), "2.236068∠-1.1071488" };

Selected core::ops traits are implemented on the complex structs.

Example

use mixed_num::*;
use mixed_num::traits::*;
 
let mut c_num = Cartesian::new(1f32,2f32);
 
c_num = c_num*c_num;
assert_eq!{ c_num.to_string(), "-3+4i" };

This includes support for operation of mixed types.

Example

use mixed_num::*;
use mixed_num::traits::*;
 
let mut c_num = Cartesian::new(1f32,2f32);
 
c_num = c_num*2f64;
assert_eq!{ c_num.to_string(), "2+4i" };

Re-exports

pub use traits::*;
pub use complex::*;

Modules