30template <std::
floating_po
int T>
45 constexpr BasicComplex(T real_part, T imaginary_part) : _real(real_part), _imaginary(imaginary_part) { }
48 _real( real_part.value() ),
49 _imaginary( imaginary_part.value() )
52 constexpr BasicComplex(std::complex<T> c) : _real( std::
real(c) ), _imaginary( std::imag(c) ) { }
143 constexpr const T &
real()
const {
return _real; }
144 constexpr void real(T r) { _real = r; }
146 constexpr const T &
i()
const {
return _imaginary; }
147 constexpr void i(T r) { _imaginary = r; }
150 constexpr const T &
imaginary()
const {
return _imaginary; }
168 return std::isnan(_real) || std::isnan(_imaginary);
172 return std::isinf(_real) || std::isinf(_imaginary);
202 return {
cos( radians ),
sin( radians ) };
206 constexpr std::complex<T>
asStdComplex()
const {
return std::complex<T>{ _real, _imaginary }; }
211 operator std::complex<T>()
const {
return std::complex<T>{ _real, _imaginary }; }
246 template <std::
floating_po
int OT = T>
249 OT tolerance = OT{0.0002})
272 template <std::
floating_po
int OT>
275 return { complex.
real() * T(scalar), complex.
imaginary() * T(scalar) };
283 template <std::
floating_po
int OT>
286 return { complex.
real() / T(scalar),
292 return { left.
real() + right.
real(),
296 template <std::
floating_po
int OT>
304 return { left.
real() - right.
real(),
308 template <std::
floating_po
int OT>
338 template <std::
floating_po
int OT = T>
341 OT tolerance = OT{0.0002})
345 auto diff{ near_to - input };
347 std::cout << std::format(
"input: {} is not equal to near_to: {} within tolerance: {}. Difference is {} .",
366 template <std::
floating_po
int OT = T>
369 OT tolerance = OT{0.0002})
373 auto diff{ near_to - input };
375 std::cout << std::format(
"input: {} is equal to near_to: {} within tolerance: {}. Difference is {} .",
405 template <std::
floating_po
int OT = T>
408 OT tolerance = OT{0.0002})
421 template <std::
floating_po
int OT = T>
424 OT tolerance = OT{0.0002})
438 template <std::
floating_po
int OT = T>
466 return ( left.
real() * right.
real() +
488 assert( rotation.
isUnit() );
490 return rotation * encoded_point;
501 return rotation_2 * rotation_1;
521 return input.
angle().value();
533 return std::polar( m,
angle.value() );
544 return T{input.
real() + input.
i()};
566 return std::format(
"[real: {}, i: {}]", input.
real(), input.
i() );
593 return input.
log10();
612 return input.
pow( p );
617 return input.
pow( p );
622 return input.
pow( p );
friend BasicComplex< T > acosh(BasicComplex< T > c)
T magnitudeSquared() const
friend BasicComplex< T > atan(BasicComplex< T > c)
constexpr const T & i() const
BasicComplex< T > log() const
BasicComplex< T > pow(BasicComplex< T > exponent) const
friend BasicComplex< T > asin(BasicComplex< T > c)
friend BasicComplex< T > tanh(BasicComplex< T > c)
constexpr BasicComplex(std::complex< T > c)
Conversion from std::complex.
constexpr BasicComplex(T real_number)
Constructs a BasicComplex equivalent to the given real number.
constexpr void imaginary(T r)
friend constexpr BasicComplex< T > log(const BasicComplex< T > &input)
BasicRadian< T > angle() const
friend BasicComplex< T > pow(const BasicComplex< T > &input, const BasicComplex< T > &p)
friend constexpr BasicComplex< T > log10(const BasicComplex< T > &input)
constexpr BasicComplex< T > normalized() const
bool isZero(T tolerance) const
friend std::string format(const BasicComplex< T > &input)
constexpr const T & imaginary() const
Extracts the imaginary part of a BasicComplex.
friend constexpr T dot_normalized(const BasicComplex< T > &left, const BasicComplex< T > &right)
friend constexpr BasicComplex< T > conjugate(const BasicComplex< T > &input)
constexpr BasicComplex()=default
friend BasicComplex< T > pow(const BasicComplex< T > &input, T p)
friend constexpr BasicComplex< T > passively_rotate_encoded_point(const BasicComplex< T > &rotation, const BasicComplex< T > &encoded_point)
constexpr std::complex< T > asStdComplex() const
friend constexpr BasicComplex< T > polar(T m, BasicRadian< T > angle=BasicRadian< T >{})
friend constexpr BasicRadian< T > arg(const BasicComplex< T > &input)
friend BasicComplex< T > acos(BasicComplex< T > c)
friend BasicComplex< T > asinh(BasicComplex< T > c)
constexpr BasicComplex(T real_part, T imaginary_part)
friend BasicComplex< T > exp(const BasicComplex< T > &input)
friend BasicComplex< T > tan(BasicComplex< T > c)
friend BasicComplex< T > sin(BasicComplex< T > c)
static constexpr BasicComplex< T > zero()
BasicComplex representation of the real number 0.
friend constexpr bool approximately_equal_to(const BasicComplex< T > &value_to_test, const BasicComplex< T > &value_it_should_be, OT tolerance=OT{0.0002})
static constexpr BasicComplex< T > make_rotation(BasicRadian< T > radians)
static constexpr BasicComplex< T > identity()
BasicComplex representation of the real number 1.
friend BasicComplex< T > sinh(BasicComplex< T > c)
static constexpr BasicComplex< T > unit_i()
friend BasicComplex< T > cosh(BasicComplex< T > c)
friend constexpr BasicComplex< T > compose_rotations(const BasicComplex< T > &rotation_1, const BasicComplex< T > &rotation_2)
friend constexpr bool operator==(const BasicComplex< T > &left, const BasicComplex< T > &right)
friend BasicComplex< T > atanh(BasicComplex< T > c)
BasicComplex< T > exp() const
BasicComplex< T > pow(int exponent) const
friend BasicComplex< T > cos(BasicComplex< T > c)
static constexpr BasicComplex< T > make_pure(T i)
constexpr BasicComplex< T > conjugate() const
constexpr const T & real() const
static constexpr BasicComplex< T > encode_point(T x, T y)
static constexpr BasicComplex< T > unit_real()
friend constexpr T dot(const BasicComplex< T > &left, const BasicComplex< T > &right)
friend constexpr T accumulate(const BasicComplex< T > &input)
friend constexpr BasicComplex< T > slerp(const BasicComplex< T > &begin, const BasicComplex< T > &end, T percent)
bool isUnit(T tolerance) const
BasicComplex< T > log10() const
friend constexpr BasicComplex< T > normalized(const BasicComplex< T > &input)
BasicComplex< T > pow(T exponent) const
Computes this BasicComplex raised to a real power.
constexpr BasicComplex(BasicRadian< T > real_part, BasicRadian< T > imaginary_part)
T value_type
The underlying implementation type.
BasicComplex< T > inverse() const
friend BasicComplex< T > pow(const BasicComplex< T > &input, int p)
friend void CHECK_IF_NOT_EQUAL(const BasicComplex< T > &input, const BasicComplex< T > &near_to, OT tolerance=OT{0.0002})
friend void CHECK_IF_EQUAL(const BasicComplex< T > &input, const BasicComplex< T > &near_to, OT tolerance=OT{0.0002})
friend void CHECK_IF_ZERO(const BasicComplex< T > &input, OT tolerance=OT{0.0002})
friend bool check_if_equal(const BasicComplex< T > &input, const BasicComplex< T > &near_to, OT tolerance=OT{0.0002})
friend bool check_if_not_equal(const BasicComplex< T > &input, const BasicComplex< T > &near_to, OT tolerance=OT{0.0002})
friend constexpr BasicComplex< T > operator+(const BasicComplex< T > &left, const BasicComplex< T > &right)
friend constexpr BasicComplex< T > operator/(const BasicComplex< T > &left, const BasicComplex< T > &right)
friend constexpr BasicComplex< T > operator*(const BasicComplex< T > &left, const BasicComplex< T > &right)
friend constexpr BasicComplex< T > operator-(const BasicComplex< T > &left, const BasicComplex< T > &right)