74 public static double inverseF(
int n,
double u) {
81 if (u < 0.0 || u > 1.0)
82 throw new IllegalArgumentException(
"u is not in [0,1]");
86 return Double.POSITIVE_INFINITY;
88 final double SQP5 = 0.70710678118654752440;
89 final double DWARF = 0.1e-15;
90 final double ULOW = 0.02;
91 double Z, arg, v, ch, sqdf;
101 return -Math.log(arg) * 2.0;
103 }
else if ((u > ULOW) && (u < 1.0 - ULOW)) {
105 sqdf = Math.sqrt((
double) n);
108 ch = -(((3753.0 * v + 4353.0) * v - 289517.0) * v - 289717.0) * Z * SQP5 / 9185400;
110 ch = ch / sqdf + (((12.0 * v - 243.0) * v - 923.0) * v + 1472.0) / 25515.0;
112 ch = ch / sqdf + ((9.0 * v + 256.0) * v - 433.0) * Z * SQP5 / 4860;
114 ch = ch / sqdf - ((6.0 * v + 14.0) * v - 32.0) / 405.0;
115 ch = ch / sqdf + (v - 7.0) * Z * SQP5 / 9;
116 ch = ch / sqdf + 2.0 * (v - 1.0) / 3.0;
117 ch = ch / sqdf + Z / SQP5;
118 return n * (ch / sqdf + 1.0);
120 }
else if (n >= 10) {
124 temp = 1.0 / 3.0 + (-v + 3.0) / (162.0 * n) - (3.0 * v * v + 40.0 * v + 45.0) / (5832.0 * n * n)
125 + (301.0 * v * v * v - 1519.0 * v * v - 32769.0 * v - 79349.0) / (7873200.0 * n * n * n);
126 temp *= Z * Math.sqrt(2.0 / n);
128 ch = 1.0 - 2.0 / (9.0 * n) + (4.0 * v * v + 16.0 * v - 28.0) / (1215.0 * n * n)
129 + (8.0 * v * v * v + 720.0 * v * v + 3216.0 * v + 2904.0) / (229635.0 * n * n * n) + temp;
131 return n * ch * ch * ch;