c - 1 除以非常大的数返回 0, C

标签 c double division gaussian

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

相关文章:

硬件算法以确定数字是否可以被五整除

c - 从文件读取时程序崩溃。 C

c - 每当我使用索引作为全局变量时,我都会收到错误

c - GetTickCount 函数

c# - C#中的double(C++)是什么?

bash - 如何在 bash 中用指数对两列进行排序

java - 将 float 和 double 格式化为科学记数法,具体格式如下

mysql选择具有最低值的记录

c - 这个正斜杠有什么作用

c - mingw 到 cygwin