Skip to main content
 首页 » 编程设计

python之Python 中的数值精度损失

2025年05月04日16arxive

我想计算一系列数字的标准误差。假设数字是 x[i],其中 i = 1 ... N。为此

我设置

averageX = 0.0 
averageXSquared = 0.0 

然后我遍历所有 i=1,...N 并为每个我计算

averageX += x[i] 
averageXSquared += x[i]**2 

然后我除以N

averageX = averageXC / N 
averageXSquared = averageXSquared/N 

然后我对差值求平方根

stdX = math.sqrt(averageXSquared - averageX * averageX) 

这里的参数肯定总是>=0。

但是,如果我设置所有 x[i] = 0.07(例如),那么我会得到一个数学域错误,因为根函数的参数是负数。似乎有一些精度损失。

参数的数量级为 10e-15。

这看起来并不令人鼓舞。我现在必须先检查自己,看看结果是否定的,然后才能生根。

还是我做错了什么

请您参考如下方法:

这不是python问题,而是一般精度有限的问题。如果将所有数字设置为相同的值,则标准误差在数学上为 0,但对于计算机而言并非如此。处理此问题的正确方法是将非常小的值设置为 <0 到 0。

x = [0.7, 0.7, 0.7] 
average = sum(x) / len(x) 
sqav = sum(y**2 for y in x) / len(x) 
stderr = math.sqrt(max(sqav - average**2, 0))