C统计分析程序有数学错误

标签 c math

我用 C 编写了一个程序,它使用通过命令行传递的数字进行一些不同的计算。出于某种原因,Average() 的结果往往很大(偶尔为负,我将包含一个日志文件)并且 Std_Dev() 倾向于打印 0。我将代码保存在 GitHub 上的存储库中:

https://github.com/Jordan-Effinger/Data-Analysis

关于文件的快速通知:存储库中有一个名为 type.h 的文件。该文件未在我当前的构建中使用,因此如果您没有看到其中定义的任何内容,请注意。

示例结果:

主要 0 0 0 0 0 计算平均值 计算标准偏差 -141545200 1195973704

主要 0 0 0 0 0 计算平均值 计算标准偏差 -1030105488 1003883182

主要 0 0 0 0 0 计算平均值 计算标准偏差 1478538976 1111766907

有什么想法吗?我认为当函数返回结果时出现问题 - 但我以前使用过这些函数并且我没有遇到这种问题...

编辑 #1: 我意识到这两个函数都存在零问题。这是我必须努力的事情。我查看了他的评论,在那里进行了一些更改,并发现了我自己的一些更改。我不会包括所有功能,只是检查更改。

文件:main.c 我使用 malloc 为 Data[]、Sorted[] 动态分配了空间:

` float *Data = (float *) malloc( (data_count + 3 ) * sizeof(float) );

在所有函数(及其原型(prototype))中,我将数组声明为 float * 并将 data_count 变量作为大小引用传递(在大多数情况下我对 sizeof() 不太满意)。

文件:std_dev.c: 在 for 循环中我改变了

sum += pow( Data[data_count] - average, 2 );

sum += pow( Data[index] - average, 2 );

我将运行一些测试,实现其余的计算,然后看看我能做些什么来解决零值问题。

感谢您的参与!

--乔丹。

最佳答案

我比较确定我看到了一些错误:

  1. 计算标准偏差时,您在循环体中使用参数data_count 而不是idx。那永远行不通。

  2. 您正在使用 Data[data_count] 作为平均值和标准偏差函数中数组的参数。如果您使用的是 C,您可能只需要 float *Data。我很确定 Data[data_count] 在这里是完全错误的。 float Data[] 可能是正确的。 编辑:评论中已经指出,如果编译器支持,这种语法实际上是正确的。检查以确保您的编译器支持此功能,如果支持,则不需要进行任何更改。

  3. 当您调用平均值和标准差函数时,您传递的是 Data[data_count]。我几乎可以肯定这一定是错的; Data[data_count]Data 的第 (data_count+1) 个元素,大小为 data_count 的数组;所以它甚至没有定义,如果定义了,类型仍然是错误的。我建议在此处简单地传递 Data

我通常在 C++ 中工作,所以这些评论可能不合时宜,但如果 C 在这些方面与 C++ 相似,那么这些绝对是需要关注的问题。

关于C统计分析程序有数学错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47399230/

相关文章:

c - 如何在 C 中将数据包写入 TAP 接口(interface)?

c - 为什么使用 while(fgets) 语句后我的 c 指针地址会发生变化?

ruby - 我如何将单个 RGB 值与集合进行比较以使用 CIE94 公式找到最接近的匹配项 - 在 Ruby 中,

Java更精确的算术

java - 如何将一个区间[start,end]分成n个距离相等的点?

c - 如何从字符串中检索作为关键字的标记?

c - 仅使用一个函数的链表上的合并排序函数

c - 相对于编译器的输出变化

c - 是否可以在条件表达式中使用另一个条件表达式?

java - 2公式帮助的力量