25 #ifndef HIP_INCLUDE_HIP_AMD_DETAIL_HIP_COMPLEX_H
26 #define HIP_INCLUDE_HIP_AMD_DETAIL_HIP_COMPLEX_H
28 #if !defined(__HIPCC_RTC__)
29 #include "hip/amd_detail/amd_hip_vector_types.h"
32 #if defined(__HIPCC_RTC__)
33 #define __HOST_DEVICE__ __device__
35 #define __HOST_DEVICE__ __host__ __device__
48 __HOST_DEVICE__
static inline float hipCrealf(
hipFloatComplex z) {
return z.x; }
50 __HOST_DEVICE__
static inline float hipCimagf(
hipFloatComplex z) {
return z.y; }
52 __HOST_DEVICE__
static inline hipFloatComplex make_hipFloatComplex(
float a,
float b) {
67 return z.x * z.x + z.y * z.y;
71 return make_hipFloatComplex(p.x + q.x, p.y + q.y);
75 return make_hipFloatComplex(p.x - q.x, p.y - q.y);
79 return make_hipFloatComplex(p.x * q.x - p.y * q.y, p.y * q.x + p.x * q.y);
83 float sqabs = hipCsqabsf(q);
85 ret.x = (p.x * q.x + p.y * q.y) / sqabs;
86 ret.y = (p.y * q.x - p.x * q.y) / sqabs;
90 __HOST_DEVICE__
static inline float hipCabsf(
hipFloatComplex z) {
return sqrtf(hipCsqabsf(z)); }
95 __HOST_DEVICE__
static inline double hipCreal(
hipDoubleComplex z) {
return z.x; }
97 __HOST_DEVICE__
static inline double hipCimag(
hipDoubleComplex z) {
return z.y; }
99 __HOST_DEVICE__
static inline hipDoubleComplex make_hipDoubleComplex(
double a,
double b) {
114 return z.x * z.x + z.y * z.y;
118 return make_hipDoubleComplex(p.x + q.x, p.y + q.y);
122 return make_hipDoubleComplex(p.x - q.x, p.y - q.y);
126 return make_hipDoubleComplex(p.x * q.x - p.y * q.y, p.y * q.x + p.x * q.y);
130 double sqabs = hipCsqabs(q);
132 ret.x = (p.x * q.x + p.y * q.y) / sqabs;
133 ret.y = (p.y * q.x - p.x * q.y) / sqabs;
137 __HOST_DEVICE__
static inline double hipCabs(
hipDoubleComplex z) {
return sqrt(hipCsqabs(z)); }
141 __HOST_DEVICE__
static inline hipComplex make_hipComplex(
float x,
float y) {
142 return make_hipFloatComplex(x, y);
146 return make_hipFloatComplex((
float)z.x, (
float)z.y);
150 return make_hipDoubleComplex((
double)z.x, (
double)z.y);
154 float real = (p.x * q.x) + r.x;
155 float imag = (q.x * p.y) + r.y;
157 real = -(p.y * q.y) + real;
158 imag = (p.x * q.y) + imag;
160 return make_hipComplex(real, imag);
165 double real = (p.x * q.x) + r.x;
166 double imag = (q.x * p.y) + r.y;
168 real = -(p.y * q.y) + real;
169 imag = (p.x * q.y) + imag;
171 return make_hipDoubleComplex(real, imag);
Definition: amd_hip_vector_types.h:2035
Definition: amd_hip_vector_types.h:2072