Python 3.x 为什么scipy.stats上标准正态分布计算的反函数的反函数不相同?

Python 3.x 为什么scipy.stats上标准正态分布计算的反函数的反函数不相同?,python-3.x,scipy,Python 3.x,Scipy,我测试了以下示例 from scipy.stats import norm i=0.2 k=0.5 i==norm.cdf(norm.ppf(norm.cdf(norm.ppf(i)+k))-k) 结果显示False 如果我检查norm.cdf(norm.ppf(norm.cdf(norm.ppf(I)+k))-k的值,它是0.1999999999996 为什么会发生这种情况?有没有更好的方法来运行反函数的逆函数?因为它们是数值近似值。就像sqrt(2)*sqrt(2)不是2。这里没有浮点数,

我测试了以下示例

from scipy.stats import norm
i=0.2
k=0.5
i==norm.cdf(norm.ppf(norm.cdf(norm.ppf(i)+k))-k)
结果显示
False

如果我检查
norm.cdf(norm.ppf(norm.cdf(norm.ppf(I)+k))-k的值
,它是
0.1999999999996


为什么会发生这种情况?有没有更好的方法来运行反函数的逆函数?

因为它们是数值近似值。就像
sqrt(2)*sqrt(2)
不是2。这里没有浮点数,所以它的平方(在浮点精度中)正好是2


查看Goldberg的经典著作《ACM计算调查23:1》(1991年3月),第5-48页。

因为它们是数值近似值。就像
sqrt(2)*sqrt(2)
不是2。这里没有浮点数,所以它的平方(在浮点精度中)正好是2


查看Goldberg的经典著作,ACM Computing Surveys 23:1(1991年3月),第5-48页。

使用浮点数进行数值计算时,总是存在舍入误差。人们不会期望完全相等。当用浮点数进行数值计算时,总是存在舍入误差。人们不会期望完全平等。