有些事情我应该说:这是我第一次在这里提问。通常,当我对某些事情有疑问时,我发现它在某处得到了解答(包括我在这个网站上找到了很多答案)。但这一次,我找不到答案,所以如果有,我没有找到,我很抱歉提出已经提出的问题(我知道你们不喜欢它,但我保证我已经搜索过了。
我通过帮助引起另一个人的怀疑来解决这个疑问。好吧,我不知道怎么用英语说这个,但我相信它是:“标准偏差”(Standard Deviation on Wikipedia)。这就是该计划的目的。
一个人提出了一个问题,如何做到这一点,它没有工作......我不知道计算标准偏差的公式,但他给了我。但他给的那个是错的。我将展示程序的代码:PasteBin of My Standard Deviation Code
我现在用这种方式似乎正在工作,但我不确定。我把这个解决方案提供给了我求助的人。该计划是对的吗?
但我真正的问题不在于该计划是否正确。代码中有这部分:
sum += pow(v[i] - m,2);
当他给我错误的公式时,它是:
sum += v[i] - m;
你们可以编译错误的代码吗?根据您输入的数字,输出为 -1。#J 。为什么?这是什么意思?
#include <stdio.h>
#include <math.h>
int main (void)
{
int n = 10, i;
double d, m = 0.0f, sum = 0.0f, v[10];
for (i = 0; i < n; i++)
{
printf ("Inform a real number: ");
scanf ("%lf",&v[i]);
m += v[i];
}
m /= n;
for (i = 0; i < n; i++)
sum += pow(v[i] - m,2);
d = sqrt (sum/(n-1));
printf ("The standard deviation of vector v is = %.2lf\n\n",d);
return 0;
}
答案 0 :(得分:1)
1.#J
是Microsoft's strange way of displaying infinity。这是一个特殊的浮点值,它除以零或数字溢出。
答案 1 :(得分:0)
m /= n;
这是平均值
d = sqrt (sum/(n-1));
但为什么这个地方使用n -1
,我认为它应该是n
现在为什么输出为-1.#j
:
这是因为您输入的浮点数不对(我的意思是您的输入不是浮点数),例如您输入ad
,我认为如果输入错误,输出是随机的。
答案 2 :(得分:0)
如果你没有在C99 / 11模式下编译你的程序,那么程序的行为是未定义,你可以得到任何东西。使用double
格式说明符打印%f
类型数据。
printf ("The standard deviation of vector v is = %.2lf\n\n",d);
^
| Wrong specifier
如果转换规范无效,则行为未定义.282)如果任何参数不是相应转换规范的正确类型,则行为未定义。
也改变
double d, m = 0.0f, sum = 0.0f, v[10];
行到
double d, m = 0.0, sum = 0.0, v[10];
m
和sum
属于double
类型,无需强制f
强制它为float
类型。