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

calling daxpy from C. What is going wrong?

我正尝试在我的 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 的前几项。我意识到我设置了 a = 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

有两个问题,一个是未定义的行为,另一个可能只是阅读文档时的一个小疏忽:

for (i = 0;i < 10;i++){
        printf ("%d  ",x[i]);
    }

您对双精度值使用格式说明符 %d。请改用 %f

for (i = 0;i < 10;i++){
        printf ("%f  ",x[i]);
    //            ^
    }

此外,根据文档,输出将存储在 y 而不是 x