24 releases (4 breaking)
0.5.5 | Apr 22, 2022 |
---|---|
0.5.4 | Apr 4, 2022 |
0.4.5 | Mar 31, 2022 |
0.3.0 | Mar 27, 2022 |
0.1.6 | Jan 30, 2022 |
#2471 in Rust patterns
Used in 2 crates
110KB
2.5K
SLoC
Mixed Num
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.
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.
This is an experimental library.
This library support fixed point numbers using the fixed crate. It uses num for floating point generics.
The package.
The documentation.
Release notes are found under RELEASES.md.
lib.rs
:
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" };
Dependencies
~3MB
~63K SLoC