从C调用daxpy出了什么问题?

时间:2015-03-02 16:20:12

标签: c blas

我正在尝试在我的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

1 个答案:

答案 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