2016-10-14 7 views
0

Je n'ai pas trop d'expérience en utilisant intrinsics dans C. Mon problème est d'avoir cette fonctionComment puis-je avoir dans une variable __m128 un nombre entier complexe?

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

Je veux utiliser alpha comme __m128, mais si je le fais

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

alfa seulement obtient la partie réelle du nombre complexe.

Comment puis-je avoir dans __m128 alfa le numéro du complexe entier?

Répondre

1

Ce code a bien fonctionné pour moi:

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]); 

impressions

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

Êtes-vous sûr alpha a une partie imaginaire non nulle? Comment savez-vous que vous obtenez seulement la partie réelle?

+0

J'ai essayé ce flottant complexe alphaA __attribute__ ((aligned (16))) = alpha; – CSR95

+0

suivi de cette expression __m128 alfa = _mm_load_ps ((float const *) & alphaA); mais je reçois ceci avec votre impression: réel (0): 0.335223, imag (1): -0.911647, (2): 0.335223, (3): -0.911647. La chose est que je veux multiplier 2 nombres complexes donc je pense que c'est la façon de le faire. Avez-vous une idée de la façon dont la multiplication? – CSR95

+0

quelle est la valeur alpha? – Phil