我是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是否明智。我可以将输入数组更改为两个double而不是一个复数,但是我在许多程序中都使用了此FFT,并且不想重写所有内容。
这个reinterpret_cast好吗,还是我遇到内存问题?此外,是否有办法使Embarcadero复杂的数学函数运行得更快?最后,尽管这对我来说不是很重要,但是reinterpret_cast可移植吗?
最佳答案
这是允许的。虽然这不是标准报价,但cppreference表示:
我将尽快从实际标准中寻找报价。
关于c++ - 这是reinterpret_cast好吗,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19299468/