mmo*_*ent 3 c++ arrays struct complex-numbers
我目前正在开发一个前一个开发人员使用的项目
std::complex<long double>
Run Code Online (Sandbox Code Playgroud)
在大多数代码中.该软件在很大程度上依赖于信号处理方法,这些方法都是使用上述复杂数据类型实现的.经常创建,访问和删除大型多维数组.
这种数据类型的好处是,所有必需的数学函数(例如来自<cmath>)都支持复数,因此使用此数据类型的基本数学运算几乎没有开销.
其他功能,例如大数据量的n维复杂卷积已由我们的软件由所述开发人员实现.
我目前正致力于使用n维卷积A LOT的扩展.但是,此扩展的大多数方案 都不需要复杂的操作.该程序目前运行速度很慢,我想知道在关键部分使用专有结构是否会更快.好吧
struct CPLX{
long double REAL;
long double IMAG;
}CPLX;
Run Code Online (Sandbox Code Playgroud)
并自己实现所需的方法(实现复数乘法,阶段等数学运算......).
对于不需要复杂操作的部分(对于我的大多数扩展都是如此):不会
(a+0i)*(b+0i)
明显慢于
a*b
?
将使用自己的结构,有效地实现数学运算和最小的开销VS. 使用std::complex并且cmath更快?
(除了这需要额外的测试以确保一切正常)
使用时会有很大的开销std::complex吗?
如果是这样,何时使用std::complex比使用自己的方法和结构更合适?
不要重新使用轮子
内置标准库已针对您的硬件进行了优化和调整.不要浪费你的时间来尝试制作一些只是默认值的一小部分的东西.如果您发现在特定的例程中,配置文件显示它很慢,请使用更好的库,例如Intel或GNU的复杂浮点库提供的库.
编辑:不要害怕复杂数字库的可能开销.唯一的内存开销是将实部和虚部一起存储在一个对象中,唯一的时间开销就是实际将它们打包在一起.这两个操作都将通过您提出的实现进行复制,除非您从未真正需要复杂的数字.
| 归档时间: |
|
| 查看次数: |
795 次 |
| 最近记录: |