我决定发布这个问题,因为我不确定为什么我会得到这个结果。我在这个网站上研究过,其他人没有找到解决办法。对不起,如果我违反了这个网站规则,但记住,我是新的。 这是用C编写的函数的代码,它返回意外的结果:
double gauss (double average, double variance, int data)
{
double model,power;
power = ((((data-average)*(data-average))/(2*variance))*(1));
model = (pow(E,(int)power));
return 1.0/model;
}
我不知道我是否应该发布我的其余代码,但如果你愿意的话,我会这样做,我只想保持帖子简短。问题出现在1.0 / model上,因为模型是一个非常大的数字。
答案 0 :(得分:0)
C双精度具有有限的精度,因此如果将1.0除以非常大的双精度,则精度误差将净为0(实际上,实际答案非常接近零,精度误差将舍入为零)。
您可以尝试使用long double
来获得更高的精确度,但我认为您最好使用像GMP这样的任意精度库。
答案 1 :(得分:0)
权力值必须趋于无穷大,因为它给出结果0.正如@ jh314所建议的那样,对所有变量尝试long double。它会增加模型变量&的范围。可能会给出任何准确的结果。
答案 2 :(得分:0)
这里的问题不是使用科学符号来打印数字,这使我相信实际值为零。