2016-10-14 5 views
0

私はアルファのような__m128を使用したいが、私はこれだけどのようにして__m128変数に複素数全体を入れることができますか?

__m128 alfa = _mm_load_ps((float const *)&alpha); 

アルファをすれば私の問題は、この機能に

void function(complex float* A, complex float* B, complex float alpha) { 

をしているCで組み込み関数を使用して、あまりにも多くの経験を持っていません複素数の実数部を得ます。

複素数全体を__m128 alfaにするにはどうすればよいですか?

答えて

1

このコードは私のためにうまく働いた:

complex float a __attribute__ ((aligned (16))) = 5 + 10*I; 
__m128 f = _mm_load_ps((float const *)&a); // requires 16B alignment 
float *p = (float *)&f; 
printf("real(0): %f, imag(1): %f, (2): %f, (3): %f\n", p[0], p[1], p[2], p[3]); 

プリント

real(0): 5.000000, imag(1): 10.000000, (2): 0.000000, (3): 0.000000 

あなたはalphaがゼロでない虚部を持っていますか?どのようにあなたは本当の部分を取得しているだけ知っていますか?

+0

私はこの複雑なfloat型のalphaA __attribute__((aligned(16)))= alphaを試しました。 – CSR95

+0

に続いてこの式__m128を入力します。alfa = _mm_load_ps((float const *)&alphaA);実際の(0):0.335223、imag(1):-0.911647、(2):0.335223、(3):-0.911647というように、あなたのプリントでこれを得る。問題は、2つの複素数を乗算して、それを行う方法だと思うことです。どのように乗算をするのか分かりますか? – CSR95

+0

アルファにはどのような価値がありますか? – Phil

関連する問題