#[repr(C)]pub struct Complex<T> {
pub re: T,
pub im: T,
}Expand description
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: TReal portion of the complex number
im: TImaginary portion of the complex number
Implementations§
Source§impl<T> Complex<T>
impl<T> Complex<T>
Source§impl<T> Complex<T>
impl<T> Complex<T>
Sourcepub fn l1_norm(&self) -> T
pub fn l1_norm(&self) -> T
Returns the L1 norm |re| + |im| – the Manhattan distance from the origin.
Source§impl<T> Complex<T>where
T: Float,
impl<T> Complex<T>where
T: Float,
Sourcepub fn cis(phase: T) -> Complex<T>
pub fn cis(phase: T) -> Complex<T>
Create a new Complex with a given phase: exp(i * phase).
See cis (mathematics).
Sourcepub fn to_polar(self) -> (T, T)
pub fn to_polar(self) -> (T, T)
Convert to polar form (r, theta), such that
self = r * exp(i * theta)
Sourcepub fn from_polar(r: T, theta: T) -> Complex<T>
pub fn from_polar(r: T, theta: T) -> Complex<T>
Convert a polar representation into a complex number.
Sourcepub fn exp(self) -> Complex<T>
pub fn exp(self) -> Complex<T>
Computes e^(self), where e is the base of the natural logarithm.
Sourcepub fn ln(self) -> Complex<T>
pub fn ln(self) -> Complex<T>
Computes the principal value of natural logarithm of self.
This function has one branch cut:
(-∞, 0], continuous from above.
The branch satisfies -π ≤ arg(ln(z)) ≤ π.
Sourcepub fn sqrt(self) -> Complex<T>
pub fn sqrt(self) -> Complex<T>
Computes the principal value of the square root of self.
This function has one branch cut:
(-∞, 0), continuous from above.
The branch satisfies -π/2 ≤ arg(sqrt(z)) ≤ π/2.
Sourcepub fn cbrt(self) -> Complex<T>
pub fn cbrt(self) -> Complex<T>
Computes the principal value of the cube root of self.
This function has one branch cut:
(-∞, 0), continuous from above.
The branch satisfies -π/3 ≤ arg(cbrt(z)) ≤ π/3.
Note that this does not match the usual result for the cube root of
negative real numbers. For example, the real cube root of -8 is -2,
but the principal complex cube root of -8 is 1 + i√3.
Sourcepub fn log(self, base: T) -> Complex<T>
pub fn log(self, base: T) -> Complex<T>
Returns the logarithm of self with respect to an arbitrary base.
Sourcepub fn expf(self, base: T) -> Complex<T>
pub fn expf(self, base: T) -> Complex<T>
Raises a floating point number to the complex power self.
Sourcepub fn asin(self) -> Complex<T>
pub fn asin(self) -> Complex<T>
Computes the principal value of the inverse sine of self.
This function has two branch cuts:
(-∞, -1), continuous from above.(1, ∞), continuous from below.
The branch satisfies -π/2 ≤ Re(asin(z)) ≤ π/2.
Sourcepub fn acos(self) -> Complex<T>
pub fn acos(self) -> Complex<T>
Computes the principal value of the inverse cosine of self.
This function has two branch cuts:
(-∞, -1), continuous from above.(1, ∞), continuous from below.
The branch satisfies 0 ≤ Re(acos(z)) ≤ π.
Sourcepub fn atan(self) -> Complex<T>
pub fn atan(self) -> Complex<T>
Computes the principal value of the inverse tangent of self.
This function has two branch cuts:
(-∞i, -i], continuous from the left.[i, ∞i), continuous from the right.
The branch satisfies -π/2 ≤ Re(atan(z)) ≤ π/2.
Sourcepub fn asinh(self) -> Complex<T>
pub fn asinh(self) -> Complex<T>
Computes the principal value of inverse hyperbolic sine of self.
This function has two branch cuts:
(-∞i, -i), continuous from the left.(i, ∞i), continuous from the right.
The branch satisfies -π/2 ≤ Im(asinh(z)) ≤ π/2.
Sourcepub fn acosh(self) -> Complex<T>
pub fn acosh(self) -> Complex<T>
Computes the principal value of inverse hyperbolic cosine of self.
This function has one branch cut:
(-∞, 1), continuous from above.
The branch satisfies -π ≤ Im(acosh(z)) ≤ π and 0 ≤ Re(acosh(z)) < ∞.
Sourcepub fn atanh(self) -> Complex<T>
pub fn atanh(self) -> Complex<T>
Computes the principal value of inverse hyperbolic tangent of self.
This function has two branch cuts:
(-∞, -1], continuous from above.[1, ∞), continuous from below.
The branch satisfies -π/2 ≤ Im(atanh(z)) ≤ π/2.
Sourcepub fn finv(self) -> Complex<T>
pub fn finv(self) -> Complex<T>
Returns 1/self using floating-point operations.
This may be more accurate than the generic self.inv() in cases
where self.norm_sqr() would overflow to ∞ or underflow to 0.
§Examples
use num_complex::Complex64;
let c = Complex64::new(1e300, 1e300);
// The generic `inv()` will overflow.
assert!(!c.inv().is_normal());
// But we can do better for `Float` types.
let inv = c.finv();
assert!(inv.is_normal());
println!("{:e}", inv);
let expected = Complex64::new(5e-301, -5e-301);
assert!((inv - expected).norm() < 1e-315);Sourcepub fn fdiv(self, other: Complex<T>) -> Complex<T>
pub fn fdiv(self, other: Complex<T>) -> Complex<T>
Returns self/other using floating-point operations.
This may be more accurate than the generic Div implementation in cases
where other.norm_sqr() would overflow to ∞ or underflow to 0.
§Examples
use num_complex::Complex64;
let a = Complex64::new(2.0, 3.0);
let b = Complex64::new(1e300, 1e300);
// Generic division will overflow.
assert!(!(a / b).is_normal());
// But we can do better for `Float` types.
let quotient = a.fdiv(b);
assert!(quotient.is_normal());
println!("{:e}", quotient);
let expected = Complex64::new(2.5e-300, 5e-301);
assert!((quotient - expected).norm() < 1e-315);Source§impl<T> Complex<T>where
T: Float + FloatConst,
impl<T> Complex<T>where
T: Float + FloatConst,
Trait Implementations§
Source§impl<T> AddAssign for Complex<T>
impl<T> AddAssign for Complex<T>
Source§fn add_assign(&mut self, other: Complex<T>)
fn add_assign(&mut self, other: Complex<T>)
+= operation. Read moreSource§impl<'a, T> AddAssign<&'a Complex<T>> for Complex<T>
impl<'a, T> AddAssign<&'a Complex<T>> for Complex<T>
Source§fn add_assign(&mut self, other: &Complex<T>)
fn add_assign(&mut self, other: &Complex<T>)
+= operation. Read moreSource§impl<'a, T> AddAssign<&'a T> for Complex<T>
impl<'a, T> AddAssign<&'a T> for Complex<T>
Source§fn add_assign(&mut self, other: &T)
fn add_assign(&mut self, other: &T)
+= operation. Read moreSource§impl<T> AddAssign<T> for Complex<T>
impl<T> AddAssign<T> for Complex<T>
Source§fn add_assign(&mut self, other: T)
fn add_assign(&mut self, other: T)
+= operation. Read moreSource§impl<T, U> AsPrimitive<U> for Complex<T>where
T: AsPrimitive<U>,
U: 'static + Copy,
impl<T, U> AsPrimitive<U> for Complex<T>where
T: AsPrimitive<U>,
U: 'static + Copy,
Source§impl<T> ComplexField for Complex<T>
impl<T> ComplexField for Complex<T>
const IS_REAL: bool = false
const SIMD_CAPABILITIES: SimdCapabilities = T::SIMD_CAPABILITIES
type Arch = <T as ComplexField>::Arch
type Index = <T as ComplexField>::Index
type Real = T
type SimdCtx<S: Simd> = <T as ComplexField>::SimdCtx<S>
type SimdIndex<S: Simd> = <T as ComplexField>::SimdIndex<S>
type SimdMask<S: Simd> = <T as ComplexField>::SimdMask<S>
type SimdMemMask<S: Simd> = Complex<<T as ComplexField>::SimdMemMask<S>>
type SimdVec<S: Simd> = Complex<<T as ComplexField>::SimdVec<S>>
type Unit = <T as ComplexField>::Unit
fn zero_impl() -> Complex<T>
fn one_impl() -> Complex<T>
fn nan_impl() -> Complex<T>
fn infinity_impl() -> Complex<T>
fn from_real_impl(real: &<Complex<T> as ComplexField>::Real) -> Complex<T>
fn from_f64_impl(real: f64) -> Complex<T>
fn real_part_impl(value: &Complex<T>) -> <Complex<T> as ComplexField>::Real
fn imag_part_impl(value: &Complex<T>) -> <Complex<T> as ComplexField>::Real
fn copy_impl(value: &Complex<T>) -> Complex<T>
fn conj_impl(value: &Complex<T>) -> Complex<T>
fn recip_impl(value: &Complex<T>) -> Complex<T>
fn sqrt_impl(value: &Complex<T>) -> Complex<T>
fn abs_impl(value: &Complex<T>) -> <Complex<T> as ComplexField>::Real
fn abs1_impl(value: &Complex<T>) -> <Complex<T> as ComplexField>::Real
fn abs2_impl(value: &Complex<T>) -> <Complex<T> as ComplexField>::Real
fn mul_real_impl( lhs: &Complex<T>, rhs: &<Complex<T> as ComplexField>::Real, ) -> Complex<T>
fn mul_pow2_impl( lhs: &Complex<T>, rhs: &<Complex<T> as ComplexField>::Real, ) -> Complex<T>
fn is_finite_impl(value: &Complex<T>) -> bool
fn simd_ctx<S>(simd: S) -> <Complex<T> as ComplexField>::SimdCtx<S>where
S: Simd,
fn ctx_from_simd<S>(ctx: &<Complex<T> as ComplexField>::SimdCtx<S>) -> Swhere
S: Simd,
fn simd_splat<S>(
ctx: &<Complex<T> as ComplexField>::SimdCtx<S>,
value: &Complex<T>,
) -> <Complex<T> as ComplexField>::SimdVec<S>where
S: Simd,
fn simd_splat_real<S>(
ctx: &<Complex<T> as ComplexField>::SimdCtx<S>,
value: &<Complex<T> as ComplexField>::Real,
) -> <Complex<T> as ComplexField>::SimdVec<S>where
S: Simd,
fn simd_add<S>(
ctx: &<Complex<T> as ComplexField>::SimdCtx<S>,
lhs: <Complex<T> as ComplexField>::SimdVec<S>,
rhs: <Complex<T> as ComplexField>::SimdVec<S>,
) -> <Complex<T> as ComplexField>::SimdVec<S>where
S: Simd,
fn simd_sub<S>(
ctx: &<Complex<T> as ComplexField>::SimdCtx<S>,
lhs: <Complex<T> as ComplexField>::SimdVec<S>,
rhs: <Complex<T> as ComplexField>::SimdVec<S>,
) -> <Complex<T> as ComplexField>::SimdVec<S>where
S: Simd,
fn simd_neg<S>(
ctx: &<Complex<T> as ComplexField>::SimdCtx<S>,
value: <Complex<T> as ComplexField>::SimdVec<S>,
) -> <Complex<T> as ComplexField>::SimdVec<S>where
S: Simd,
fn simd_conj<S>(
ctx: &<Complex<T> as ComplexField>::SimdCtx<S>,
value: <Complex<T> as ComplexField>::SimdVec<S>,
) -> <Complex<T> as ComplexField>::SimdVec<S>where
S: Simd,
fn simd_abs1<S>(
ctx: &<Complex<T> as ComplexField>::SimdCtx<S>,
value: <Complex<T> as ComplexField>::SimdVec<S>,
) -> <Complex<T> as ComplexField>::SimdVec<S>where
S: Simd,
fn simd_abs_max<S>(
ctx: &<Complex<T> as ComplexField>::SimdCtx<S>,
value: <Complex<T> as ComplexField>::SimdVec<S>,
) -> <Complex<T> as ComplexField>::SimdVec<S>where
S: Simd,
fn simd_mul_real<S>(
ctx: &<Complex<T> as ComplexField>::SimdCtx<S>,
lhs: <Complex<T> as ComplexField>::SimdVec<S>,
real_rhs: <Complex<T> as ComplexField>::SimdVec<S>,
) -> <Complex<T> as ComplexField>::SimdVec<S>where
S: Simd,
fn simd_mul_pow2<S>(
ctx: &<Complex<T> as ComplexField>::SimdCtx<S>,
lhs: <Complex<T> as ComplexField>::SimdVec<S>,
real_rhs: <Complex<T> as ComplexField>::SimdVec<S>,
) -> <Complex<T> as ComplexField>::SimdVec<S>where
S: Simd,
fn simd_mul<S>(
ctx: &<Complex<T> as ComplexField>::SimdCtx<S>,
lhs: <Complex<T> as ComplexField>::SimdVec<S>,
rhs: <Complex<T> as ComplexField>::SimdVec<S>,
) -> <Complex<T> as ComplexField>::SimdVec<S>where
S: Simd,
fn simd_conj_mul<S>(
ctx: &<Complex<T> as ComplexField>::SimdCtx<S>,
lhs: <Complex<T> as ComplexField>::SimdVec<S>,
rhs: <Complex<T> as ComplexField>::SimdVec<S>,
) -> <Complex<T> as ComplexField>::SimdVec<S>where
S: Simd,
fn simd_mul_add<S>(
ctx: &<Complex<T> as ComplexField>::SimdCtx<S>,
lhs: <Complex<T> as ComplexField>::SimdVec<S>,
rhs: <Complex<T> as ComplexField>::SimdVec<S>,
acc: <Complex<T> as ComplexField>::SimdVec<S>,
) -> <Complex<T> as ComplexField>::SimdVec<S>where
S: Simd,
fn simd_conj_mul_add<S>(
ctx: &<Complex<T> as ComplexField>::SimdCtx<S>,
lhs: <Complex<T> as ComplexField>::SimdVec<S>,
rhs: <Complex<T> as ComplexField>::SimdVec<S>,
acc: <Complex<T> as ComplexField>::SimdVec<S>,
) -> <Complex<T> as ComplexField>::SimdVec<S>where
S: Simd,
fn simd_abs2<S>(
ctx: &<Complex<T> as ComplexField>::SimdCtx<S>,
value: <Complex<T> as ComplexField>::SimdVec<S>,
) -> <Complex<T> as ComplexField>::SimdVec<S>where
S: Simd,
fn simd_abs2_add<S>(
ctx: &<Complex<T> as ComplexField>::SimdCtx<S>,
value: <Complex<T> as ComplexField>::SimdVec<S>,
acc: <Complex<T> as ComplexField>::SimdVec<S>,
) -> <Complex<T> as ComplexField>::SimdVec<S>where
S: Simd,
fn simd_reduce_sum<S>(
ctx: &<Complex<T> as ComplexField>::SimdCtx<S>,
value: <Complex<T> as ComplexField>::SimdVec<S>,
) -> Complex<T>where
S: Simd,
fn simd_reduce_max<S>(
ctx: &<Complex<T> as ComplexField>::SimdCtx<S>,
value: <Complex<T> as ComplexField>::SimdVec<S>,
) -> Complex<T>where
S: Simd,
fn simd_equal<S>(
ctx: &<Complex<T> as ComplexField>::SimdCtx<S>,
real_lhs: <Complex<T> as ComplexField>::SimdVec<S>,
real_rhs: <Complex<T> as ComplexField>::SimdVec<S>,
) -> <Complex<T> as ComplexField>::SimdMask<S>where
S: Simd,
fn simd_less_than<S>(
ctx: &<Complex<T> as ComplexField>::SimdCtx<S>,
real_lhs: <Complex<T> as ComplexField>::SimdVec<S>,
real_rhs: <Complex<T> as ComplexField>::SimdVec<S>,
) -> <Complex<T> as ComplexField>::SimdMask<S>where
S: Simd,
fn simd_less_than_or_equal<S>(
ctx: &<Complex<T> as ComplexField>::SimdCtx<S>,
real_lhs: <Complex<T> as ComplexField>::SimdVec<S>,
real_rhs: <Complex<T> as ComplexField>::SimdVec<S>,
) -> <Complex<T> as ComplexField>::SimdMask<S>where
S: Simd,
fn simd_greater_than<S>(
ctx: &<Complex<T> as ComplexField>::SimdCtx<S>,
real_lhs: <Complex<T> as ComplexField>::SimdVec<S>,
real_rhs: <Complex<T> as ComplexField>::SimdVec<S>,
) -> <Complex<T> as ComplexField>::SimdMask<S>where
S: Simd,
fn simd_greater_than_or_equal<S>(
ctx: &<Complex<T> as ComplexField>::SimdCtx<S>,
real_lhs: <Complex<T> as ComplexField>::SimdVec<S>,
real_rhs: <Complex<T> as ComplexField>::SimdVec<S>,
) -> <Complex<T> as ComplexField>::SimdMask<S>where
S: Simd,
fn simd_select<S>(
ctx: &<Complex<T> as ComplexField>::SimdCtx<S>,
mask: <Complex<T> as ComplexField>::SimdMask<S>,
lhs: <Complex<T> as ComplexField>::SimdVec<S>,
rhs: <Complex<T> as ComplexField>::SimdVec<S>,
) -> <Complex<T> as ComplexField>::SimdVec<S>where
S: Simd,
fn simd_index_select<S>(
ctx: &<Complex<T> as ComplexField>::SimdCtx<S>,
mask: <Complex<T> as ComplexField>::SimdMask<S>,
lhs: <Complex<T> as ComplexField>::SimdIndex<S>,
rhs: <Complex<T> as ComplexField>::SimdIndex<S>,
) -> <Complex<T> as ComplexField>::SimdIndex<S>where
S: Simd,
fn simd_index_splat<S>(
ctx: &<Complex<T> as ComplexField>::SimdCtx<S>,
value: <Complex<T> as ComplexField>::Index,
) -> <Complex<T> as ComplexField>::SimdIndex<S>where
S: Simd,
fn simd_index_add<S>(
ctx: &<Complex<T> as ComplexField>::SimdCtx<S>,
lhs: <Complex<T> as ComplexField>::SimdIndex<S>,
rhs: <Complex<T> as ComplexField>::SimdIndex<S>,
) -> <Complex<T> as ComplexField>::SimdIndex<S>where
S: Simd,
fn simd_index_less_than<S>(
ctx: &<Complex<T> as ComplexField>::SimdCtx<S>,
lhs: <Complex<T> as ComplexField>::SimdIndex<S>,
rhs: <Complex<T> as ComplexField>::SimdIndex<S>,
) -> <Complex<T> as ComplexField>::SimdMask<S>where
S: Simd,
fn simd_and_mask<S>(
ctx: &<Complex<T> as ComplexField>::SimdCtx<S>,
lhs: <Complex<T> as ComplexField>::SimdMask<S>,
rhs: <Complex<T> as ComplexField>::SimdMask<S>,
) -> <Complex<T> as ComplexField>::SimdMask<S>where
S: Simd,
fn simd_or_mask<S>(
ctx: &<Complex<T> as ComplexField>::SimdCtx<S>,
lhs: <Complex<T> as ComplexField>::SimdMask<S>,
rhs: <Complex<T> as ComplexField>::SimdMask<S>,
) -> <Complex<T> as ComplexField>::SimdMask<S>where
S: Simd,
fn simd_not_mask<S>(
ctx: &<Complex<T> as ComplexField>::SimdCtx<S>,
mask: <Complex<T> as ComplexField>::SimdMask<S>,
) -> <Complex<T> as ComplexField>::SimdMask<S>where
S: Simd,
fn simd_first_true_mask<S>(
ctx: &<Complex<T> as ComplexField>::SimdCtx<S>,
value: <Complex<T> as ComplexField>::SimdMask<S>,
) -> usizewhere
S: Simd,
fn simd_mem_mask_between<S>(
ctx: &<Complex<T> as ComplexField>::SimdCtx<S>,
start: <Complex<T> as ComplexField>::Index,
end: <Complex<T> as ComplexField>::Index,
) -> <Complex<T> as ComplexField>::SimdMemMask<S>where
S: Simd,
fn simd_mask_between<S>(
ctx: &<Complex<T> as ComplexField>::SimdCtx<S>,
start: <Complex<T> as ComplexField>::Index,
end: <Complex<T> as ComplexField>::Index,
) -> <Complex<T> as ComplexField>::SimdMask<S>where
S: Simd,
unsafe fn simd_mask_load_raw<S>(
ctx: &<Complex<T> as ComplexField>::SimdCtx<S>,
mask: <Complex<T> as ComplexField>::SimdMemMask<S>,
ptr: *const <Complex<T> as ComplexField>::SimdVec<S>,
) -> <Complex<T> as ComplexField>::SimdVec<S>where
S: Simd,
unsafe fn simd_mask_store_raw<S>(
ctx: &<Complex<T> as ComplexField>::SimdCtx<S>,
mask: <Complex<T> as ComplexField>::SimdMemMask<S>,
ptr: *mut <Complex<T> as ComplexField>::SimdVec<S>,
values: <Complex<T> as ComplexField>::SimdVec<S>,
)where
S: Simd,
const SIMD_ABS_SPLIT_REAL_IMAG: bool = false
fn is_nan_impl(value: &Self) -> bool
fn simd_index_greater_than<S>(
ctx: &Self::SimdCtx<S>,
lhs: Self::SimdIndex<S>,
rhs: Self::SimdIndex<S>,
) -> Self::SimdMask<S>where
S: Simd,
fn simd_index_less_than_or_equal<S>(
ctx: &Self::SimdCtx<S>,
lhs: Self::SimdIndex<S>,
rhs: Self::SimdIndex<S>,
) -> Self::SimdMask<S>where
S: Simd,
fn simd_index_greater_than_or_equal<S>(
ctx: &Self::SimdCtx<S>,
lhs: Self::SimdIndex<S>,
rhs: Self::SimdIndex<S>,
) -> Self::SimdMask<S>where
S: Simd,
fn simd_load<S>(
ctx: &Self::SimdCtx<S>,
ptr: &Self::SimdVec<S>,
) -> Self::SimdVec<S>where
S: Simd,
fn simd_store<S>(
ctx: &Self::SimdCtx<S>,
ptr: &mut Self::SimdVec<S>,
value: Self::SimdVec<S>,
)where
S: Simd,
unsafe fn simd_mask_load<S>(
ctx: &Self::SimdCtx<S>,
mask: Self::SimdMemMask<S>,
ptr: *const Self::SimdVec<S>,
) -> Self::SimdVec<S>where
S: Simd,
unsafe fn simd_mask_store<S>(
ctx: &Self::SimdCtx<S>,
mask: Self::SimdMemMask<S>,
ptr: *mut Self::SimdVec<S>,
value: Self::SimdVec<S>,
)where
S: Simd,
fn simd_iota<S>(ctx: &Self::SimdCtx<S>) -> Self::SimdIndex<S>where
S: Simd,
Source§impl<T> ComplexFloat for Complex<T>where
T: Float + FloatConst,
impl<T> ComplexFloat for Complex<T>where
T: Float + FloatConst,
Source§fn abs(self) -> <Complex<T> as ComplexFloat>::Real
fn abs(self) -> <Complex<T> as ComplexFloat>::Real
Source§fn recip(self) -> Complex<T>
fn recip(self) -> Complex<T>
1/x. See also Complex::finv.Source§fn l1_norm(&self) -> <Complex<T> as ComplexFloat>::Real
fn l1_norm(&self) -> <Complex<T> as ComplexFloat>::Real
|re| + |im| – the Manhattan distance from the origin.Source§fn is_infinite(self) -> bool
fn is_infinite(self) -> bool
true if this value is positive infinity or negative infinity and
false otherwise.Source§fn powc(
self,
exp: Complex<<Complex<T> as ComplexFloat>::Real>,
) -> Complex<<Complex<T> as ComplexFloat>::Real>
fn powc( self, exp: Complex<<Complex<T> as ComplexFloat>::Real>, ) -> Complex<<Complex<T> as ComplexFloat>::Real>
self to a complex power.Source§fn log(self, base: <Complex<T> as ComplexFloat>::Real) -> Complex<T>
fn log(self, base: <Complex<T> as ComplexFloat>::Real) -> Complex<T>
Source§fn powf(self, f: <Complex<T> as ComplexFloat>::Real) -> Complex<T>
fn powf(self, f: <Complex<T> as ComplexFloat>::Real) -> Complex<T>
self to a real power.Source§fn asin(self) -> Complex<T>
fn asin(self) -> Complex<T>
Source§fn acos(self) -> Complex<T>
fn acos(self) -> Complex<T>
impl<T> Copy for Complex<T>where
T: Copy,
Source§impl DispatchScalar for Complex<f64>
impl DispatchScalar for Complex<f64>
Source§fn dispatch_op<K>(
kernels: &K,
op: OpDesc<'_, Complex<f64>>,
) -> Result<(), BackendError>where
K: ScalarKernels,
fn dispatch_op<K>(
kernels: &K,
op: OpDesc<'_, Complex<f64>>,
) -> Result<(), BackendError>where
K: ScalarKernels,
OpDesc<'_, Self> to the concrete ScalarKernels
method matching Self, turning a type parameter into a type-level branch.Source§impl DispatchScalar for Complex<f32>
impl DispatchScalar for Complex<f32>
Source§fn dispatch_op<K>(
kernels: &K,
op: OpDesc<'_, Complex<f32>>,
) -> Result<(), BackendError>where
K: ScalarKernels,
fn dispatch_op<K>(
kernels: &K,
op: OpDesc<'_, Complex<f32>>,
) -> Result<(), BackendError>where
K: ScalarKernels,
OpDesc<'_, Self> to the concrete ScalarKernels
method matching Self, turning a type parameter into a type-level branch.Source§impl<T> DivAssign for Complex<T>
impl<T> DivAssign for Complex<T>
Source§fn div_assign(&mut self, other: Complex<T>)
fn div_assign(&mut self, other: Complex<T>)
/= operation. Read moreSource§impl<'a, T> DivAssign<&'a Complex<T>> for Complex<T>
impl<'a, T> DivAssign<&'a Complex<T>> for Complex<T>
Source§fn div_assign(&mut self, other: &Complex<T>)
fn div_assign(&mut self, other: &Complex<T>)
/= operation. Read moreSource§impl<'a, T> DivAssign<&'a T> for Complex<T>
impl<'a, T> DivAssign<&'a T> for Complex<T>
Source§fn div_assign(&mut self, other: &T)
fn div_assign(&mut self, other: &T)
/= operation. Read moreSource§impl<T> DivAssign<T> for Complex<T>
impl<T> DivAssign<T> for Complex<T>
Source§fn div_assign(&mut self, other: T)
fn div_assign(&mut self, other: T)
/= operation. Read moreimpl<T> Eq for Complex<T>where
T: Eq,
Source§impl<T> FromPrimitive for Complex<T>where
T: FromPrimitive + Num,
impl<T> FromPrimitive for Complex<T>where
T: FromPrimitive + Num,
Source§fn from_usize(n: usize) -> Option<Complex<T>>
fn from_usize(n: usize) -> Option<Complex<T>>
usize to return an optional value of this type. If the
value cannot be represented by this type, then None is returned.Source§fn from_isize(n: isize) -> Option<Complex<T>>
fn from_isize(n: isize) -> Option<Complex<T>>
isize to return an optional value of this type. If the
value cannot be represented by this type, then None is returned.Source§fn from_u8(n: u8) -> Option<Complex<T>>
fn from_u8(n: u8) -> Option<Complex<T>>
u8 to return an optional value of this type. If the
value cannot be represented by this type, then None is returned.Source§fn from_u16(n: u16) -> Option<Complex<T>>
fn from_u16(n: u16) -> Option<Complex<T>>
u16 to return an optional value of this type. If the
value cannot be represented by this type, then None is returned.Source§fn from_u32(n: u32) -> Option<Complex<T>>
fn from_u32(n: u32) -> Option<Complex<T>>
u32 to return an optional value of this type. If the
value cannot be represented by this type, then None is returned.Source§fn from_u64(n: u64) -> Option<Complex<T>>
fn from_u64(n: u64) -> Option<Complex<T>>
u64 to return an optional value of this type. If the
value cannot be represented by this type, then None is returned.Source§fn from_i8(n: i8) -> Option<Complex<T>>
fn from_i8(n: i8) -> Option<Complex<T>>
i8 to return an optional value of this type. If the
value cannot be represented by this type, then None is returned.Source§fn from_i16(n: i16) -> Option<Complex<T>>
fn from_i16(n: i16) -> Option<Complex<T>>
i16 to return an optional value of this type. If the
value cannot be represented by this type, then None is returned.Source§fn from_i32(n: i32) -> Option<Complex<T>>
fn from_i32(n: i32) -> Option<Complex<T>>
i32 to return an optional value of this type. If the
value cannot be represented by this type, then None is returned.Source§fn from_i64(n: i64) -> Option<Complex<T>>
fn from_i64(n: i64) -> Option<Complex<T>>
i64 to return an optional value of this type. If the
value cannot be represented by this type, then None is returned.Source§fn from_u128(n: u128) -> Option<Complex<T>>
fn from_u128(n: u128) -> Option<Complex<T>>
u128 to return an optional value of this type. If the
value cannot be represented by this type, then None is returned. Read moreSource§fn from_i128(n: i128) -> Option<Complex<T>>
fn from_i128(n: i128) -> Option<Complex<T>>
i128 to return an optional value of this type. If the
value cannot be represented by this type, then None is returned. Read moreSource§impl<T> MulAddAssign for Complex<T>
impl<T> MulAddAssign for Complex<T>
Source§fn mul_add_assign(&mut self, other: Complex<T>, add: Complex<T>)
fn mul_add_assign(&mut self, other: Complex<T>, add: Complex<T>)
*self = (*self * a) + bSource§impl<'a, 'b, T> MulAddAssign<&'a Complex<T>, &'b Complex<T>> for Complex<T>
impl<'a, 'b, T> MulAddAssign<&'a Complex<T>, &'b Complex<T>> for Complex<T>
Source§fn mul_add_assign(&mut self, other: &Complex<T>, add: &Complex<T>)
fn mul_add_assign(&mut self, other: &Complex<T>, add: &Complex<T>)
*self = (*self * a) + bSource§impl<T> MulAssign for Complex<T>
impl<T> MulAssign for Complex<T>
Source§fn mul_assign(&mut self, other: Complex<T>)
fn mul_assign(&mut self, other: Complex<T>)
*= operation. Read moreSource§impl<'a, T> MulAssign<&'a Complex<T>> for Complex<T>
impl<'a, T> MulAssign<&'a Complex<T>> for Complex<T>
Source§fn mul_assign(&mut self, other: &Complex<T>)
fn mul_assign(&mut self, other: &Complex<T>)
*= operation. Read moreSource§impl<'a, T> MulAssign<&'a T> for Complex<T>
impl<'a, T> MulAssign<&'a T> for Complex<T>
Source§fn mul_assign(&mut self, other: &T)
fn mul_assign(&mut self, other: &T)
*= operation. Read moreSource§impl<T> MulAssign<T> for Complex<T>
impl<T> MulAssign<T> for Complex<T>
Source§fn mul_assign(&mut self, other: T)
fn mul_assign(&mut self, other: T)
*= operation. Read moreSource§impl<T> Num for Complex<T>
impl<T> Num for Complex<T>
Source§fn from_str_radix(
s: &str,
radix: u32,
) -> Result<Complex<T>, <Complex<T> as Num>::FromStrRadixErr>
fn from_str_radix( s: &str, radix: u32, ) -> Result<Complex<T>, <Complex<T> as Num>::FromStrRadixErr>
Parses a +/- bi; ai +/- b; a; or bi where a and b are of type T
radix must be <= 18; larger radix would include i and j as digits,
which cannot be supported.
The conversion returns an error if 18 <= radix <= 36; it panics if radix > 36.
The elements of T are parsed using Num::from_str_radix too, and errors
(or panics) from that are reflected here as well.
type FromStrRadixErr = ParseComplexError<<T as Num>::FromStrRadixErr>
Source§impl<T> PartialEq for Complex<T>where
T: PartialEq,
impl<T> PartialEq for Complex<T>where
T: PartialEq,
impl<T> Pod for Complex<T>where
T: Pod,
bytemuck only.Source§impl<'a, 'b, T> Pow<&'b Complex<T>> for &'a Complex<T>where
T: Float,
Available on crate features libm or std only.
impl<'a, 'b, T> Pow<&'b Complex<T>> for &'a Complex<T>where
T: Float,
libm or std only.Source§impl<'b, T> Pow<&'b Complex<T>> for Complex<T>where
T: Float,
Available on crate features libm or std only.
impl<'b, T> Pow<&'b Complex<T>> for Complex<T>where
T: Float,
libm or std only.Source§impl<'a, T> Pow<Complex<T>> for &'a Complex<T>where
T: Float,
Available on crate features libm or std only.
impl<'a, T> Pow<Complex<T>> for &'a Complex<T>where
T: Float,
libm or std only.Source§impl<T> Pow<Complex<T>> for Complex<T>where
T: Float,
Available on crate features libm or std only.
impl<T> Pow<Complex<T>> for Complex<T>where
T: Float,
libm or std only.Source§impl<T> RemAssign for Complex<T>
impl<T> RemAssign for Complex<T>
Source§fn rem_assign(&mut self, modulus: Complex<T>)
fn rem_assign(&mut self, modulus: Complex<T>)
%= operation. Read moreSource§impl<'a, T> RemAssign<&'a Complex<T>> for Complex<T>
impl<'a, T> RemAssign<&'a Complex<T>> for Complex<T>
Source§fn rem_assign(&mut self, other: &Complex<T>)
fn rem_assign(&mut self, other: &Complex<T>)
%= operation. Read moreSource§impl<'a, T> RemAssign<&'a T> for Complex<T>
impl<'a, T> RemAssign<&'a T> for Complex<T>
Source§fn rem_assign(&mut self, other: &T)
fn rem_assign(&mut self, other: &T)
%= operation. Read moreSource§impl<T> RemAssign<T> for Complex<T>
impl<T> RemAssign<T> for Complex<T>
Source§fn rem_assign(&mut self, other: T)
fn rem_assign(&mut self, other: T)
%= operation. Read moreSource§impl Scalar for Complex<f32>
impl Scalar for Complex<f32>
Source§type Real = f32
type Real = f32
Scalar + Float — supports both tensor
element storage and floating-point math (sqrt, exp, etc.).Source§type Complex = Complex<f32>
type Complex = Complex<f32>
Source§fn scale_real(self, factor: <Complex<f32> as Scalar>::Real) -> Complex<f32>
fn scale_real(self, factor: <Complex<f32> as Scalar>::Real) -> Complex<f32>
Source§impl Scalar for Complex<f64>
impl Scalar for Complex<f64>
Source§type Real = f64
type Real = f64
Scalar + Float — supports both tensor
element storage and floating-point math (sqrt, exp, etc.).Source§type Complex = Complex<f64>
type Complex = Complex<f64>
Source§fn scale_real(self, factor: <Complex<f64> as Scalar>::Real) -> Complex<f64>
fn scale_real(self, factor: <Complex<f64> as Scalar>::Real) -> Complex<f64>
impl<T> StructuralPartialEq for Complex<T>where
T: PartialEq,
Source§impl<T> SubAssign for Complex<T>
impl<T> SubAssign for Complex<T>
Source§fn sub_assign(&mut self, other: Complex<T>)
fn sub_assign(&mut self, other: Complex<T>)
-= operation. Read moreSource§impl<'a, T> SubAssign<&'a Complex<T>> for Complex<T>
impl<'a, T> SubAssign<&'a Complex<T>> for Complex<T>
Source§fn sub_assign(&mut self, other: &Complex<T>)
fn sub_assign(&mut self, other: &Complex<T>)
-= operation. Read moreSource§impl<'a, T> SubAssign<&'a T> for Complex<T>
impl<'a, T> SubAssign<&'a T> for Complex<T>
Source§fn sub_assign(&mut self, other: &T)
fn sub_assign(&mut self, other: &T)
-= operation. Read moreSource§impl<T> SubAssign<T> for Complex<T>
impl<T> SubAssign<T> for Complex<T>
Source§fn sub_assign(&mut self, other: T)
fn sub_assign(&mut self, other: T)
-= operation. Read moreSource§impl<T> ToPrimitive for Complex<T>where
T: ToPrimitive + Num,
impl<T> ToPrimitive for Complex<T>where
T: ToPrimitive + Num,
Source§fn to_usize(&self) -> Option<usize>
fn to_usize(&self) -> Option<usize>
self to a usize. If the value cannot be
represented by a usize, then None is returned.Source§fn to_isize(&self) -> Option<isize>
fn to_isize(&self) -> Option<isize>
self to an isize. If the value cannot be
represented by an isize, then None is returned.Source§fn to_u8(&self) -> Option<u8>
fn to_u8(&self) -> Option<u8>
self to a u8. If the value cannot be
represented by a u8, then None is returned.Source§fn to_u16(&self) -> Option<u16>
fn to_u16(&self) -> Option<u16>
self to a u16. If the value cannot be
represented by a u16, then None is returned.Source§fn to_u32(&self) -> Option<u32>
fn to_u32(&self) -> Option<u32>
self to a u32. If the value cannot be
represented by a u32, then None is returned.Source§fn to_u64(&self) -> Option<u64>
fn to_u64(&self) -> Option<u64>
self to a u64. If the value cannot be
represented by a u64, then None is returned.Source§fn to_i8(&self) -> Option<i8>
fn to_i8(&self) -> Option<i8>
self to an i8. If the value cannot be
represented by an i8, then None is returned.Source§fn to_i16(&self) -> Option<i16>
fn to_i16(&self) -> Option<i16>
self to an i16. If the value cannot be
represented by an i16, then None is returned.Source§fn to_i32(&self) -> Option<i32>
fn to_i32(&self) -> Option<i32>
self to an i32. If the value cannot be
represented by an i32, then None is returned.Source§fn to_i64(&self) -> Option<i64>
fn to_i64(&self) -> Option<i64>
self to an i64. If the value cannot be
represented by an i64, then None is returned.Source§fn to_u128(&self) -> Option<u128>
fn to_u128(&self) -> Option<u128>
self to a u128. If the value cannot be
represented by a u128 (u64 under the default implementation), then
None is returned. Read moreSource§fn to_i128(&self) -> Option<i128>
fn to_i128(&self) -> Option<i128>
self to an i128. If the value cannot be
represented by an i128 (i64 under the default implementation), then
None is returned. Read moreAuto Trait Implementations§
impl<T> Freeze for Complex<T>where
T: Freeze,
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> UnsafeUnpin for Complex<T>where
T: UnsafeUnpin,
impl<T> UnwindSafe for Complex<T>where
T: UnwindSafe,
Blanket Implementations§
impl<T> AnyBitPattern for Twhere
T: Pod,
impl<T> Boilerplate for T
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CheckedBitPattern for Twhere
T: AnyBitPattern,
impl<T> CheckedBitPattern for Twhere
T: AnyBitPattern,
Source§type Bits = T
type Bits = T
Self must have the same layout as the specified Bits except for
the possible invalid bit patterns being checked during
is_valid_bit_pattern.Source§fn is_valid_bit_pattern(_bits: &T) -> bool
fn is_valid_bit_pattern(_bits: &T) -> bool
bits
as &Self.Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> ComplexFieldExt for Twhere
T: ComplexField,
impl<T> ComplexFieldExt for Twhere
T: ComplexField,
fn nbits() -> usize
fn zero() -> Self
fn one() -> Self
fn nan() -> Self
fn infinity() -> Self
fn as_real(&self) -> Self
fn real(&self) -> Self::Real
fn imag(&self) -> Self::Real
fn copy(&self) -> Self
fn conj(&self) -> Self
fn mul_real(&self, rhs: impl ByRef<Self::Real>) -> Self
fn mul_pow2(&self, rhs: impl ByRef<Self::Real>) -> Self
fn abs1(&self) -> Self::Real
fn absmax(&self) -> Self::Real
fn abs(&self) -> Self::Real
fn abs2(&self) -> Self::Real
fn is_nan(&self) -> bool
fn is_finite(&self) -> bool
fn sqrt(&self) -> Self
fn recip(&self) -> Self
fn from_f64(value: f64) -> Self
Source§impl<T> DistributionExt for Twhere
T: ?Sized,
impl<T> DistributionExt for Twhere
T: ?Sized,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
impl<T, U> Imply<T> for U
impl<T> Interleave for Twhere
T: Pod,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more