是否有执行val = cos(phase) + sin(phas) j
的标准函数。是否有使用“欧拉公式”来执行“ argument”功能相反的常规名称?与std::polar
类似,但是需要幅度分量。
我正在查看一个大型的代码库,该代码库经常执行以下模式:
Eigen::VectorXf phase = ...;
Eigen::VectorXcf cplx = ...;
cplx.real() = phase.array().cos();
cplx.imag() = phase.array().sin();
很遗憾,这没有利用sincos
优化。
是否存在本文档中未发现的自然方法?为此有一个常规名称吗?
这可能就是我要使用的,只是在更改大量代码之前先与世界核对。
void phase2Cplx(const Eigen::Ref<const Eigen::VectorXf> phaseIn,
Eigen::Ref<Eigen::VectorXcf> cplxOut) {
// assert len in == len out
Eigen::Index len = cplxOut.size();
std::complex<float> *out = cplxOut.data();
const float *in = phaseIn.data();
for (Eigen::Index i = 0; i < len; ++i) {
float val = in[i];
out[i] = { cosf(val), sinf(val) };
}
}
// @Details: Using () was measurably worse than []