1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
//! 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" };
//! ```
#![crate_name = "mixed_num"]
#![no_std]
#[cfg(feature = "std")]
extern crate std;
pub mod trigonometry;
pub mod traits;
pub use traits::*;
mod float_impl;
pub use float_impl::*;
mod fixed_impl;
pub use fixed_impl::*;
pub mod complex;
#[allow(unused)]
pub use complex::*;
mod int_impl;
pub use int_impl::*;