【发布时间】:2017-10-04 00:42:57
【问题描述】:
我想在 AMD64 架构上使用包含双精度类型值的向量的 SIMD 操作。下面是我的问题的简单示例。如果我打印浮点值,这可以正常工作,但不能用于双精度。我需要最多 9 位十进制数字的精度。
#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。 -
除了明显的错误之外,对于常量值,优化器会仔细检查并将常量传递给
printf。这里根本不会进行任何 SIMD 操作。