我正在编写一个很大程度上依赖于复杂的加法和乘法的程序。我想知道是否应该使用gsl_complex
或std::complex
。
我似乎没有在网上找到 GSL 复数算法与std::complex
. 一个基本的谷歌搜索也没有帮助我找到 GSL 复合体的基准页面。
我编写了一个 20 行的程序,它生成两个随机复数数组(其中 1e7 个),然后使用clock()
from检查加法和乘法需要多长时间<ctime>
。使用这种方法(没有编译器优化)我了解了这一点gsl_complex_add
,并且几乎分别是's和's 的gsl_complex_mul
两倍。但是我以前从来没有做过这种事情,所以这就是你检查哪个更快的方式吗?std::complex<double>
+
*
任何链接或建议都会有所帮助。谢谢!
编辑:
好的,所以我再次尝试使用 -O3 标志,现在结果非常不同!std::complex<float>::operator+
是 的两倍多gsl_complex_add
,而 gsl_complex_mul
是 的 1.25 倍std::complex<float>::operator*
。如果我使用 double,gsl_complex_add
则比 . 快约 30%,std::complex<double>::operator+
而std::complex<double>::operator*
比gsl_complex_mul
. 我只需要浮点级精度,但我听说double 更快(而且内存对我来说不是问题)!所以现在我真的很困惑!