0

我决定发布这个问题,因为我不确定我为什么会得到这个结果。我在这个网站上进行了研究,其他人没有找到解决方案。对不起,如果我违反了这个网站的规则,但请记住,我是新手。这是用 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 上,因为 model 是一个非常大的数字。

4

3 回答 3

0

幂的值必须趋向于无穷大,因为它给出的结果为 0。正如 @jh314 所建议的,对所有变量尝试 long double。它将增加您的模型变量的范围,并且可能会给出任何准确的结果。

于 2013-07-11T05:14:32.050 回答
0

C double 的精度有限,因此如果将 1.0 除以一个非常大的 double,则精度误差将为 0(实际上,实际答案非常接近于零,以至于精度误差将舍入为零)。

您可以尝试使用long double更高的精度,但我认为您最好使用像GMP这样的任意精度库。

于 2013-07-11T00:12:52.600 回答
0

这里的问题不是使用科学计数法来打印数字,这让我相信实际值为零。

于 2019-05-22T11:44:44.710 回答