summaryrefslogtreecommitdiff
path: root/cplx.h
diff options
context:
space:
mode:
Diffstat (limited to 'cplx.h')
-rw-r--r--cplx.h26
1 files changed, 26 insertions, 0 deletions
diff --git a/cplx.h b/cplx.h
new file mode 100644
index 0000000..5e1538d
--- /dev/null
+++ b/cplx.h
@@ -0,0 +1,26 @@
+#pragma once
+
+
+struct device_complex {
+ double x, y;
+};
+
+template <int N>
+__host__ __device__ inline device_complex complex_power(double x, double y, double x2, double y2) {
+ device_complex next = complex_power<N - 1>(x, y, x2, y2);
+ return device_complex{
+ x * next.x - y * next.y,
+ x * next.y + y * next.x
+ };
+}
+
+template <>
+__host__ __device__ inline device_complex complex_power<2>(double x, double y, double x2, double y2) {
+ return device_complex{x2 - y2, 2 * x * y};
+}
+
+template <>
+__host__ __device__ inline device_complex complex_power<1>(double x, double y, double x2, double y2) {
+ (void)x2; (void)y2;
+ return device_complex{x, y};
+}