我在C中编写了一个程序,它通过命令行传递数字进行一些不同的计算。由于某种原因,Average()的结果往往是大的(偶尔会是负面的,我会包含一个日志文件),而Std_Dev()往往会打印0.我在GitHub上的存储库中找到了代码:< / p>
https://github.com/Jordan-Effinger/Data-Analysis
关于文件的快速通知:在存储库中是一个名为type.h的文件。该文件未在我当前的Build中使用,因此,如果您没有看到任何定义的内容,那么只使用一个抬头。
示例结果:
主0 0 0 0 0 计算平均值 计算标准偏差 -141545200 1195973704
主0 0 0 0 0 计算平均值 计算标准偏差 -1030105488 1003883182
主0 0 0 0 0 计算平均值 计算标准偏差 1478538976 1111766907
有什么想法?我认为当函数返回结果时出现问题 - 但我以前使用过这些函数而且我没有遇到这种问题......
编辑#1: 我意识到这两个函数都存在零问题。这是我必须要做的事情。我查看了他的评论,在那里实施了一些变化,发现了我自己的一些变化。我不会包含所有功能,只需要进行更改。
file:main.c 我使用malloc:
为Data [],Sorted []动态分配了空间` float *Data = (float *) malloc( (data_count + 3 ) * sizeof(float) );
在所有函数(及其原型)中,我将数组声明为float *并将data_count变量作为大小引用传递(在大多数情况下,我对sizeof()不太满意)。 / p>
file:std_dev.c: 在for循环中我改变了
sum += pow( Data[data_count] - average, 2 );
到
sum += pow( Data[index] - average, 2 );
我要运行一些测试,实现其余的计算,然后看看我能做些什么来解决零值问题。
感谢您的投入!
- 约旦
答案 0 :(得分:3)
我相对肯定我看到了一些错误:
计算标准偏差时,在循环体中使用参数data_count
而不是idx
。那将永远不会奏效。
您在平均值和标准差函数中使用Data[data_count]
作为数组的参数。如果你正在使用C,你可能只想要float *Data
。我很确定Data[data_count]
在这里完全错了。可能float Data[]
可能是正确的。 编辑:评论中指出,如果编译器支持,该语法实际上可以正确。检查以确保您的编译器支持此功能,如果是,则不需要进行任何更改。
当您调用平均值和标准差函数时,您将传递Data[data_count]
。我几乎肯定这一定是错的; Data[data_count]
是(data_count+1)
的{{1}}&#39;元素,大小为Data
的数组;所以它甚至没有定义,如果是,那么类型仍然是错误的。我建议只在这里传递data_count
。
我通常使用C ++工作,所以这些评论可能不合适但如果C在这些方面就像C ++那么这些肯定是需要考虑的问题。