我目前正在处理一个项目,之前的开发人员使用了
std::complex<long double>
该软件在大部分代码中都广泛使用了信号处理方法,这些方法都是使用上述复杂数据类型实现的。经常创建、访问和删除大型多维数组。
这种数据类型的好处是,所有所需的数学函数(例如来自<cmath>
的函数)都支持复数,因此在使用此数据类型进行基本数学运算时几乎没有额外的开销。
我们的软件还通过该开发人员实现了其他函数,例如对大数据量的 n 维复卷积。
我目前正在开发一个需要大量使用 n 维卷积的扩展功能。然而,这个扩展的大多数情况不需要进行复杂运算。程序当前运行速度较慢,我在想在关键部分是否可以使用专有结构体来提高速度,类似于:
struct CPLX{
long double REAL;
long double IMAG;
}CPLX;
并实现所需的方法(实现数学运算,如复杂乘法、相位等...)。
对于大多数扩展不需要复杂操作的部分:
(a+0i)*(b+0i)
比
a*b
慢得多吗?
使用自己的结构体与高效实现的数学运算和最小开销 VS. 使用 std::complex
和 cmath
会更快吗?
(除了需要额外的测试来确保一切正常之外)
使用 std::complex
会有明显的开销吗?
如果有的话,何时使用 std::complex
比使用自己的方法和结构体更合适?
std::complex
来实现您的“高效”数学函数呢? - juanchopanza