我想使用SIMD在AMD64架構上操作包含雙類型值的向量。下面是我的問題的簡單例子。這工作正常,如果我打印浮動值,但不是雙。我需要精確到9位十進制數字。SSE向量類型雙操作
#include<stdio.h>
#include<emmintrin.h>
typedef union f4vector
{
__m128d v;
}float4;
int main()
{
float4 x,y,z;
double f0[2]={2334, 5};
double f1[2]={2334.32345324 , 5};
double f3[2];
x.v=_mm_set_pd(f0[0], f0[1]);
y.v = _mm_set_pd(f1[0], f1[1]);
z.v = _mm_mul_pd(x.v , y.v);
f3[0]=z.v[0];
f3[1]=z.v[1];
printf("%d, %d\n", f3[0], f3[1]); // doesnt print correct values.
}
的'%D'格式說明是整數。如果你不想打印浮動或雙打,使用'%f'。 – vordhosbn
除了顯而易見的錯誤,使用常量值,優化器會咀嚼這些數據並將常量傳遞給'printf'。這裏根本不會有任何SIMD操作。 –