我是 EE,不是代码专家,所以请多多包涵。
我正在使用 Embarcadero C++ Builder (XE3)。
我有一个 FFT 算法,它可以对复数进行大量操作。我发现如果我绕过 Embarcadero 的复杂数学库,并在我自己的代码中进行所有计算,我的 FFT 将运行大约 4.5 倍的速度。此处显示的 4 个操作都需要过多的时间。
#include <dinkumware\complex>
#define ComplexD std::complex<double>
ComplexD X, Y, Z, FFTInput[1024];
double x, y;
Z = X * Y;
x = X.real();
y = X.imag();
Z = ComplexD(x,y);
用我自己的交叉乘法替换乘法将我的执行时间减半。然而,我担心的是我访问输入数组的实部和虚部的方式。我正在这样做:
double *Input;
Input = reinterpret_cast<double *>(FFTInput);
// Then these statements are equivalent.
x = FFTInput[n].real();
y = FFTInput[n].imag();
x = Input[2*n];
y = Input[2*n+1];
这样做又将我的执行时间缩短了一半,但我不知道这个 reinterpret_cast 是否是明智之举。我可以将输入数组更改为两个双精度而不是一个复数,但是我在许多程序中都使用了这个 FFT,并且不想重写所有内容。
这个 reinterpret_cast 可以吗,还是我会有内存问题?另外,有没有办法让 Embarcadero 复杂的数学函数运行得更快?最后,虽然它对我来说不是很重要,但这个 reinterpret_cast 是否可移植?