gpt4 book ai didi

c - MATLAB 余弦和 C 余弦函数的区别

转载 作者:太空宇宙 更新时间:2023-11-04 08:17:09 24 4
gpt4 key购买 nike

我有一个用 C 实现的公式,我已经这样做了,但是我收到的结果与 MATLAB 不同

代码:

  double sumVector(float x[], int M){


double y = 0;
int i;

for(i = 1; i<M ; i++){


y += (0.5*x[i]) + ((x[i])*(x[i])* (cos(floor(x[i]/4) - 32)));


}

return y;
}

其中 x[] 是一个包含元素 0:0.001:255 的数组

  • C中的结果是37022697.82
  • Matlab 中的结果是-12767828.5

为什么会有这么大的差异,是什么原因造成的?

最佳答案

我猜你的意思是你的数组 x[] 包含元素 0.0、0.001、0.002 ... 255.0。对吗?

在此假设下,以下 C 代码给出 -12767828.504138,这与您的 MATLAB 结果一致(在数值精度范围内)。正如评论中所指出的,您应该小心使用 floatdouble,并且您可能希望您的函数遍历 x 的所有元素,包括 x[0]。除此之外,我不知道您如何初始化数组以及如何调用该函数。

#include <math.h>
#include <stdio.h>
#include <stdlib.h>

double sumVector(double x[], int M){


double y = 0.0;
int i;

for(i = 0; i<M ; i++){


y += (0.5*x[i]) + ((x[i])*(x[i])* (cos(floor(x[i]/4.0) - 32.0)));


}

return y;
}

int main()
{
const int M = 255001;
const double delta = 0.001;
double *x = malloc(M * sizeof(double));
int i;

// Fill the array. Is that what you want?
for(i = 0; i < M; i++) {
x[i] = i * delta;
}

printf("Result = %f\n", sumVector(x, M));

free(x);

return 0;
}

关于c - MATLAB 余弦和 C 余弦函数的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35190776/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com