const void * как комплексное число для процедуры MKL Blas в переполнении стека

Я застрял с вызовом функции 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);

Я попытался установить альфа = комплекс (1,0,0), но это возвращает мне ошибку:

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

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

0

Решение

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

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

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

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]