我决定发布此问题,因为我不确定为什么会得到这个结果。我在这个网站上进行了研究,而其他人则找不到解决方案。抱歉,如果我违反此网站规则,但请记住,我是新手。
这是用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很大。

最佳答案

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

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

关于c - 1除以非常大的数字返回0,C,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17583015/

10-16 17:20