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