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
use num_traits::ToPrimitive;
use crate::complex::FromComplex;
use crate::consts::*;
pub fn pow_ms<T: FromComplex>(z: T, s: T) -> T {
if z == T::zero() {
return T::zero()
}
let imag = s.im().to_f64().unwrap();
if imag < EPSILON {
z.powf(-s.re())
} else {
T::from_complex(z.powc(-T::complex(s.re(), s.im())))
}
}
pub fn pow_os<T: FromComplex>(z: T, s: T) -> T {
if z == T::zero() {
return T::zero()
}
let imag = s.im().to_f64().unwrap();
if imag < EPSILON {
z.powf(T::real(1.0) - s.re())
} else {
T::from_complex(z.powc(T::complex(1.0, 0.0) - T::complex(s.re(), s.im())))
}
}