mirror of
https://github.com/bolero-MURAKAMI/Sprout.git
synced 2025-07-16 15:14:13 +00:00
add sprout/numeric/dft.wave.hpp
fix constexpr -> inline constexpr
This commit is contained in:
parent
e4a4d17207
commit
f9d4b475b4
69 changed files with 420 additions and 378 deletions
|
@ -118,63 +118,63 @@ namespace sprout {
|
|||
};
|
||||
// 26.4.6, operators:
|
||||
template<typename T>
|
||||
SPROUT_CONSTEXPR sprout::complex<T> operator+(sprout::complex<T> const& lhs, sprout::complex<T> const& rhs) {
|
||||
inline SPROUT_CONSTEXPR sprout::complex<T> operator+(sprout::complex<T> const& lhs, sprout::complex<T> const& rhs) {
|
||||
return sprout::complex<T>(
|
||||
lhs.real() + rhs.real(),
|
||||
lhs.imag() + rhs.imag()
|
||||
);
|
||||
}
|
||||
template<typename T>
|
||||
SPROUT_CONSTEXPR sprout::complex<T> operator+(sprout::complex<T> const& lhs, T const& rhs) {
|
||||
inline SPROUT_CONSTEXPR sprout::complex<T> operator+(sprout::complex<T> const& lhs, T const& rhs) {
|
||||
return sprout::complex<T>(
|
||||
lhs.real() + rhs,
|
||||
lhs.imag()
|
||||
);
|
||||
}
|
||||
template<typename T>
|
||||
SPROUT_CONSTEXPR sprout::complex<T> operator+(T const& lhs, sprout::complex<T> const& rhs) {
|
||||
inline SPROUT_CONSTEXPR sprout::complex<T> operator+(T const& lhs, sprout::complex<T> const& rhs) {
|
||||
return sprout::complex<T>(
|
||||
lhs + rhs.real(),
|
||||
rhs.imag()
|
||||
);
|
||||
}
|
||||
template<typename T>
|
||||
SPROUT_CONSTEXPR sprout::complex<T> operator-(sprout::complex<T> const& lhs, sprout::complex<T> const& rhs) {
|
||||
inline SPROUT_CONSTEXPR sprout::complex<T> operator-(sprout::complex<T> const& lhs, sprout::complex<T> const& rhs) {
|
||||
return sprout::complex<T>(
|
||||
lhs.real() - rhs.real(),
|
||||
lhs.imag() - rhs.imag()
|
||||
);
|
||||
}
|
||||
template<typename T>
|
||||
SPROUT_CONSTEXPR sprout::complex<T> operator-(sprout::complex<T> const& lhs, T const& rhs) {
|
||||
inline SPROUT_CONSTEXPR sprout::complex<T> operator-(sprout::complex<T> const& lhs, T const& rhs) {
|
||||
return sprout::complex<T>(
|
||||
lhs.real() - rhs,
|
||||
lhs.imag()
|
||||
);
|
||||
}
|
||||
template<typename T>
|
||||
SPROUT_CONSTEXPR sprout::complex<T> operator-(T const& lhs, sprout::complex<T> const& rhs) {
|
||||
inline SPROUT_CONSTEXPR sprout::complex<T> operator-(T const& lhs, sprout::complex<T> const& rhs) {
|
||||
return sprout::complex<T>(
|
||||
lhs - rhs.real(),
|
||||
-rhs.imag()
|
||||
);
|
||||
}
|
||||
template<typename T>
|
||||
SPROUT_CONSTEXPR sprout::complex<T> operator*(sprout::complex<T> const& lhs, sprout::complex<T> const& rhs) {
|
||||
inline SPROUT_CONSTEXPR sprout::complex<T> operator*(sprout::complex<T> const& lhs, sprout::complex<T> const& rhs) {
|
||||
return sprout::complex<T>(
|
||||
lhs.real() * rhs.real() - lhs.imag() * rhs.imag(),
|
||||
lhs.real() * rhs.imag() + lhs.imag() * rhs.real()
|
||||
);
|
||||
}
|
||||
template<typename T>
|
||||
SPROUT_CONSTEXPR sprout::complex<T> operator*(sprout::complex<T> const& lhs, T const& rhs) {
|
||||
inline SPROUT_CONSTEXPR sprout::complex<T> operator*(sprout::complex<T> const& lhs, T const& rhs) {
|
||||
return sprout::complex<T>(
|
||||
lhs.real() * rhs,
|
||||
lhs.imag() * rhs
|
||||
);
|
||||
}
|
||||
template<typename T>
|
||||
SPROUT_CONSTEXPR sprout::complex<T> operator*(T const& lhs, sprout::complex<T> const& rhs) {
|
||||
inline SPROUT_CONSTEXPR sprout::complex<T> operator*(T const& lhs, sprout::complex<T> const& rhs) {
|
||||
return sprout::complex<T>(
|
||||
lhs * rhs.real(),
|
||||
lhs * rhs.imag()
|
||||
|
@ -182,7 +182,7 @@ namespace sprout {
|
|||
}
|
||||
namespace detail {
|
||||
template<typename T>
|
||||
SPROUT_CONSTEXPR sprout::complex<T> divides_impl(
|
||||
inline SPROUT_CONSTEXPR sprout::complex<T> divides_impl(
|
||||
sprout::complex<T> const& lhs,
|
||||
sprout::complex<T> const& rhs,
|
||||
T const& n
|
||||
|
@ -194,7 +194,7 @@ namespace sprout {
|
|||
);
|
||||
}
|
||||
template<typename T>
|
||||
SPROUT_CONSTEXPR sprout::complex<T> divides_impl(
|
||||
inline SPROUT_CONSTEXPR sprout::complex<T> divides_impl(
|
||||
T const& lhs,
|
||||
sprout::complex<T> const& rhs,
|
||||
T const& n
|
||||
|
@ -207,50 +207,50 @@ namespace sprout {
|
|||
}
|
||||
} // namespace detail
|
||||
template<typename T>
|
||||
SPROUT_CONSTEXPR sprout::complex<T> operator/(sprout::complex<T> const& lhs, sprout::complex<T> const& rhs) {
|
||||
inline SPROUT_CONSTEXPR sprout::complex<T> operator/(sprout::complex<T> const& lhs, sprout::complex<T> const& rhs) {
|
||||
return sprout::detail::divides_impl(lhs, rhs, sprout::norm(rhs));
|
||||
}
|
||||
template<typename T>
|
||||
SPROUT_CONSTEXPR sprout::complex<T> operator/(sprout::complex<T> const& lhs, T const& rhs) {
|
||||
inline SPROUT_CONSTEXPR sprout::complex<T> operator/(sprout::complex<T> const& lhs, T const& rhs) {
|
||||
return sprout::complex<T>(
|
||||
lhs.real() / rhs,
|
||||
lhs.imag() / rhs
|
||||
);
|
||||
}
|
||||
template<typename T>
|
||||
SPROUT_CONSTEXPR sprout::complex<T> operator/(T const& lhs, sprout::complex<T> const& rhs) {
|
||||
inline SPROUT_CONSTEXPR sprout::complex<T> operator/(T const& lhs, sprout::complex<T> const& rhs) {
|
||||
return sprout::detail::divides_impl(lhs, rhs, sprout::norm(rhs));
|
||||
}
|
||||
template<typename T>
|
||||
SPROUT_CONSTEXPR sprout::complex<T> operator+(sprout::complex<T> const& x) {
|
||||
inline SPROUT_CONSTEXPR sprout::complex<T> operator+(sprout::complex<T> const& x) {
|
||||
return x;
|
||||
}
|
||||
template<typename T>
|
||||
SPROUT_CONSTEXPR sprout::complex<T> operator-(sprout::complex<T> const& x) {
|
||||
inline SPROUT_CONSTEXPR sprout::complex<T> operator-(sprout::complex<T> const& x) {
|
||||
return sprout::complex<T>(-x.real(), -x.imag());
|
||||
}
|
||||
template<typename T>
|
||||
SPROUT_CONSTEXPR bool operator==(sprout::complex<T> const& lhs, sprout::complex<T> const& rhs) {
|
||||
inline SPROUT_CONSTEXPR bool operator==(sprout::complex<T> const& lhs, sprout::complex<T> const& rhs) {
|
||||
return lhs.real() == rhs.real() && lhs.imag() == rhs.imag();
|
||||
}
|
||||
template<typename T>
|
||||
SPROUT_CONSTEXPR bool operator==(sprout::complex<T> const& lhs, T const& rhs) {
|
||||
inline SPROUT_CONSTEXPR bool operator==(sprout::complex<T> const& lhs, T const& rhs) {
|
||||
return lhs.real() == rhs && lhs.imag() == T();
|
||||
}
|
||||
template<typename T>
|
||||
SPROUT_CONSTEXPR bool operator==(T const& lhs, sprout::complex<T> const& rhs) {
|
||||
inline SPROUT_CONSTEXPR bool operator==(T const& lhs, sprout::complex<T> const& rhs) {
|
||||
return lhs == rhs.real() && T() == rhs.imag();
|
||||
}
|
||||
template<typename T>
|
||||
SPROUT_CONSTEXPR bool operator!=(sprout::complex<T> const& lhs, sprout::complex<T> const& rhs) {
|
||||
inline SPROUT_CONSTEXPR bool operator!=(sprout::complex<T> const& lhs, sprout::complex<T> const& rhs) {
|
||||
return !(lhs == rhs);
|
||||
}
|
||||
template<typename T>
|
||||
SPROUT_CONSTEXPR bool operator!=(sprout::complex<T> const& lhs, T const& rhs) {
|
||||
inline SPROUT_CONSTEXPR bool operator!=(sprout::complex<T> const& lhs, T const& rhs) {
|
||||
return !(lhs == rhs);
|
||||
}
|
||||
template<typename T>
|
||||
SPROUT_CONSTEXPR bool operator!=(T const& lhs, sprout::complex<T> const& rhs) {
|
||||
inline SPROUT_CONSTEXPR bool operator!=(T const& lhs, sprout::complex<T> const& rhs) {
|
||||
return !(lhs == rhs);
|
||||
}
|
||||
template<typename T, typename Char, typename Traits>
|
||||
|
@ -285,32 +285,32 @@ namespace sprout {
|
|||
}
|
||||
// 26.4.7, values:
|
||||
template<typename T>
|
||||
SPROUT_CONSTEXPR T real(sprout::complex<T> const& x) {
|
||||
inline SPROUT_CONSTEXPR T real(sprout::complex<T> const& x) {
|
||||
return x.real();
|
||||
}
|
||||
template<typename T>
|
||||
SPROUT_CONSTEXPR T imag(sprout::complex<T> const& x) {
|
||||
inline SPROUT_CONSTEXPR T imag(sprout::complex<T> const& x) {
|
||||
return x.imag();
|
||||
}
|
||||
template<typename T>
|
||||
SPROUT_CONSTEXPR T abs(sprout::complex<T> const& x) {
|
||||
inline SPROUT_CONSTEXPR T abs(sprout::complex<T> const& x) {
|
||||
return sprout::sqrt(sprout::norm(x));
|
||||
}
|
||||
template<typename T>
|
||||
SPROUT_CONSTEXPR T arg(sprout::complex<T> const& x) {
|
||||
inline SPROUT_CONSTEXPR T arg(sprout::complex<T> const& x) {
|
||||
return sprout::atan2(x.imag(), x.real());
|
||||
}
|
||||
template<typename T>
|
||||
SPROUT_CONSTEXPR T norm(sprout::complex<T> const& x) {
|
||||
inline SPROUT_CONSTEXPR T norm(sprout::complex<T> const& x) {
|
||||
return x.real() * x.real() + x.imag() * x.imag();
|
||||
}
|
||||
template<typename T>
|
||||
SPROUT_CONSTEXPR sprout::complex<T> conj(sprout::complex<T> const& x) {
|
||||
inline SPROUT_CONSTEXPR sprout::complex<T> conj(sprout::complex<T> const& x) {
|
||||
return sprout::complex<T>(x.real(), -x.imag());
|
||||
}
|
||||
namespace detail {
|
||||
template<typename T>
|
||||
SPROUT_CONSTEXPR sprout::complex<T> proj_impl(sprout::complex<T> const& x, T const& den) {
|
||||
inline SPROUT_CONSTEXPR sprout::complex<T> proj_impl(sprout::complex<T> const& x, T const& den) {
|
||||
return sprout::complex<T>(
|
||||
T(2) * x.real() / den,
|
||||
T(2) * x.imag() / den
|
||||
|
@ -318,14 +318,14 @@ namespace sprout {
|
|||
}
|
||||
} // detail
|
||||
template<typename T>
|
||||
SPROUT_CONSTEXPR sprout::complex<T> proj(sprout::complex<T> const& x) {
|
||||
inline SPROUT_CONSTEXPR sprout::complex<T> proj(sprout::complex<T> const& x) {
|
||||
return sprout::detail::proj_impl(
|
||||
x,
|
||||
sprout::norm(x) + T(1)
|
||||
);
|
||||
}
|
||||
template<typename T>
|
||||
SPROUT_CONSTEXPR sprout::complex<T> polar(T const& rho, T const& theta = 0) {
|
||||
inline SPROUT_CONSTEXPR sprout::complex<T> polar(T const& rho, T const& theta = 0) {
|
||||
return sprout::complex<T>(rho * sprout::cos(theta), rho * sprout::sin(theta));
|
||||
}
|
||||
// 26.4.8, transcendentals:
|
||||
|
@ -369,27 +369,27 @@ namespace sprout {
|
|||
SPROUT_CONSTEXPR sprout::complex<T> tanh(sprout::complex<T> const& x);
|
||||
namespace detail {
|
||||
template<typename T>
|
||||
SPROUT_CONSTEXPR sprout::complex<T> acos_impl(sprout::complex<T> const& t) {
|
||||
inline SPROUT_CONSTEXPR sprout::complex<T> acos_impl(sprout::complex<T> const& t) {
|
||||
return sprout::complex<T>(sprout::math::half_pi<T>() - t.real(), -t.imag());
|
||||
}
|
||||
} // namespace detail
|
||||
template<typename T>
|
||||
SPROUT_CONSTEXPR sprout::complex<T> acos(sprout::complex<T> const& x) {
|
||||
inline SPROUT_CONSTEXPR sprout::complex<T> acos(sprout::complex<T> const& x) {
|
||||
return sprout::detail::acos_impl(sprout::asin(x));
|
||||
}
|
||||
namespace detail {
|
||||
template<typename T>
|
||||
SPROUT_CONSTEXPR sprout::complex<T> asin_impl(sprout::complex<T> const& t) {
|
||||
inline SPROUT_CONSTEXPR sprout::complex<T> asin_impl(sprout::complex<T> const& t) {
|
||||
return sprout::complex<T>(t.imag(), -t.real());
|
||||
}
|
||||
} // namespace detail
|
||||
template<typename T>
|
||||
SPROUT_CONSTEXPR sprout::complex<T> asin(sprout::complex<T> const& x) {
|
||||
inline SPROUT_CONSTEXPR sprout::complex<T> asin(sprout::complex<T> const& x) {
|
||||
return sprout::detail::asin_impl(sprout::asinh(sprout::complex<T>(-x.imag(), x.real())));
|
||||
}
|
||||
namespace detail {
|
||||
template<typename T>
|
||||
SPROUT_CONSTEXPR sprout::complex<T> atan_impl_1(
|
||||
inline SPROUT_CONSTEXPR sprout::complex<T> atan_impl_1(
|
||||
sprout::complex<T> const& x,
|
||||
T const& r2,
|
||||
T const& z,
|
||||
|
@ -403,7 +403,7 @@ namespace sprout {
|
|||
);
|
||||
}
|
||||
template<typename T>
|
||||
SPROUT_CONSTEXPR sprout::complex<T> atan_impl(
|
||||
inline SPROUT_CONSTEXPR sprout::complex<T> atan_impl(
|
||||
sprout::complex<T> const& x,
|
||||
T const& r2
|
||||
)
|
||||
|
@ -418,15 +418,15 @@ namespace sprout {
|
|||
}
|
||||
} // namespace detail
|
||||
template<typename T>
|
||||
SPROUT_CONSTEXPR sprout::complex<T> atan(sprout::complex<T> const& x) {
|
||||
inline SPROUT_CONSTEXPR sprout::complex<T> atan(sprout::complex<T> const& x) {
|
||||
return sprout::detail::atan_impl(x, x.real() * x.real());
|
||||
}
|
||||
template<typename T>
|
||||
SPROUT_CONSTEXPR sprout::complex<T> acosh(sprout::complex<T> const& x) {
|
||||
inline SPROUT_CONSTEXPR sprout::complex<T> acosh(sprout::complex<T> const& x) {
|
||||
return T(2) * sprout::log(sprout::sqrt(T(0.5) * (x + T(1))) + sprout::sqrt(T(0.5) * (x - T(1))));
|
||||
}
|
||||
template<typename T>
|
||||
SPROUT_CONSTEXPR sprout::complex<T> asinh(sprout::complex<T> const& x) {
|
||||
inline SPROUT_CONSTEXPR sprout::complex<T> asinh(sprout::complex<T> const& x) {
|
||||
return sprout::log(
|
||||
sprout::sqrt(
|
||||
sprout::complex<T>(
|
||||
|
@ -439,7 +439,7 @@ namespace sprout {
|
|||
}
|
||||
namespace detail {
|
||||
template<typename T>
|
||||
SPROUT_CONSTEXPR sprout::complex<T> atanh_impl_1(
|
||||
inline SPROUT_CONSTEXPR sprout::complex<T> atanh_impl_1(
|
||||
sprout::complex<T> const& x,
|
||||
T const& i2,
|
||||
T const& z,
|
||||
|
@ -453,7 +453,7 @@ namespace sprout {
|
|||
);
|
||||
}
|
||||
template<typename T>
|
||||
SPROUT_CONSTEXPR sprout::complex<T> atanh_impl(
|
||||
inline SPROUT_CONSTEXPR sprout::complex<T> atanh_impl(
|
||||
sprout::complex<T> const& x,
|
||||
T const& i2
|
||||
)
|
||||
|
@ -468,69 +468,69 @@ namespace sprout {
|
|||
}
|
||||
} // namespace detail
|
||||
template<typename T>
|
||||
SPROUT_CONSTEXPR sprout::complex<T> atanh(sprout::complex<T> const& x) {
|
||||
inline SPROUT_CONSTEXPR sprout::complex<T> atanh(sprout::complex<T> const& x) {
|
||||
return sprout::detail::atanh_impl(x, x.imag() * x.imag());
|
||||
}
|
||||
template<typename T>
|
||||
SPROUT_CONSTEXPR sprout::complex<T> cos(sprout::complex<T> const& x) {
|
||||
inline SPROUT_CONSTEXPR sprout::complex<T> cos(sprout::complex<T> const& x) {
|
||||
return sprout::complex<T>(
|
||||
sprout::cos(x.real()) * sprout::cosh(x.imag()),
|
||||
-(sprout::sin(x.real()) * sprout::sinh(x.imag()))
|
||||
);
|
||||
}
|
||||
template<typename T>
|
||||
SPROUT_CONSTEXPR sprout::complex<T> cosh(sprout::complex<T> const& x) {
|
||||
inline SPROUT_CONSTEXPR sprout::complex<T> cosh(sprout::complex<T> const& x) {
|
||||
return sprout::complex<T>(
|
||||
sprout::cosh(x.real()) * sprout::cos(x.imag()),
|
||||
sprout::sinh(x.real()) * sprout::sin(x.imag())
|
||||
);
|
||||
}
|
||||
template<typename T>
|
||||
SPROUT_CONSTEXPR sprout::complex<T> exp(sprout::complex<T> const& x) {
|
||||
inline SPROUT_CONSTEXPR sprout::complex<T> exp(sprout::complex<T> const& x) {
|
||||
return sprout::polar(sprout::exp(x.real()), x.imag());
|
||||
}
|
||||
template<typename T>
|
||||
SPROUT_CONSTEXPR sprout::complex<T> log(sprout::complex<T> const& x) {
|
||||
inline SPROUT_CONSTEXPR sprout::complex<T> log(sprout::complex<T> const& x) {
|
||||
return sprout::complex<T>(sprout::log(sprout::abs(x)), sprout::arg(x));
|
||||
}
|
||||
template<typename T>
|
||||
SPROUT_CONSTEXPR sprout::complex<T> log10(sprout::complex<T> const& x) {
|
||||
inline SPROUT_CONSTEXPR sprout::complex<T> log10(sprout::complex<T> const& x) {
|
||||
return sprout::log(x) / sprout::log(T(10));
|
||||
}
|
||||
namespace detail {
|
||||
template<typename T>
|
||||
SPROUT_CONSTEXPR sprout::complex<T> pow_impl(sprout::complex<T> const& t, T const& y) {
|
||||
inline SPROUT_CONSTEXPR sprout::complex<T> pow_impl(sprout::complex<T> const& t, T const& y) {
|
||||
return sprout::polar(sprout::exp(y * t.real()), y * t.imag());
|
||||
}
|
||||
} // namespace detail
|
||||
template<typename T>
|
||||
SPROUT_CONSTEXPR sprout::complex<T> pow(sprout::complex<T> const& x, T const& y) {
|
||||
inline SPROUT_CONSTEXPR sprout::complex<T> pow(sprout::complex<T> const& x, T const& y) {
|
||||
return x == T() ? T()
|
||||
: x.imag() == T() && x.real() > T() ? sprout::pow(x.real(), y)
|
||||
: sprout::detail::pow_impl(sprout::log(x), y)
|
||||
;
|
||||
}
|
||||
template<typename T>
|
||||
SPROUT_CONSTEXPR sprout::complex<T> pow(sprout::complex<T> const& x, sprout::complex<T> const& y) {
|
||||
inline SPROUT_CONSTEXPR sprout::complex<T> pow(sprout::complex<T> const& x, sprout::complex<T> const& y) {
|
||||
return x == T() ? T()
|
||||
: sprout::exp(y * sprout::log(x))
|
||||
;
|
||||
}
|
||||
template<typename T>
|
||||
SPROUT_CONSTEXPR sprout::complex<T> pow(T const& x, sprout::complex<T> const& y) {
|
||||
inline SPROUT_CONSTEXPR sprout::complex<T> pow(T const& x, sprout::complex<T> const& y) {
|
||||
return x > T() ? sprout::polar(sprout::pow(x, y.real()), y.imag() * sprout::log(x))
|
||||
: sprout::pow(sprout::complex<T>(x), y)
|
||||
;
|
||||
}
|
||||
template<typename T>
|
||||
SPROUT_CONSTEXPR sprout::complex<T> sin(sprout::complex<T> const& x) {
|
||||
inline SPROUT_CONSTEXPR sprout::complex<T> sin(sprout::complex<T> const& x) {
|
||||
return sprout::complex<T>(
|
||||
sprout::sin(x.real()) * sprout::cosh(x.imag()),
|
||||
sprout::cos(x.real()) * sprout::sinh(x.imag())
|
||||
);
|
||||
}
|
||||
template<typename T>
|
||||
SPROUT_CONSTEXPR sprout::complex<T> sinh(sprout::complex<T> const& x) {
|
||||
inline SPROUT_CONSTEXPR sprout::complex<T> sinh(sprout::complex<T> const& x) {
|
||||
return sprout::complex<T>(
|
||||
sprout::sinh(x.real()) * sprout::cos(x.imag()),
|
||||
sprout::cosh(x.real()) * sprout::sin(x.imag())
|
||||
|
@ -538,49 +538,49 @@ namespace sprout {
|
|||
}
|
||||
namespace detail {
|
||||
template<typename T>
|
||||
SPROUT_CONSTEXPR sprout::complex<T> sqrt_impl_1(sprout::complex<T> const& x, T const& t) {
|
||||
inline SPROUT_CONSTEXPR sprout::complex<T> sqrt_impl_1(sprout::complex<T> const& x, T const& t) {
|
||||
return sprout::complex<T>(t, x.imag() < T() ? -t : t);
|
||||
}
|
||||
template<typename T>
|
||||
SPROUT_CONSTEXPR sprout::complex<T> sqrt_impl_2_1(sprout::complex<T> const& x, T const& t, T const& u) {
|
||||
inline SPROUT_CONSTEXPR sprout::complex<T> sqrt_impl_2_1(sprout::complex<T> const& x, T const& t, T const& u) {
|
||||
return x.real() > T() ? sprout::complex<T>(u, x.imag() / t)
|
||||
: sprout::complex<T>(sprout::abs(x.imag()) / t, x.imag() < T() ? -u : u)
|
||||
;
|
||||
}
|
||||
template<typename T>
|
||||
SPROUT_CONSTEXPR sprout::complex<T> sqrt_impl_2(sprout::complex<T> const& x, T const& t) {
|
||||
inline SPROUT_CONSTEXPR sprout::complex<T> sqrt_impl_2(sprout::complex<T> const& x, T const& t) {
|
||||
return sprout::detail::sqrt_impl_2_1(x, t, t / 2);
|
||||
}
|
||||
} // namespace detail
|
||||
template<typename T>
|
||||
SPROUT_CONSTEXPR sprout::complex<T> sqrt(sprout::complex<T> const& x) {
|
||||
inline SPROUT_CONSTEXPR sprout::complex<T> sqrt(sprout::complex<T> const& x) {
|
||||
return x.real() == T() ? sprout::detail::sqrt_impl_1(x, sprout::sqrt(abs(x.imag()) / 2))
|
||||
: sprout::detail::sqrt_impl_2(x, sprout::sqrt(2 * (sprout::abs(x) + sprout::abs(x.real()))))
|
||||
;
|
||||
}
|
||||
template<typename T>
|
||||
SPROUT_CONSTEXPR sprout::complex<T> tan(sprout::complex<T> const& x) {
|
||||
inline SPROUT_CONSTEXPR sprout::complex<T> tan(sprout::complex<T> const& x) {
|
||||
return sprout::sin(x) / sprout::cos(x);
|
||||
}
|
||||
template<typename T>
|
||||
SPROUT_CONSTEXPR sprout::complex<T> tanh(sprout::complex<T> const& x) {
|
||||
inline SPROUT_CONSTEXPR sprout::complex<T> tanh(sprout::complex<T> const& x) {
|
||||
return sprout::sinh(x) / sprout::cosh(x);
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
SPROUT_CONSTEXPR sprout::complex<T> ceil(sprout::complex<T> const& x) {
|
||||
inline SPROUT_CONSTEXPR sprout::complex<T> ceil(sprout::complex<T> const& x) {
|
||||
return sprout::complex<T>(sprout::ceil(x.real()), sprout::ceil(x.imag()));
|
||||
}
|
||||
template<typename T>
|
||||
SPROUT_CONSTEXPR sprout::complex<T> floor(sprout::complex<T> const& x) {
|
||||
inline SPROUT_CONSTEXPR sprout::complex<T> floor(sprout::complex<T> const& x) {
|
||||
return sprout::complex<T>(sprout::floor(x.real()), sprout::floor(x.imag()));
|
||||
}
|
||||
template<typename T>
|
||||
SPROUT_CONSTEXPR sprout::complex<T> trunc(sprout::complex<T> const& x) {
|
||||
inline SPROUT_CONSTEXPR sprout::complex<T> trunc(sprout::complex<T> const& x) {
|
||||
return sprout::complex<T>(sprout::trunc(x.real()), sprout::trunc(x.imag()));
|
||||
}
|
||||
template<typename T>
|
||||
SPROUT_CONSTEXPR sprout::complex<T> round(sprout::complex<T> const& x) {
|
||||
inline SPROUT_CONSTEXPR sprout::complex<T> round(sprout::complex<T> const& x) {
|
||||
return sprout::complex<T>(sprout::round(x.real()), sprout::round(x.imag()));
|
||||
}
|
||||
} // namespace sprout
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue