我用 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 );
我将运行一些测试,实现其余的计算,然后看看我能做些什么来解决零值问题。
感谢您的参与!
--乔丹。
最佳答案
我比较确定我看到了一些错误:
计算标准偏差时,您在循环体中使用参数
data_count
而不是idx
。那永远行不通。您正在使用
Data[data_count]
作为平均值和标准偏差函数中数组的参数。如果您使用的是 C,您可能只需要float *Data
。我很确定Data[data_count]
在这里是完全错误的。float Data[]
可能是正确的。 编辑:评论中已经指出,如果编译器支持,这种语法实际上是正确的。检查以确保您的编译器支持此功能,如果支持,则不需要进行任何更改。当您调用平均值和标准差函数时,您传递的是
Data[data_count]
。我几乎可以肯定这一定是错的;Data[data_count]
是Data
的第(data_count+1)
个元素,大小为data_count
的数组;所以它甚至没有定义,如果定义了,类型仍然是错误的。我建议在此处简单地传递Data
。
我通常在 C++ 中工作,所以这些评论可能不合时宜,但如果 C 在这些方面与 C++ 相似,那么这些绝对是需要关注的问题。
关于C统计分析程序有数学错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47399230/