Tag: 三角

C中arcsin的逼近

我有一个程序可以根据Taylor的序列计算arcsin值的近似值。 我的朋友和我已经提出了一个能够返回几乎“正确”值的算法,但我认为我们并没有非常清晰地完成它。 看一看: double my_asin(double x) { double a = 0; int i = 0; double sum = 0; a = x; for(i = 1; i < 23500; i++) { sum += a; a = next(a, x, i); } } double next(double a, double x, int i) { return a*((my_pow(2*i-1, 2)) / ((2*i)*(2*i+1)*my_pow(x, 2))); } […]

C中的矢量化Trigfunction?

我正在寻找计算高度并行化的trig函数(在1024的块中),并且我想利用至少一些现代架构所具有的并行性。 当我编译一个块 for(int i=0; i<SIZE; i++) { arr[i]=sin((float)i/1024); } 海湾合作委员会不会对其进行矢量化,并表示 not vectorized: relevant stmt not supported: D.3068_39 = __builtin_sinf (D.3069_38); 这对我来说很有意义。 但是,我想知道是否有一个库可以进行并行三角计算。 只有一个简单的泰勒系列上升到11阶,GCC将矢量化所有循环,并且我的速度超过了一个天真的sin循环的速度的两倍(具有精确的答案,或者具有9阶系列,只有一个位)关闭1600个值的最后两个,加速> 3倍)。 我确定有人之前遇到过这样的问题,但是当我谷歌时,我发现没有提到任何库等。 A.是否已存在某些内容? B.如果没有,建议优化并行触发function? 编辑:我发现了以下库名为“SLEEF”: http ://shibatch.sourceforge.net/,在本文中描述并使用SIMD指令计算几个基本function。 它使用SSE和AVX特定代码,但我认为将其转换为标准C循环并不困难。