File indexing completed on 2026-04-10 07:50:27
0001 #pragma once
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011 #if defined(__CUDACC__) || defined(__CUDABE__)
0012 #define TCOMPLEX_METHOD __host__ __device__
0013 #else
0014 #define TCOMPLEX_METHOD
0015 #endif
0016
0017
0018 #include <cuComplex.h>
0019
0020 struct tcomplex
0021 {
0022 static TCOMPLEX_METHOD cuFloatComplex cuSqrtf( const cuFloatComplex& a) ;
0023 static TCOMPLEX_METHOD cuFloatComplex make_cuFloatComplex_polar(float radius , float theta) ;
0024 static TCOMPLEX_METHOD float cuRhof( const cuFloatComplex& a) ;
0025 static TCOMPLEX_METHOD float cuThetaf(const cuFloatComplex& a) ;
0026 };
0027
0028 inline TCOMPLEX_METHOD cuFloatComplex tcomplex::make_cuFloatComplex_polar(float radius , float theta)
0029 {
0030 return make_cuFloatComplex(fabsf(radius)*cosf(theta), fabsf(radius)*sinf(theta));
0031 }
0032 inline TCOMPLEX_METHOD float tcomplex::cuRhof(const cuFloatComplex& a)
0033 {
0034 return sqrtf( a.x*a.x + a.y*a.y ) ;
0035 }
0036 inline TCOMPLEX_METHOD float tcomplex::cuThetaf(const cuFloatComplex& a)
0037 {
0038 return (a.x||a.y) ? atan2f(a.y,a.x):0.f ;
0039 }
0040 inline TCOMPLEX_METHOD cuFloatComplex tcomplex::cuSqrtf(const cuFloatComplex& a)
0041 {
0042 return make_cuFloatComplex_polar( sqrtf(cuRhof(a)) , 0.5f*cuThetaf(a) );
0043 }
0044
0045