const void * как комплексное число для подпрограммы MKL Blas в C ++

Я застрял с вызовом функции MKL Blas cblas_zgemv

Есть два коэффициента альфа и бета, которые являются комплексными числами:

alpha

REAL for sgemv

DOUBLE PRECISION for dgemv

COMPLEX for cgemv, scgemv

DOUBLE COMPLEX for zgemv, dzgemv

. Но в определении функции:

void cblas_zgemv (const CBLAS_ORDER order, const CBLAS_TRANSPOSE TransA, 
const MKL_INT M, const MKL_INT N, const void *alpha, const void *A,
 const MKL_INT lda, const void *X, const MKL_INT incX, const void *beta, 
void *Y, const MKL_INT incY);

Я попытался установить alpha = complex (1.0,0), но это вернуло мне ошибку:

error: no suitable conversion function from "complex<double>" to "const void *" exists

Что я могу сделать? Я не понимаю, что это за const void * ...


person mumtei    schedule 17.09.2013    source источник
comment
Примечание. Для записи однострочная горизонтальная прокрутка - это лаваш. Если возможно, разбейте длинные строки на несколько частей для удобочитаемости.   -  person WhozCraig    schedule 17.09.2013


Ответы (1)


Функция ожидает указатель на комплексное значение, а не на само значение. Вам понадобится переменная для хранения значения, а затем передать ее адрес:

std::complex<double> alpha(1,0);
cblas_zgemv(..., &alpha, ...);

Я считаю, что это безопасно, поскольку lapack_complex_double совместим с макетом (а в C ++ является псевдонимом) std::complex<double>. На всякий случай вы можете предпочесть использовать lapack_complex_double при вызове этой библиотеки.

person Mike Seymour    schedule 17.09.2013