C统计分析程序存在数学错误

时间:2017-11-20 19:01:37

标签: c math

我在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 );

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

感谢您的投入!

- 约旦

1 个答案:

答案 0 :(得分:3)

我相对肯定我看到了一些错误:

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

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

  3. 当您调用平均值和标准差函数时,您将传递Data[data_count]。我几乎肯定这一定是错的; Data[data_count](data_count+1)的{​​{1}}&#39;元素,大小为Data的数组;所以它甚至没有定义,如果是,那么类型仍然是错误的。我建议只在这里传递data_count

  4. 我通常使用C ++工作,所以这些评论可能不合适但如果C在这些方面就像C ++那么这些肯定是需要考虑的问题。