首页 >后端开发 >C++ >为什么我的 C 概率计算会出现浮点错误?

为什么我的 C 概率计算会出现浮点错误?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-09 17:19:02981浏览

Why Does My C   Probability Calculation Incur Floating Point Errors?

通过一个简单的 C 示例了解浮点错误

在编程领域,浮点变量由于其有限的精度可能会引入错误。这种现象称为浮点错误,在执行涉及此类变量的数学运算时可能会出现。

考虑以下 C 代码片段,它尝试计算 10 个独立事件序列中恰好两次成功的概率,其中每个事件都有成功的概率“p”:

double p_2x_success = pow(1-p, (double)8) * pow(p, (double)2) * (double)choose(8, 2);

变量“pow()”和“choose()”表示数学函数。

现在,让我们检查一下这段代码是否面临潜在的浮点错误。随着上式中'k'的值增加,项'pow(1-p, k)'和'choose(k, 2)'的量级将变得非常大。这可能会导致浮点错误累积,因为这些运算是在越来越大的数字上执行的。

为了形象化这一点,让我们绘制方程“f(k)”:

f(k) = pow(1-p, k) * pow(p, k) * choose(k, 2)

其中“X”和“Y”均采用对数刻度。

对于具有 32 位浮点表示的计算机,我们期望对于“k”的所有值,“f(k)”为零。然而,由于浮点误差,“k”值越大,误差就会显着增加。从下图可以看出这一点:

[具有对数刻度的 XY 图图像]

在此图中,X 轴代表“k”,Y 轴代表误差的绝对值。随着“k”的增加,误差累积变得更加明显。

因此,由于概率计算中舍入误差的累积,所提供的代码片段确实容易受到浮点错误的影响。

以上是为什么我的 C 概率计算会出现浮点错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn