vcl_complex.h

来自「InsightToolkit-1.4.0(有大量的优化算法程序)」· C头文件 代码 · 共 50 行

H
50
字号
#ifndef vcl_sgi_complex_h_
#define vcl_sgi_complex_h_

# include "iso/vcl_complex.h"
# undef  vcl_abs
# define vcl_abs vcl_abs
template <typename T>
inline T vcl_abs(std::complex<T> const &z) { return std::abs(z); }

# undef vcl_log10
# define vcl_log10 vcl_log10
template <typename T>
inline T vcl_log10(std::complex<T> const &z) { return ::log10(z); }

# undef vcl_exp
# define vcl_exp vcl_exp
template <typename T>
inline std::complex<T> vcl_exp(std::complex<T> const &z) { return vcl_polar(T(exp(z.real())), z.imag()); }

# undef vcl_pow
# define vcl_pow vcl_pow
template <typename T>
inline std::complex<T> vcl_pow(std::complex<T> const &z, T p) { return vcl_polar(T(pow(std::norm(z),p/2)),std::arg(z)*p); }
// Note that I'm using norm(z)^(p/2) instead of abs(z)^p, to have only one time-consuming operation - PVr

# undef vcl_sqrt
# define vcl_sqrt vcl_sqrt
template <typename T>
inline std::complex<T> vcl_sqrt(std::complex<T> const &z) {
  // was: return vcl_exp(vcl_log(z)/T(2));
  // NOW implemented without using log() or exp() which are
  // not necessarily available with type T - PVr, May 2002.
  T c = vcl_abs(z);
  return std::complex<T>(::sqrt((c+z.real())/T(2)), ::sqrt((c-z.real())/T(2)));
}

# undef vcl_cos
# define vcl_cos vcl_cos
template <typename T>
inline std::complex<T> vcl_cos(std::complex<T> const &z)
{ return std::complex<T>(vcl_cos(z.real())*vcl_cosh(z.imag()),-vcl_sin(z.real())*vcl_sinh(z.imag())); }

# undef vcl_sin
# define vcl_sin vcl_sin
template <typename T>
inline std::complex<T> vcl_sin(std::complex<T> const &z)
{ return std::complex<T>(vcl_sin(z.real())*vcl_cosh(z.imag()),vcl_cos(z.real())*vcl_sinh(z.imag())); }

#endif // vcl_sgi_complex_h_

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?