我正在尝试在我的C代码中使用一些BLAS例程来进行实验,出于某些我不理解的原因出错了。这是我的代码
#include<stdio.h>
#define N 100000
void daxpy_(int* n, double* alpha,
double* x, int *incx,
double* y, int *incy);
int main(){
static double x[N], y[N];
double a = 0;
int i;
for (i = 0; i < N; i++){
x[i] = 1;
y[i] = 1;
}
int n = N;
int incx = 1;
int incy = 1;
daxpy_(&n, &a, x, &incx, y, &incy);
for (i = 0;i < 10;i++){
printf ("%d ",x[i]);
}
}
要检查答案是否正确,我打印y的前几个条目。我意识到我设置了一个= 0所以y矢量应该不变,因为结果应该是ax + y。见http://www.mathkeisan.com/usersguide/man/daxpy.html。然而,结果给了我所有的零。此外,当我将a更改为不同时,我得到完全随机的结果,例如设置a = 0.2我得到输出是仅包含858993459的向量。我可能遗漏了一些非常微不足道的东西。我正在使用Cygwin编译并输入
gcc -o daxpy daxpy.c -lblas
我认为应该没问题。任何帮助将不胜感激!
编辑:我已将N设置为5,这是我运行时的输出
0 0 0 0 0
另外,当我改变a = 0.2时,输出给出
858993459 858993459 858993459 858993459 858993459
答案 0 :(得分:1)
有两个问题,其中一个是未定义的行为,另一个可能只是在阅读文档时的一个小的疏忽:
for (i = 0;i < 10;i++){
printf ("%d ",x[i]);
}
您使用格式说明符%d
作为double值。请改用%f
。
for (i = 0;i < 10;i++){
printf ("%f ",x[i]);
// ^
}
此外,根据文档,输出将存储在y
而不是x
。