#pragma once struct device_complex { double x, y; }; template __host__ __device__ inline device_complex complex_power(double x, double y, double x2, double y2) { device_complex next = complex_power(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}; }