为什么 apache 数学中的尾概率在 1E-16 之后降为零?

Why does tail probability in apache math drop to zero after 1E-16?

A​​pache 数学 3.4(和 3.3),java1.8.0_25

import org.apache.commons.math3.distribution.ChiSquaredDistribution;
ChiSquaredDistribution chisq = new ChiSquaredDistribution(23)
System.out.println(1.0 - chisq.cumulativeProbability(130) //  1.1102230246251565E-16
System.out.println(1.0 - chisq.cumulativeProbability(131) //  0.0

为什么 Apache Math return 0.0 在第二次调用中?某些统计库(Excel,但不是 R)的尾部概率 return 值远小于 1E-16。

附加编辑:在下面的评论中,Robert 提供了一种使用 Apache 数学库 (regularizedGammaQ) 中没有此精度问题的另一个函数计算卡方尾部概率的直接方法。

ChiSquaredDistribution Javadoc

请注意,可以从 1.0 中减去得到小于 1.0 的最小值大约为 1e-16;你可以直接验证这一点。也许你应该打印出 chisq.cumulativeProbability(131) 本身。我不知道它是否正确,但无论如何我们不要通过从 1.0 中减去它来混淆问题。