2017-02-06 1 views
0

Я хочу вычислить некоторый exp() следующим образом.CUDA - как конвертировать exp (1i * x)?

float t = 5.0; cuComplex res = expf(1i*t);

, но не может выполнять функции. что я думаю, что компилятор cuda не поддерживает функцию сложного аргумента expf().

некоторые примеры описывает ехр (х + гу) .. Я хочу ехр (х * я) ....

+0

Формула Эйлера? https://en.wikipedia.org/wiki/Euler's_formula – talonmies

+0

self resolved .. thanx – James

ответ

1

решил сам ...

__device__ __forceinline__ cuComplex _exp (cuComplex z) 
{ 
    cuComplex res; 
    float t = expf(z.x); 
    sincosf(z.y, &res.y, &res.x); 
    res.x *= t; 
    res.y *= t; 
    return res; 
} 

частичный источник

/* 1i*t = 0+ti | -1i*t = 0-ti */ 
    cuComplex _gbp, _gfp; 
    _gbp.x = 0; 
    _gbp.y = t; 
    _gfp.x = 0; 
    _gfp.y = -t; 

    cuComplex res_b = _exp(_gbp); 
    cuComplex res_f = _exp(_gfp); 
+1

См. также [этот ответ] (https://devtalk.nvidia.com/default/topic/505308/cuda-programming-and -performance/complex-number-exponential-function/post/3603793/# 3603793) на форумах NVIDIA. – njuffa

+0

да. это почти то же самое – James

Смежные вопросы