Struct num_complex::Complex[][src]

#[repr(C)]pub struct Complex<T> {
    pub re: T,
    pub im: T,
}

A complex number in Cartesian form.

Representation and Foreign Function Interface Compatibility

Complex<T> is memory layout compatible with an array [T; 2].

Note that Complex<F> where F is a floating point type is only memory layout compatible with C’s complex types, not necessarily calling convention compatible. This means that for FFI you can only pass Complex<F> behind a pointer, not as a value.

Examples

Example of extern function declaration.

use num_complex::Complex;
use std::os::raw::c_int;

extern "C" {
    fn zaxpy_(n: *const c_int, alpha: *const Complex<f64>,
              x: *const Complex<f64>, incx: *const c_int,
              y: *mut Complex<f64>, incy: *const c_int);
}

Fields

re: T

Real portion of the complex number

im: T

Imaginary portion of the complex number

Implementations

impl<T> Complex<T>[src]

pub const fn new(re: T, im: T) -> Self[src]

Create a new Complex

impl<T: Clone + Num> Complex<T>[src]

pub fn i() -> Self[src]

Returns imaginary unit

pub fn norm_sqr(&self) -> T[src]

Returns the square of the norm (since T doesn’t necessarily have a sqrt function), i.e. re^2 + im^2.

pub fn scale(&self, t: T) -> Self[src]

Multiplies self by the scalar t.

pub fn unscale(&self, t: T) -> Self[src]

Divides self by the scalar t.

pub fn powu(&self, exp: u32) -> Self[src]

Raises self to an unsigned integer power.

impl<T: Clone + Num + Neg<Output = T>> Complex<T>[src]

pub fn conj(&self) -> Self[src]

Returns the complex conjugate. i.e. re - i im

pub fn inv(&self) -> Self[src]

Returns 1/self

pub fn powi(&self, exp: i32) -> Self[src]

Raises self to a signed integer power.

impl<T: Clone + Signed> Complex<T>[src]

pub fn l1_norm(&self) -> T[src]

Returns the L1 norm |re| + |im| – the Manhattan distance from the origin.

impl<T: Clone + FloatCore> Complex<T>[src]

pub fn is_nan(self) -> bool[src]

Checks if the given complex number is NaN

pub fn is_infinite(self) -> bool[src]

Checks if the given complex number is infinite

pub fn is_finite(self) -> bool[src]

Checks if the given complex number is finite

pub fn is_normal(self) -> bool[src]

Checks if the given complex number is normal

Trait Implementations

impl<'a, T: Clone + Num> Add<&'a Complex<T>> for Complex<T>[src]

type Output = Complex<T>

The resulting type after applying the + operator.

impl<'a, T: Clone + Num> Add<&'a T> for Complex<T>[src]

type Output = Complex<T>

The resulting type after applying the + operator.

impl<'a, 'b, T: Clone + Num> Add<&'a T> for &'b Complex<T>[src]

type Output = Complex<T>

The resulting type after applying the + operator.

impl<'a, 'b, T: Clone + Num> Add<&'b Complex<T>> for &'a Complex<T>[src]

type Output = Complex<T>

The resulting type after applying the + operator.

impl<'a, T: Clone + Num> Add<Complex<T>> for &'a Complex<T>[src]

type Output = Complex<T>

The resulting type after applying the + operator.

impl<T: Clone + Num> Add<Complex<T>> for Complex<T>[src]

type Output = Self

The resulting type after applying the + operator.

impl<T: Clone + Num> Add<T> for Complex<T>[src]

type Output = Complex<T>

The resulting type after applying the + operator.

impl<'a, T: Clone + Num> Add<T> for &'a Complex<T>[src]

type Output = Complex<T>

The resulting type after applying the + operator.

impl<'a, T: Clone + NumAssign> AddAssign<&'a Complex<T>> for Complex<T>[src]

impl<'a, T: Clone + NumAssign> AddAssign<&'a T> for Complex<T>[src]

impl<T: Clone + NumAssign> AddAssign<Complex<T>> for Complex<T>[src]

impl<T: Clone + NumAssign> AddAssign<T> for Complex<T>[src]

impl<T, U> AsPrimitive<U> for Complex<T> where
    T: AsPrimitive<U>,
    U: 'static + Copy
[src]

impl<T> Binary for Complex<T> where
    T: Binary + Num + PartialOrd + Clone
[src]

impl<T: Clone> Clone for Complex<T>[src]

impl<T: Copy> Copy for Complex<T>[src]

impl<T: Debug> Debug for Complex<T>[src]

impl<T: Default> Default for Complex<T>[src]

impl<T> Display for Complex<T> where
    T: Display + Num + PartialOrd + Clone
[src]

impl<'a, T: Clone + Num> Div<&'a Complex<T>> for Complex<T>[src]

type Output = Complex<T>

The resulting type after applying the / operator.

impl<'a, T: Clone + Num> Div<&'a T> for Complex<T>[src]

type Output = Complex<T>

The resulting type after applying the / operator.

impl<'a, 'b, T: Clone + Num> Div<&'a T> for &'b Complex<T>[src]

type Output = Complex<T>

The resulting type after applying the / operator.

impl<'a, 'b, T: Clone + Num> Div<&'b Complex<T>> for &'a Complex<T>[src]

type Output = Complex<T>

The resulting type after applying the / operator.

impl<'a, T: Clone + Num> Div<Complex<T>> for &'a Complex<T>[src]

type Output = Complex<T>

The resulting type after applying the / operator.

impl<T: Clone + Num> Div<Complex<T>> for Complex<T>[src]

type Output = Self

The resulting type after applying the / operator.

impl<T: Clone + Num> Div<T> for Complex<T>[src]

type Output = Self

The resulting type after applying the / operator.

impl<'a, T: Clone + Num> Div<T> for &'a Complex<T>[src]

type Output = Complex<T>

The resulting type after applying the / operator.

impl<'a, T: Clone + NumAssign> DivAssign<&'a Complex<T>> for Complex<T>[src]

impl<'a, T: Clone + NumAssign> DivAssign<&'a T> for Complex<T>[src]

impl<T: Clone + NumAssign> DivAssign<Complex<T>> for Complex<T>[src]

impl<T: Clone + NumAssign> DivAssign<T> for Complex<T>[src]

impl<T: Eq> Eq for Complex<T>[src]

impl<'a, T: Clone + Num> From<&'a T> for Complex<T>[src]

impl<T: Clone + Num> From<T> for Complex<T>[src]

impl<T: FromPrimitive + Num> FromPrimitive for Complex<T>[src]

impl<T> FromStr for Complex<T> where
    T: FromStr + Num + Clone
[src]

type Err = ParseComplexError<T::Err>

The associated error which can be returned from parsing.

fn from_str(s: &str) -> Result<Self, Self::Err>[src]

Parses a +/- bi; ai +/- b; a; or bi where a and b are of type T

impl<T: Hash> Hash for Complex<T>[src]

impl<T: Clone + Num + Neg<Output = T>> Inv for Complex<T>[src]

type Output = Self

The result after applying the operator.

impl<'a, T: Clone + Num + Neg<Output = T>> Inv for &'a Complex<T>[src]

type Output = Complex<T>

The result after applying the operator.

impl<T> LowerExp for Complex<T> where
    T: LowerExp + Num + PartialOrd + Clone
[src]

impl<T> LowerHex for Complex<T> where
    T: LowerHex + Num + PartialOrd + Clone
[src]

impl<'a, T: Clone + Num> Mul<&'a Complex<T>> for Complex<T>[src]

type Output = Complex<T>

The resulting type after applying the * operator.

impl<'a, T: Clone + Num> Mul<&'a T> for Complex<T>[src]

type Output = Complex<T>

The resulting type after applying the * operator.

impl<'a, 'b, T: Clone + Num> Mul<&'a T> for &'b Complex<T>[src]

type Output = Complex<T>

The resulting type after applying the * operator.

impl<'a, 'b, T: Clone + Num> Mul<&'b Complex<T>> for &'a Complex<T>[src]

type Output = Complex<T>

The resulting type after applying the * operator.

impl<'a, T: Clone + Num> Mul<Complex<T>> for &'a Complex<T>[src]

type Output = Complex<T>

The resulting type after applying the * operator.

impl<T: Clone + Num> Mul<Complex<T>> for Complex<T>[src]

type Output = Self

The resulting type after applying the * operator.

impl<T: Clone + Num> Mul<T> for Complex<T>[src]

type Output = Complex<T>

The resulting type after applying the * operator.

impl<'a, T: Clone + Num> Mul<T> for &'a Complex<T>[src]

type Output = Complex<T>

The resulting type after applying the * operator.

impl<'a, 'b, T: Clone + Num + MulAdd<Output = T>> MulAdd<&'b Complex<T>, &'a Complex<T>> for &'a Complex<T>[src]

type Output = Complex<T>

The resulting type after applying the fused multiply-add.

impl<T: Clone + Num + MulAdd<Output = T>> MulAdd<Complex<T>, Complex<T>> for Complex<T>[src]

type Output = Complex<T>

The resulting type after applying the fused multiply-add.

impl<'a, 'b, T: Clone + NumAssign + MulAddAssign> MulAddAssign<&'a Complex<T>, &'b Complex<T>> for Complex<T>[src]

impl<T: Clone + NumAssign + MulAddAssign> MulAddAssign<Complex<T>, Complex<T>> for Complex<T>[src]

impl<'a, T: Clone + NumAssign> MulAssign<&'a Complex<T>> for Complex<T>[src]

impl<'a, T: Clone + NumAssign> MulAssign<&'a T> for Complex<T>[src]

impl<T: Clone + NumAssign> MulAssign<Complex<T>> for Complex<T>[src]

impl<T: Clone + NumAssign> MulAssign<T> for Complex<T>[src]

impl<T: Clone + Num + Neg<Output = T>> Neg for Complex<T>[src]

type Output = Self

The resulting type after applying the - operator.

impl<'a, T: Clone + Num + Neg<Output = T>> Neg for &'a Complex<T>[src]

type Output = Complex<T>

The resulting type after applying the - operator.

impl<T: Num + Clone> Num for Complex<T>[src]

type FromStrRadixErr = ParseComplexError<T::FromStrRadixErr>

fn from_str_radix(s: &str, radix: u32) -> Result<Self, Self::FromStrRadixErr>[src]

Parses a +/- bi; ai +/- b; a; or bi where a and b are of type T

impl<T: NumCast + Num> NumCast for Complex<T>[src]

impl<T> Octal for Complex<T> where
    T: Octal + Num + PartialOrd + Clone
[src]

impl<T: Clone + Num> One for Complex<T>[src]

impl<T: PartialEq> PartialEq<Complex<T>> for Complex<T>[src]

impl<'a, 'b, T: Clone + Num + Neg<Output = T>> Pow<&'b i128> for &'a Complex<T>[src]

type Output = Complex<T>

The result after applying the operator.

impl<'a, 'b, T: Clone + Num + Neg<Output = T>> Pow<&'b i16> for &'a Complex<T>[src]

type Output = Complex<T>

The result after applying the operator.

impl<'a, 'b, T: Clone + Num + Neg<Output = T>> Pow<&'b i32> for &'a Complex<T>[src]

type Output = Complex<T>

The result after applying the operator.

impl<'a, 'b, T: Clone + Num + Neg<Output = T>> Pow<&'b i64> for &'a Complex<T>[src]

type Output = Complex<T>

The result after applying the operator.

impl<'a, 'b, T: Clone + Num + Neg<Output = T>> Pow<&'b i8> for &'a Complex<T>[src]

type Output = Complex<T>

The result after applying the operator.

impl<'a, 'b, T: Clone + Num + Neg<Output = T>> Pow<&'b isize> for &'a Complex<T>[src]

type Output = Complex<T>

The result after applying the operator.

impl<'a, 'b, T: Clone + Num> Pow<&'b u128> for &'a Complex<T>[src]

type Output = Complex<T>

The result after applying the operator.

impl<'a, 'b, T: Clone + Num> Pow<&'b u16> for &'a Complex<T>[src]

type Output = Complex<T>

The result after applying the operator.

impl<'a, 'b, T: Clone + Num> Pow<&'b u32> for &'a Complex<T>[src]

type Output = Complex<T>

The result after applying the operator.

impl<'a, 'b, T: Clone + Num> Pow<&'b u64> for &'a Complex<T>[src]

type Output = Complex<T>

The result after applying the operator.

impl<'a, 'b, T: Clone + Num> Pow<&'b u8> for &'a Complex<T>[src]

type Output = Complex<T>

The result after applying the operator.

impl<'a, 'b, T: Clone + Num> Pow<&'b usize> for &'a Complex<T>[src]

type Output = Complex<T>

The result after applying the operator.

impl<'a, T: Clone + Num + Neg<Output = T>> Pow<i128> for &'a Complex<T>[src]

type Output = Complex<T>

The result after applying the operator.

impl<'a, T: Clone + Num + Neg<Output = T>> Pow<i16> for &'a Complex<T>[src]

type Output = Complex<T>

The result after applying the operator.

impl<'a, T: Clone + Num + Neg<Output = T>> Pow<i32> for &'a Complex<T>[src]

type Output = Complex<T>

The result after applying the operator.

impl<'a, T: Clone + Num + Neg<Output = T>> Pow<i64> for &'a Complex<T>[src]

type Output = Complex<T>

The result after applying the operator.

impl<'a, T: Clone + Num + Neg<Output = T>> Pow<i8> for &'a Complex<T>[src]

type Output = Complex<T>

The result after applying the operator.

impl<'a, T: Clone + Num + Neg<Output = T>> Pow<isize> for &'a Complex<T>[src]

type Output = Complex<T>

The result after applying the operator.

impl<'a, T: Clone + Num> Pow<u128> for &'a Complex<T>[src]

type Output = Complex<T>

The result after applying the operator.

impl<'a, T: Clone + Num> Pow<u16> for &'a Complex<T>[src]

type Output = Complex<T>

The result after applying the operator.

impl<'a, T: Clone + Num> Pow<u32> for &'a Complex<T>[src]

type Output = Complex<T>

The result after applying the operator.

impl<'a, T: Clone + Num> Pow<u64> for &'a Complex<T>[src]

type Output = Complex<T>

The result after applying the operator.

impl<'a, T: Clone + Num> Pow<u8> for &'a Complex<T>[src]

type Output = Complex<T>

The result after applying the operator.

impl<'a, T: Clone + Num> Pow<usize> for &'a Complex<T>[src]

type Output = Complex<T>

The result after applying the operator.

impl<'a, T: 'a + Num + Clone> Product<&'a Complex<T>> for Complex<T>[src]

impl<T: Num + Clone> Product<Complex<T>> for Complex<T>[src]

impl<'a, T: Clone + Num> Rem<&'a Complex<T>> for Complex<T>[src]

type Output = Complex<T>

The resulting type after applying the % operator.

impl<'a, T: Clone + Num> Rem<&'a T> for Complex<T>[src]

type Output = Complex<T>

The resulting type after applying the % operator.

impl<'a, 'b, T: Clone + Num> Rem<&'a T> for &'b Complex<T>[src]

type Output = Complex<T>

The resulting type after applying the % operator.

impl<'a, 'b, T: Clone + Num> Rem<&'b Complex<T>> for &'a Complex<T>[src]

type Output = Complex<T>

The resulting type after applying the % operator.

impl<'a, T: Clone + Num> Rem<Complex<T>> for &'a Complex<T>[src]

type Output = Complex<T>

The resulting type after applying the % operator.

impl<T: Clone + Num> Rem<Complex<T>> for Complex<T>[src]

type Output = Self

The resulting type after applying the % operator.

impl<T: Clone + Num> Rem<T> for Complex<T>[src]

type Output = Complex<T>

The resulting type after applying the % operator.

impl<'a, T: Clone + Num> Rem<T> for &'a Complex<T>[src]

type Output = Complex<T>

The resulting type after applying the % operator.

impl<'a, T: Clone + NumAssign> RemAssign<&'a Complex<T>> for Complex<T>[src]

impl<'a, T: Clone + NumAssign> RemAssign<&'a T> for Complex<T>[src]

impl<T: Clone + NumAssign> RemAssign<Complex<T>> for Complex<T>[src]

impl<T: Clone + NumAssign> RemAssign<T> for Complex<T>[src]

impl<T> StructuralEq for Complex<T>[src]

impl<T> StructuralPartialEq for Complex<T>[src]

impl<'a, T: Clone + Num> Sub<&'a Complex<T>> for Complex<T>[src]

type Output = Complex<T>

The resulting type after applying the - operator.

impl<'a, T: Clone + Num> Sub<&'a T> for Complex<T>[src]

type Output = Complex<T>

The resulting type after applying the - operator.

impl<'a, 'b, T: Clone + Num> Sub<&'a T> for &'b Complex<T>[src]

type Output = Complex<T>

The resulting type after applying the - operator.

impl<'a, 'b, T: Clone + Num> Sub<&'b Complex<T>> for &'a Complex<T>[src]

type Output = Complex<T>

The resulting type after applying the - operator.

impl<'a, T: Clone + Num> Sub<Complex<T>> for &'a Complex<T>[src]

type Output = Complex<T>

The resulting type after applying the - operator.

impl<T: Clone + Num> Sub<Complex<T>> for Complex<T>[src]

type Output = Self

The resulting type after applying the - operator.

impl<T: Clone + Num> Sub<T> for Complex<T>[src]

type Output = Complex<T>

The resulting type after applying the - operator.

impl<'a, T: Clone + Num> Sub<T> for &'a Complex<T>[src]

type Output = Complex<T>

The resulting type after applying the - operator.

impl<'a, T: Clone + NumAssign> SubAssign<&'a Complex<T>> for Complex<T>[src]

impl<'a, T: Clone + NumAssign> SubAssign<&'a T> for Complex<T>[src]

impl<T: Clone + NumAssign> SubAssign<Complex<T>> for Complex<T>[src]

impl<T: Clone + NumAssign> SubAssign<T> for Complex<T>[src]

impl<'a, T: 'a + Num + Clone> Sum<&'a Complex<T>> for Complex<T>[src]

impl<T: Num + Clone> Sum<Complex<T>> for Complex<T>[src]

impl<T: ToPrimitive + Num> ToPrimitive for Complex<T>[src]

impl<T> UpperExp for Complex<T> where
    T: UpperExp + Num + PartialOrd + Clone
[src]

impl<T> UpperHex for Complex<T> where
    T: UpperHex + Num + PartialOrd + Clone
[src]

impl<T: Clone + Num> Zero for Complex<T>[src]

Auto Trait Implementations

impl<T> RefUnwindSafe for Complex<T> where
    T: RefUnwindSafe

impl<T> Send for Complex<T> where
    T: Send

impl<T> Sync for Complex<T> where
    T: Sync

impl<T> Unpin for Complex<T> where
    T: Unpin

impl<T> UnwindSafe for Complex<T> where
    T: UnwindSafe

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> NumAssign for T where
    T: Num + NumAssignOps<T>, 
[src]

impl<T, Rhs> NumAssignOps<Rhs> for T where
    T: AddAssign<Rhs> + SubAssign<Rhs> + MulAssign<Rhs> + DivAssign<Rhs> + RemAssign<Rhs>, 
[src]

impl<T> NumAssignRef for T where
    T: NumAssign + for<'r> NumAssignOps<&'r T>, 
[src]

impl<T, Rhs, Output> NumOps<Rhs, Output> for T where
    T: Sub<Rhs, Output = Output> + Mul<Rhs, Output = Output> + Div<Rhs, Output = Output> + Add<Rhs, Output = Output> + Rem<Rhs, Output = Output>, 
[src]

impl<T> NumRef for T where
    T: Num + for<'r> NumOps<&'r T, T>, 
[src]

impl<T, Base> RefNum<Base> for T where
    T: NumOps<Base, Base> + for<'r> NumOps<&'r Base, Base>, 
[src]

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

impl<T> ToString for T where
    T: Display + ?Sized
[src]

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.