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