You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by ah...@apache.org on 2021/11/29 16:59:57 UTC

[commons-numbers] 01/04: NUMBERS-174: Use Boost gamma function implementation

This is an automated email from the ASF dual-hosted git repository.

aherbert pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-numbers.git

commit 0a2177fe1ce3097b5eef3e0d5869465e1ef8a621
Author: Alex Herbert <ah...@apache.org>
AuthorDate: Tue Oct 26 21:43:27 2021 +0100

    NUMBERS-174: Use Boost gamma function implementation
---
 .../gamma/GammaContinuedFractionPerformance.java   |  959 ++++
 .../jmh/gamma/GammaContinuedFractionTest.java      |   52 +
 commons-numbers-gamma/NOTICE                       |    5 +-
 commons-numbers-gamma/pom.xml                      |    5 +-
 .../apache/commons/numbers/gamma/BoostGamma.java   | 2109 ++++++++
 .../apache/commons/numbers/gamma/BoostMath.java    |   76 +
 .../apache/commons/numbers/gamma/BoostTools.java   |  242 +
 .../apache/commons/numbers/gamma/SpecialMath.java  |  218 +
 .../apache/commons/numbers/gamma/BoostErfTest.java |   70 +-
 .../commons/numbers/gamma/BoostGammaTest.java      | 1999 +++++++
 .../commons/numbers/gamma/BoostToolsTest.java      |  263 +
 .../apache/commons/numbers/gamma/TestUtils.java    |  276 +-
 .../commons/numbers/gamma/TestUtilsTest.java       |   55 +-
 .../commons/numbers/gamma/gamma1pm1_data.csv       |  163 +
 .../commons/numbers/gamma/gamma_0_20_data.csv      |  172 +
 .../commons/numbers/gamma/gamma_150_171_data.csv   |   75 +
 .../commons/numbers/gamma/gamma_20_150_data.csv    |  292 ++
 .../numbers/gamma/gamma_factorials_data.csv        |  220 +
 .../commons/numbers/gamma/gamma_m20_0_data.csv     |  172 +
 .../commons/numbers/gamma/gamma_near_0_data.csv    |   60 +
 .../commons/numbers/gamma/gamma_near_1_data.csv    |   61 +
 .../commons/numbers/gamma/gamma_near_2_data.csv    |   61 +
 .../commons/numbers/gamma/gamma_near_m10_data.csv  |   60 +
 .../commons/numbers/gamma/gamma_near_m55_data.csv  |   60 +
 .../commons/numbers/gamma/gamma_p_derivative.pl    |  152 +
 .../numbers/gamma/gamma_very_near_0_data.csv       |  124 +
 .../numbers/gamma/igamma_asymptotic_data.csv       |   83 +
 .../commons/numbers/gamma/igamma_big_data.csv      |  340 ++
 .../numbers/gamma/igamma_big_data_p_derivative.csv |  306 ++
 .../commons/numbers/gamma/igamma_extra_data.csv    |   48 +
 .../commons/numbers/gamma/igamma_int_data.csv      |  163 +
 .../numbers/gamma/igamma_int_data_p_derivative.csv |  159 +
 .../commons/numbers/gamma/igamma_med_data.csv      |  723 +++
 .../numbers/gamma/igamma_med_data_p_derivative.csv |  719 +++
 .../commons/numbers/gamma/igamma_small_data.csv    |  275 +
 .../gamma/igamma_small_data_p_derivative.csv       |  271 +
 .../apache/commons/numbers/gamma/log1pmx_data.csv  |  237 +
 .../apache/commons/numbers/gamma/powm1_data.csv    | 5478 ++++++++++++++++++++
 .../checkstyle/checkstyle-suppressions.xml         |    4 +
 src/main/resources/pmd/pmd-ruleset.xml             |   36 +-
 40 files changed, 16747 insertions(+), 96 deletions(-)

diff --git a/commons-numbers-examples/examples-jmh/src/main/java/org/apache/commons/numbers/examples/jmh/gamma/GammaContinuedFractionPerformance.java b/commons-numbers-examples/examples-jmh/src/main/java/org/apache/commons/numbers/examples/jmh/gamma/GammaContinuedFractionPerformance.java
new file mode 100755
index 0000000..f548ae6
--- /dev/null
+++ b/commons-numbers-examples/examples-jmh/src/main/java/org/apache/commons/numbers/examples/jmh/gamma/GammaContinuedFractionPerformance.java
@@ -0,0 +1,959 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// License for the Boost continued fraction adaptation:
+
+//  (C) Copyright John Maddock 2006.
+//  Use, modification and distribution are subject to the
+//  Boost Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+package org.apache.commons.numbers.examples.jmh.gamma;
+
+import java.util.Arrays;
+import java.util.concurrent.TimeUnit;
+import java.util.function.DoubleBinaryOperator;
+import java.util.function.Supplier;
+import org.apache.commons.numbers.fraction.GeneralizedContinuedFraction;
+import org.apache.commons.numbers.fraction.GeneralizedContinuedFraction.Coefficient;
+import org.openjdk.jmh.annotations.Benchmark;
+import org.openjdk.jmh.annotations.BenchmarkMode;
+import org.openjdk.jmh.annotations.Fork;
+import org.openjdk.jmh.annotations.Measurement;
+import org.openjdk.jmh.annotations.Mode;
+import org.openjdk.jmh.annotations.OutputTimeUnit;
+import org.openjdk.jmh.annotations.Param;
+import org.openjdk.jmh.annotations.Scope;
+import org.openjdk.jmh.annotations.Setup;
+import org.openjdk.jmh.annotations.State;
+import org.openjdk.jmh.annotations.Warmup;
+import org.openjdk.jmh.infra.Blackhole;
+
+/**
+ * Executes a benchmark to estimate the speed of continued fraction implementations
+ * that compute the regularized incomplete upper gamma function Q.
+ */
+@BenchmarkMode(Mode.AverageTime)
+@OutputTimeUnit(TimeUnit.NANOSECONDS)
+@Warmup(iterations = 5, time = 1, timeUnit = TimeUnit.SECONDS)
+@Measurement(iterations = 5, time = 1, timeUnit = TimeUnit.SECONDS)
+@State(Scope.Benchmark)
+@Fork(value = 1, jvmArgs = {"-server", "-Xms512M", "-Xmx512M"})
+public class GammaContinuedFractionPerformance {
+
+    /** Commons Numbers 1.0 implementation. */
+    static final String IMP_NUMBERS_1_0 = "Numbers 1.0";
+    /** Commons Numbers ContinuedFraction extended to skip the initial term. */
+    static final String IMP_NUMBERS_EXT_A = "Numbers Extended A";
+    /** Commons Numbers ContinuedFraction extended to skip the initial term.
+     * The series starts at n=1. */
+    static final String IMP_NUMBERS_EXT_A1 = "Numbers Extended A1";
+    /** Next iterator implementation. */
+    static final String IMP_ITERATOR = "Iterator";
+    /** Commons Numbers 1.1 implementation. */
+    static final String IMP_NUMBERS_1_1 = "Numbers 1.1";
+    /** Commons Numbers 1.1 implementation using direct increment of the term. */
+    static final String IMP_NUMBERS_1_1_INC = "Numbers 1.1 Inc";
+
+    /**
+     * The value for any number close to zero.
+     *
+     * <p>"The parameter small should be some non-zero number less than typical values of
+     * eps * |b_n|, e.g., 1e-50".
+     */
+    private static final double SMALL = 1e-50;
+    /**
+     * The minimum epsilon value for relative error.
+     * Equals to Math.ulp(1.0) or 2^-52.
+     */
+    private static final double EPSILON = 0x1.0p-52;
+    /** Maximum iterations. */
+    private static final int MAX_ITERATIONS = 100000;
+
+    /**
+     * Data for the regularized gamma Q function: gamma_q(a, z).
+     *
+     * <p>This data was extracted from the test data for the Boost incomplete
+     * gamma functions for cases where the function evaluates with a continued fraction.
+     *
+     * <p>The first column indicates the number of iterations for the IMP_NUMBERS_EXT_A1
+     * implementation.
+     */
+    private static final double[][] A_Z = {
+        /* 15 */ {32.5, 65.0},
+        /* 15 */ {33.0, 66.0},
+        /* 16 */ {36.5, 73.0},
+        /* 15 */ {37.0, 74.0},
+        /*  7 */ {1.6504575484077577E-12, 100.0},
+        /*  7 */ {2.0654589150126412E-12, 100.0},
+        /*  7 */ {6.93323176648164E-12, 100.0},
+        /*  7 */ {1.335143107183967E-11, 100.0},
+        /*  7 */ {1.6399770430552962E-11, 100.0},
+        /*  7 */ {5.730160790307082E-11, 100.0},
+        /*  7 */ {1.113731329382972E-10, 100.0},
+        /*  7 */ {1.4214707189097453E-10, 100.0},
+        /*  7 */ {3.800633141537446E-10, 100.0},
+        /*  7 */ {6.09162720266454E-10, 100.0},
+        /*  7 */ {1.0221641311147778E-9, 100.0},
+        /*  7 */ {2.8819229225263143E-9, 100.0},
+        /*  7 */ {4.7627768395841485E-9, 100.0},
+        /*  7 */ {8.854135202795987E-9, 100.0},
+        /*  7 */ {2.305032964500242E-8, 100.0},
+        /*  7 */ {5.9392490925347374E-8, 100.0},
+        /*  7 */ {1.1667650312574551E-7, 100.0},
+        /*  7 */ {2.3799674409019644E-7, 100.0},
+        /*  7 */ {4.684659415943315E-7, 100.0},
+        /*  7 */ {9.382700909554842E-7, 100.0},
+        /*  7 */ {1.1039858236472355E-6, 100.0},
+        /*  7 */ {3.2917764656303916E-6, 100.0},
+        /*  7 */ {7.517214726249222E-6, 100.0},
+        /*  7 */ {1.5114666894078255E-5, 100.0},
+        /*  7 */ {2.986399704241194E-5, 100.0},
+        /*  7 */ {3.387029209989123E-5, 100.0},
+        /*  7 */ {9.06601344468072E-5, 100.0},
+        /*  7 */ {2.194953412981704E-4, 100.0},
+        /*  7 */ {4.395215946715325E-4, 100.0},
+        /*  7 */ {6.333151832222939E-4, 100.0},
+        /*  7 */ {0.0011151233920827508, 100.0},
+        /*  7 */ {0.001962467795237899, 100.0},
+        /*  7 */ {0.005553754977881908, 100.0},
+        /*  7 */ {0.00869112927466631, 100.0},
+        /*  7 */ {0.029933366924524307, 100.0},
+        /*  7 */ {0.05124260485172272, 100.0},
+        /* 62 */ {0.9759566783905029, 1.9519133567810059},
+        /*  7 */ {0.9759566783905029, 100.0},
+        /* 26 */ {3.667367935180664, 4.034104824066162},
+        /* 17 */ {3.667367935180664, 7.334735870361328},
+        /*  5 */ {3.667367935180664, 366.7367858886719},
+        /* 24 */ {3.927384853363037, 4.320123195648193},
+        /* 15 */ {3.927384853363037, 7.854769706726074},
+        /*  5 */ {3.927384853363037, 392.7384948730469},
+        /* 24 */ {4.053312301635742, 4.458643436431885},
+        /* 15 */ {4.053312301635742, 8.106624603271484},
+        /*  5 */ {4.053312301635742, 405.33123779296875},
+        /* 22 */ {4.125904560089111, 4.538495063781738},
+        /* 16 */ {4.125904560089111, 8.251809120178223},
+        /*  5 */ {4.125904560089111, 412.5904541015625},
+        /* 19 */ {5.094053268432617, 5.603458404541016},
+        /* 13 */ {5.094053268432617, 10.188106536865234},
+        /*  5 */ {5.094053268432617, 509.40533447265625},
+        /* 21 */ {5.596034526824951, 6.155638217926025},
+        /* 13 */ {5.596034526824951, 11.192069053649902},
+        /*  5 */ {5.596034526824951, 559.6034545898438},
+        /* 15 */ {10.16461181640625, 11.181073188781738},
+        /* 12 */ {10.16461181640625, 20.3292236328125},
+        /* 15 */ {10.205269813537598, 11.225796699523926},
+        /* 12 */ {10.205269813537598, 20.410539627075195},
+        /* 15 */ {11.431244850158691, 12.574369430541992},
+        /* 12 */ {11.431244850158691, 22.862489700317383},
+        /* 15 */ {11.69021987915039, 12.859241485595703},
+        /* 12 */ {11.69021987915039, 23.38043975830078},
+        /* 15 */ {12.955684661865234, 14.251253128051758},
+        /* 13 */ {12.955684661865234, 25.91136932373047},
+        /* 15 */ {13.026715278625488, 14.329386711120605},
+        /* 13 */ {13.026715278625488, 26.053430557250977},
+        /* 15 */ {13.135188102722168, 14.44870662689209},
+        /* 13 */ {13.135188102722168, 26.270376205444336},
+        /* 15 */ {13.979962348937988, 15.377958297729492},
+        /* 13 */ {13.979962348937988, 27.959924697875977},
+        /* 16 */ {14.617691040039062, 16.07946014404297},
+        /* 13 */ {14.617691040039062, 29.235382080078125},
+        /* 16 */ {15.336841583251953, 16.870525360107422},
+        /* 14 */ {15.336841583251953, 30.673683166503906},
+        /* 17 */ {16.18250274658203, 17.800752639770508},
+        /* 14 */ {16.18250274658203, 32.36500549316406},
+        /* 18 */ {17.5330753326416, 19.2863826751709},
+        /* 14 */ {17.5330753326416, 35.0661506652832},
+        /* 18 */ {17.799583435058594, 19.57954216003418},
+        /* 14 */ {17.799583435058594, 35.59916687011719},
+        /* 19 */ {19.09382438659668, 21.003206253051758},
+        /* 15 */ {19.09382438659668, 38.18764877319336},
+        /* 19 */ {19.24400520324707, 21.168405532836914},
+        /* 14 */ {19.24400520324707, 38.48801040649414},
+        /* 15 */ {21.415802001953125, 42.83160400390625},
+        /* 15 */ {21.586471557617188, 43.172943115234375},
+        /* 15 */ {22.492887496948242, 44.985774993896484},
+        /* 15 */ {28.053834915161133, 56.107669830322266},
+        /* 15 */ {28.210573196411133, 56.421146392822266},
+        /* 15 */ {30.054428100585938, 60.108856201171875},
+        /* 16 */ {30.540353775024414, 61.08070755004883},
+        /* 15 */ {31.162620544433594, 62.32524108886719},
+        /* 15 */ {31.996768951416016, 63.99353790283203},
+        /* 15 */ {32.05139923095703, 64.10279846191406},
+        /* 15 */ {36.448753356933594, 72.89750671386719},
+        /* 16 */ {38.465065002441406, 76.93013000488281},
+        /* 15 */ {39.526588439941406, 79.05317687988281},
+        /* 15 */ {40.17448425292969, 80.34896850585938},
+        /* 15 */ {41.16875076293945, 82.3375015258789},
+        /* 15 */ {42.465248107910156, 84.93049621582031},
+        /* 15 */ {42.49772262573242, 84.99544525146484},
+        /* 15 */ {44.15506362915039, 88.31012725830078},
+        /* 15 */ {44.8358268737793, 89.6716537475586},
+        /* 15 */ {46.06991958618164, 92.13983917236328},
+        /* 15 */ {47.738487243652344, 95.47697448730469},
+        /* 14 */ {48.79487609863281, 97.58975219726562},
+        /* 14 */ {49.01310729980469, 98.02621459960938},
+        /* 15 */ {49.2315559387207, 98.4631118774414},
+        /* 15 */ {49.3136100769043, 98.6272201538086},
+        /* 15 */ {50.61444091796875, 101.2288818359375},
+        /* 14 */ {54.91470718383789, 109.82941436767578},
+        /* 15 */ {54.948448181152344, 109.89689636230469},
+        /* 14 */ {63.41974639892578, 126.83949279785156},
+        /* 14 */ {64.15645599365234, 128.3129119873047},
+        /* 15 */ {64.80814361572266, 129.6162872314453},
+        /* 15 */ {65.72004699707031, 131.44009399414062},
+        /* 14 */ {65.74620056152344, 131.49240112304688},
+        /* 14 */ {66.52874755859375, 133.0574951171875},
+        /* 14 */ {68.03414916992188, 136.06829833984375},
+        /* 14 */ {68.29527282714844, 136.59054565429688},
+        /* 14 */ {69.63545227050781, 139.27090454101562},
+        /* 14 */ {70.7515869140625, 141.503173828125},
+        /* 14 */ {71.08180236816406, 142.16360473632812},
+        /* 14 */ {72.72097778320312, 145.44195556640625},
+        /* 14 */ {74.19440460205078, 148.38880920410156},
+        /* 14 */ {74.44168090820312, 148.88336181640625},
+        /* 14 */ {75.59132385253906, 151.18264770507812},
+        /* 14 */ {75.8951416015625, 151.790283203125},
+        /* 14 */ {76.49312591552734, 152.9862518310547},
+        /* 14 */ {76.6689224243164, 153.3378448486328},
+        /* 14 */ {79.32462310791016, 158.6492462158203},
+        /* 14 */ {79.5005111694336, 159.0010223388672},
+        /* 13 */ {79.62239074707031, 159.24478149414062},
+        /* 14 */ {79.829345703125, 159.65869140625},
+        /* 13 */ {79.8938980102539, 159.7877960205078},
+        /* 14 */ {79.91152954101562, 159.82305908203125},
+        /* 13 */ {80.1279067993164, 160.2558135986328},
+        /* 14 */ {80.84933471679688, 161.69866943359375},
+        /* 13 */ {81.56500244140625, 163.1300048828125},
+        /* 13 */ {82.27938079833984, 164.5587615966797},
+        /* 13 */ {82.43405151367188, 164.86810302734375},
+        /* 13 */ {83.5833511352539, 167.1667022705078},
+        /* 14 */ {84.98836517333984, 169.9767303466797},
+        /* 13 */ {87.30667114257812, 174.61334228515625},
+        /* 13 */ {87.90385437011719, 175.80770874023438},
+        /* 13 */ {90.62629699707031, 181.25259399414062},
+        /* 13 */ {91.38089752197266, 182.7617950439453},
+        /* 13 */ {91.61568450927734, 183.2313690185547},
+        /* 13 */ {92.12703704833984, 184.2540740966797},
+        /* 14 */ {93.43232727050781, 186.86465454101562},
+        /* 13 */ {95.0470962524414, 190.0941925048828},
+        /* 13 */ {95.73811340332031, 191.47622680664062},
+        /* 13 */ {95.77192687988281, 191.54385375976562},
+        /* 13 */ {95.96949768066406, 191.93899536132812},
+        /* 13 */ {96.50640869140625, 193.0128173828125},
+        /* 13 */ {96.78564453125, 193.5712890625},
+        /* 13 */ {96.90234375, 193.8046875},
+        /* 13 */ {97.07398223876953, 194.14796447753906},
+        /* 13 */ {98.12041473388672, 196.24082946777344},
+        /* 13 */ {99.29168701171875, 198.5833740234375},
+        /* 13 */ {99.4098129272461, 198.8196258544922},
+        /* 13 */ {99.64790344238281, 199.29580688476562},
+        /*  7 */ {1.7306554127571872E-6, 100.0},
+        /*  7 */ {2.1657506295014173E-6, 100.0},
+        /*  7 */ {7.2700195232755505E-6, 100.0},
+        /*  7 */ {1.4000004739500582E-5, 100.0},
+        /*  7 */ {1.71964547917014E-5, 100.0},
+        /*  7 */ {6.008507625665516E-5, 100.0},
+        /*  7 */ {1.1678319424390793E-4, 100.0},
+        /*  7 */ {1.490520080551505E-4, 100.0},
+        /*  7 */ {3.98525211494416E-4, 100.0},
+        /*  7 */ {6.387534085661173E-4, 100.0},
+        /*  7 */ {0.0010718167759478092, 100.0},
+        /*  7 */ {0.0030219152104109526, 100.0},
+        /*  7 */ {0.004994133487343788, 100.0},
+        /*  7 */ {0.009284233674407005, 100.0},
+        /*  7 */ {0.02417002245783806, 100.0},
+        /*  7 */ {0.06227754056453705, 100.0},
+        /*  7 */ {0.12234418094158173, 100.0},
+        /*  7 */ {0.24955767393112183, 100.0},
+        /*  7 */ {0.4912221431732178, 100.0},
+        /* 53 */ {0.9838474988937378, 1.9676949977874756},
+        /*  7 */ {0.9838474988937378, 100.0},
+        /* 48 */ {1.1576130390167236, 2.3152260780334473},
+        /*  6 */ {1.1576130390167236, 115.76130676269531},
+        /* 27 */ {3.4516777992248535, 3.7968456745147705},
+        /* 18 */ {3.4516777992248535, 6.903355598449707},
+        /*  5 */ {3.4516777992248535, 345.16778564453125},
+        /* 15 */ {7.882370948791504, 8.670608520507812},
+        /* 12 */ {7.882370948791504, 15.764741897583008},
+        /* 16 */ {15.848876953125, 17.433765411376953},
+        /* 14 */ {15.848876953125, 31.69775390625},
+        /* 15 */ {31.31467056274414, 62.62934112548828},
+        /* 15 */ {35.51557540893555, 71.0311508178711},
+        /* 13 */ {95.06404113769531, 190.12808227539062},
+        /* 11 */ {230.1575469970703, 460.3150939941406},
+        /* 10 */ {460.8717956542969, 921.7435913085938},
+        /*  5 */ {0.75, 708.0},
+        /*  5 */ {0.75, 708.5},
+        /*  5 */ {0.75, 707.5},
+        /* 24 */ {32.5, 34.5},
+        /* 25 */ {33.0, 35.0},
+        /* 26 */ {36.5, 38.5},
+        /* 26 */ {37.0, 39.0},
+        /* 20 */ {21.415802001953125, 23.415802001953125},
+        /* 20 */ {21.586471557617188, 23.586471557617188},
+        /* 20 */ {22.492887496948242, 24.492887496948242},
+        /* 23 */ {28.053834915161133, 30.053834915161133},
+        /* 23 */ {28.210573196411133, 30.210573196411133},
+        /* 24 */ {30.054428100585938, 32.05442810058594},
+        /* 24 */ {30.540353775024414, 32.54035186767578},
+        /* 24 */ {31.162620544433594, 33.162620544433594},
+        /* 24 */ {31.996768951416016, 33.996768951416016},
+        /* 24 */ {32.05139923095703, 34.05139923095703},
+        /* 26 */ {36.448753356933594, 38.448753356933594},
+        /* 26 */ {38.465065002441406, 40.465065002441406},
+        /* 27 */ {39.526588439941406, 41.526588439941406},
+        /* 27 */ {40.17448425292969, 42.17448425292969},
+        /* 27 */ {41.16875076293945, 43.16875076293945},
+        /* 27 */ {42.465248107910156, 44.465248107910156},
+        /* 27 */ {42.49772262573242, 44.49772262573242},
+        /* 28 */ {44.15506362915039, 46.15506362915039},
+        /* 28 */ {44.8358268737793, 46.8358268737793},
+        /* 28 */ {46.06991958618164, 48.06991958618164},
+        /* 30 */ {47.738487243652344, 49.738487243652344},
+        /* 30 */ {48.79487609863281, 50.79487609863281},
+        /* 29 */ {49.01310729980469, 51.01310729980469},
+        /* 30 */ {49.2315559387207, 51.2315559387207},
+        /* 29 */ {49.3136100769043, 51.3136100769043},
+        /* 30 */ {50.61444091796875, 52.61444091796875},
+        /* 31 */ {54.91470718383789, 56.91470718383789},
+        /* 32 */ {54.948448181152344, 56.948448181152344},
+        /* 33 */ {63.41974639892578, 65.41974639892578},
+        /* 33 */ {64.15645599365234, 66.15645599365234},
+        /* 33 */ {64.80814361572266, 66.80814361572266},
+        /* 33 */ {65.72004699707031, 67.72004699707031},
+        /* 33 */ {65.74620056152344, 67.74620056152344},
+        /* 33 */ {66.52874755859375, 68.52874755859375},
+        /* 33 */ {68.03414916992188, 70.03414916992188},
+        /* 34 */ {68.29527282714844, 70.29527282714844},
+        /* 35 */ {69.63545227050781, 71.63545227050781},
+        /* 34 */ {70.7515869140625, 72.7515869140625},
+        /* 34 */ {71.08180236816406, 73.08180236816406},
+        /* 35 */ {72.72097778320312, 74.72097778320312},
+        /* 35 */ {74.19440460205078, 76.19440460205078},
+        /* 35 */ {74.44168090820312, 76.44168090820312},
+        /* 35 */ {75.59132385253906, 77.59132385253906},
+        /* 35 */ {75.8951416015625, 77.8951416015625},
+        /* 36 */ {76.49312591552734, 78.49312591552734},
+        /* 36 */ {76.6689224243164, 78.6689224243164},
+        /* 35 */ {79.32462310791016, 81.32462310791016},
+        /* 35 */ {79.5005111694336, 81.5005111694336},
+        /* 35 */ {79.62239074707031, 81.62239074707031},
+        /* 35 */ {79.829345703125, 81.829345703125},
+        /* 35 */ {79.8938980102539, 81.8938980102539},
+        /* 35 */ {79.91152954101562, 81.91152954101562},
+        /* 37 */ {80.1279067993164, 82.1279067993164},
+        /* 36 */ {80.84933471679688, 82.84933471679688},
+        /* 36 */ {81.56500244140625, 83.56500244140625},
+        /* 36 */ {82.27938079833984, 84.27938079833984},
+        /* 37 */ {82.43405151367188, 84.43405151367188},
+        /* 37 */ {83.5833511352539, 85.5833511352539},
+        /* 36 */ {84.98836517333984, 86.98836517333984},
+        /* 36 */ {87.30667114257812, 89.30667114257812},
+        /* 37 */ {87.90385437011719, 89.90385437011719},
+        /* 37 */ {90.62629699707031, 92.62629699707031},
+        /* 39 */ {91.38089752197266, 93.38089752197266},
+        /* 38 */ {91.61568450927734, 93.61568450927734},
+        /* 38 */ {92.12703704833984, 94.12703704833984},
+        /* 39 */ {93.43232727050781, 95.43232727050781},
+        /* 38 */ {95.0470962524414, 97.0470962524414},
+        /* 39 */ {95.73811340332031, 97.73811340332031},
+        /* 39 */ {95.77192687988281, 97.77192687988281},
+        /* 39 */ {95.96949768066406, 97.96949768066406},
+        /* 39 */ {96.50640869140625, 98.50640869140625},
+        /* 38 */ {96.78564453125, 98.78564453125},
+        /* 39 */ {96.90234375, 98.90234375},
+        /* 39 */ {97.07398223876953, 99.07398223876953},
+        /* 39 */ {98.12041473388672, 100.12041473388672},
+        /* 40 */ {99.29168701171875, 101.29168701171875},
+        /* 40 */ {99.4098129272461, 101.4098129272461},
+        /* 39 */ {99.64790344238281, 101.64790344238281},
+        /*  5 */ {7.882370948791504, 788.2371215820312},
+        /* 24 */ {31.31467056274414, 33.31467056274414},
+        /* 25 */ {35.51557540893555, 37.51557540893555},
+        /* 39 */ {95.06404113769531, 97.06404113769531},
+        /*  4 */ {230.1575469970703, 23015.75390625},
+        /*  4 */ {460.8717956542969, 46087.1796875},
+        /*  4 */ {664.0791015625, 66407.90625},
+        /*  4 */ {1169.2916259765625, 116929.1640625},
+        /*  4 */ {2057.796630859375, 205779.65625},
+        /*  4 */ {5823.5341796875, 582353.4375},
+        /*  4 */ {9113.3095703125, 911330.9375},
+        /*  4 */ {31387.41015625, 3138741.0},
+        /*  3 */ {53731.765625, 5373176.5},
+        /*  3 */ {117454.09375, 1.1745409E7},
+        /*  3 */ {246209.65625, 2.4620966E7},
+        /*  3 */ {513669.1875, 5.136692E7},
+        /*  3 */ {788352.3125, 7.8835232E7},
+        /*  3 */ {1736170.0, 1.73616992E8},
+        /*  7 */ {170.0, 1000.0},
+        /*  6 */ {185.0, 1500.0},
+    };
+
+    /**
+     * Contains the function to evaluate the continued fraction.
+     */
+    @State(Scope.Benchmark)
+    public static class BaseData {
+        /** Error message when the fraction diverged to non-finite. */
+        private static final String MSG_DIVERGED = "Continued fraction diverged to %s for value %s";
+        /** Error message when the maximum iterations was exceeded. */
+        private static final String MSG_MAX_ITERATIONS = "Maximum iterations exceeded: ";
+
+        /** The implementation of the function. */
+        @Param({IMP_NUMBERS_1_0, IMP_NUMBERS_EXT_A, IMP_NUMBERS_EXT_A1,
+                IMP_ITERATOR, IMP_NUMBERS_1_1, IMP_NUMBERS_1_1_INC})
+        private String implementation;
+
+        /** The function. */
+        private DoubleBinaryOperator function;
+
+        /**
+         * Gets the function.
+         *
+         * @return the function
+         */
+        public DoubleBinaryOperator getFunction() {
+            return function;
+        }
+
+        /**
+         * Create the numbers and the function.
+         */
+        @Setup
+        public void setup() {
+            function = createFunction(implementation);
+        }
+
+        /**
+         * Creates the function to evaluate the continued fraction for
+         * regularized gamma Q.
+         *
+         * @param implementation Function implementation
+         * @return the function
+         */
+        static DoubleBinaryOperator createFunction(String implementation) {
+            if (IMP_NUMBERS_1_0.equals(implementation)) {
+                // Method from Commons Numbers 1.0 : RegularizedGamma.Q
+                return (a, z) -> {
+                    final ContinuedFraction cf = new ContinuedFraction() {
+                        /** {@inheritDoc} */
+                        @Override
+                        protected double getA(int n, double x) {
+                            return n * (a - n);
+                        }
+
+                        /** {@inheritDoc} */
+                        @Override
+                        protected double getB(int n, double x) {
+                            return ((2 * n) + 1) - a + x;
+                        }
+                    };
+
+                    return 1 / cf.evaluate(z, EPSILON, MAX_ITERATIONS);
+                };
+            } else if (IMP_NUMBERS_EXT_A.equals(implementation)) {
+                // Modified implementation that uses term a0.
+                // The series must be advanced 1 term (hence the 'n++' code).
+                return (a, z) -> {
+                    final ContinuedFractionA cf = new ContinuedFractionA() {
+                        @Override
+                        protected double getA(int n, double x) {
+                            n++;
+                            return n * (a - n);
+                        }
+
+                        @Override
+                        protected double getB(int n, double x) {
+                            n++;
+                            return ((2 * n) + 1) - a + x;
+                        }
+                    };
+
+                    return 1 / (z - a + 1 + cf.evaluate(z, EPSILON, MAX_ITERATIONS));
+                };
+            } else if (IMP_NUMBERS_EXT_A1.equals(implementation)) {
+                // Modified implementation that starts from (a1,b1) and uses term a1.
+                return (a, z) -> {
+                    final ContinuedFractionA1 cf = new ContinuedFractionA1() {
+                        @Override
+                        protected double getA(int n, double x) {
+                            return n * (a - n);
+                        }
+
+                        @Override
+                        protected double getB(int n, double x) {
+                            return ((2 * n) + 1) - a + x;
+                        }
+                    };
+
+                    return 1 / (z - a + 1 + cf.evaluate(z, EPSILON, MAX_ITERATIONS));
+                };
+            } else if (IMP_ITERATOR.equals(implementation)) {
+                // Implementation that sets terms a and b directly
+                return (a, z) -> {
+                    final ContinuedFractionIterator cf = new ContinuedFractionIterator() {
+                        /** Factor. */
+                        private double x = z - a + 1;
+                        /** Iteration. */
+                        private int k;
+
+                        @Override
+                        void next() {
+                            ++k;
+                            x += 2;
+                            setCoefficients(k * (a - k), x);
+                        }
+                    };
+
+                    return 1 / (z - a + 1 + cf.evaluate(EPSILON, MAX_ITERATIONS));
+                };
+            } else if (IMP_NUMBERS_1_1.equals(implementation)) {
+                // Numbers 1.1 implementation using a generator of coefficients
+                // from (a1,b1) and supplies b0 as an argument
+                return (a, z) -> {
+                    final double zma1 = z - a + 1;
+
+                    final Supplier<Coefficient> gen = new Supplier<>() {
+                        /** Iteration. */
+                        private int k;
+
+                        @Override
+                        public Coefficient get() {
+                            ++k;
+                            return Coefficient.of(k * (a - k), zma1 + 2.0 * k);
+                        }
+                    };
+
+                    return 1 / GeneralizedContinuedFraction.value(zma1, gen, EPSILON, MAX_ITERATIONS);
+                };
+            } else if (IMP_NUMBERS_1_1_INC.equals(implementation)) {
+                // Numbers 1.1 implementation using a generator of coefficients
+                // from (a1,b1) and supplies b0 as an argument
+                return (a, z) -> {
+
+                    final Supplier<Coefficient> gen = new Supplier<>() {
+                        /** Iteration. */
+                        private int k;
+                        /** b term. */
+                        private double b = z - a + 1;
+
+                        @Override
+                        public Coefficient get() {
+                            ++k;
+                            b += 2;
+                            return Coefficient.of(k * (a - k), b);
+                        }
+                    };
+
+                    return 1 / GeneralizedContinuedFraction.value(z - a + 1, gen, EPSILON, MAX_ITERATIONS);
+                };
+            } else {
+                throw new IllegalStateException("unknown: " + implementation);
+            }
+        }
+
+        // Note: The following implementations have the same error checks as the
+        // evaluation method in Numbers 1.1
+
+        /**
+         * Provides a generic means to evaluate
+         * <a href="https://mathworld.wolfram.com/ContinuedFraction.html">continued fractions</a>.
+         *
+         * <p>This is a copy of the implementation from Commons Numbers 1.0. Redundant methods
+         * have been removed. Error checks have been updated to match
+         * {@link GeneralizedContinuedFraction}.
+         *
+         * <p>The continued fraction uses the following form for the numerator ({@code a}) and
+         * denominator ({@code b}) coefficients:
+         * <pre>
+         *              a1
+         * b0 + ------------------
+         *      b1 +      a2
+         *           -------------
+         *           b2 +    a3
+         *                --------
+         *                b3 + ...
+         * </pre>
+         *
+         * <p>Subclasses must provide the {@link #getA(int,double) a} and {@link #getB(int,double) b}
+         * coefficients to evaluate the continued fraction.
+         */
+        abstract static class ContinuedFraction {
+            /**
+             * Defines the <a href="https://mathworld.wolfram.com/ContinuedFraction.html">
+             * {@code n}-th "a" coefficient</a> of the continued fraction.
+             *
+             * @param n Index of the coefficient to retrieve.
+             * @param x Evaluation point.
+             * @return the coefficient <code>a<sub>n</sub></code>.
+             */
+            protected abstract double getA(int n, double x);
+
+            /**
+             * Defines the <a href="https://mathworld.wolfram.com/ContinuedFraction.html">
+             * {@code n}-th "b" coefficient</a> of the continued fraction.
+             *
+             * @param n Index of the coefficient to retrieve.
+             * @param x Evaluation point.
+             * @return the coefficient <code>b<sub>n</sub></code>.
+             */
+            protected abstract double getB(int n, double x);
+
+            /**
+             * Evaluates the continued fraction.
+             * <p>
+             * The implementation of this method is based on the modified Lentz algorithm as described
+             * on page 508 in:
+             * </p>
+             *
+             * <ul>
+             *   <li>
+             *   I. J. Thompson,  A. R. Barnett (1986).
+             *   "Coulomb and Bessel Functions of Complex Arguments and Order."
+             *   Journal of Computational Physics 64, 490-509.
+             *   <a target="_blank" href="https://www.fresco.org.uk/papers/Thompson-JCP64p490.pdf">
+             *   https://www.fresco.org.uk/papers/Thompson-JCP64p490.pdf</a>
+             *   </li>
+             * </ul>
+             *
+             * @param x Point at which to evaluate the continued fraction.
+             * @param epsilon Maximum relative error allowed.
+             * @param maxIterations Maximum number of iterations.
+             * @return the value of the continued fraction evaluated at {@code x}.
+             * @throws ArithmeticException if the algorithm fails to converge.
+             * @throws ArithmeticException if the maximal number of iterations is reached
+             * before the expected convergence is achieved.
+             */
+            public double evaluate(double x, double epsilon, int maxIterations) {
+                // Relative error epsilon must not be zero.
+                // Do not use Math.max as NaN would be returned for a NaN epsilon.
+                final double eps =  epsilon > EPSILON ? epsilon : EPSILON;
+
+                double hPrev = updateIfCloseToZero(getB(0, x));
+
+                int n = 1;
+                double dPrev = 0.0;
+                double cPrev = hPrev;
+                double hN;
+
+                while (n <= maxIterations) {
+                    final double a = getA(n, x);
+                    final double b = getB(n, x);
+
+                    double dN = updateIfCloseToZero(b + a * dPrev);
+                    final double cN = updateIfCloseToZero(b + a / cPrev);
+
+                    dN = 1 / dN;
+                    final double deltaN = cN * dN;
+                    hN = hPrev * deltaN;
+
+                    if (!Double.isFinite(hN)) {
+                        throw new ArithmeticException(String.format(
+                                MSG_DIVERGED, hN, x));
+                    }
+
+                    // Additional check added in Numbers 1.1
+                    if (deltaN == 0) {
+                        throw new ArithmeticException();
+                    }
+
+                    if (Math.abs(deltaN - 1) < eps) {
+                        return hN;
+                    }
+
+                    dPrev = dN;
+                    cPrev = cN;
+                    hPrev = hN;
+                    ++n;
+                }
+
+                throw new ArithmeticException(MSG_MAX_ITERATIONS + maxIterations);
+            }
+        }
+
+        /**
+         * Extend the ContinuedFraction class to add a method that uses
+         * the leading term a0.
+         * Evaluates:
+         * <pre>
+         *            a0
+         *      ---------------
+         *      b0 +     a1
+         *           ----------
+         *           b1 +   a2
+         *                -----
+         *                b2 + ...
+         * </pre>
+         */
+        abstract static class ContinuedFractionA extends ContinuedFraction {
+            @Override
+            public double evaluate(double x, double epsilon, int maxIterations) {
+                // Relative error epsilon must not be zero.
+                // Do not use Math.max as NaN would be returned for a NaN epsilon.
+                final double eps =  epsilon > EPSILON ? epsilon : EPSILON;
+
+                final double a0 = getA(0, x);
+
+                double hPrev = updateIfCloseToZero(getB(0, x));
+
+                int n = 1;
+                double dPrev = 0.0;
+                double cPrev = hPrev;
+                double hN;
+
+                while (n <= maxIterations) {
+                    final double a = getA(n, x);
+                    final double b = getB(n, x);
+
+                    double dN = updateIfCloseToZero(b + a * dPrev);
+                    final double cN = updateIfCloseToZero(b + a / cPrev);
+
+                    dN = 1 / dN;
+                    final double deltaN = cN * dN;
+                    hN = hPrev * deltaN;
+
+                    if (!Double.isFinite(hN)) {
+                        throw new ArithmeticException(String.format(
+                            MSG_DIVERGED, hN, x));
+                    }
+
+                    if (deltaN == 0) {
+                        throw new ArithmeticException();
+                    }
+
+                    if (Math.abs(deltaN - 1) < eps) {
+                        // Divide the numerator a0 by the converged continued fraction
+                        return a0 / hN;
+                    }
+
+                    dPrev = dN;
+                    cPrev = cN;
+                    hPrev = hN;
+                    ++n;
+                }
+
+                throw new ArithmeticException(MSG_MAX_ITERATIONS + maxIterations);
+            }
+        }
+
+        /**
+         * Extend the ContinuedFraction class to add a method that does not use
+         * the leading term b0. The first terms requested use n=1.
+         * Evaluates:
+         * <pre>
+         *            a1
+         *      ---------------
+         *      b1 +     a2
+         *           ----------
+         *           b2 +   a3
+         *                -----
+         *                b3 + ...
+         * </pre>
+         */
+        abstract static class ContinuedFractionA1 extends ContinuedFraction {
+            @Override
+            public double evaluate(double x, double epsilon, int maxIterations) {
+                // Relative error epsilon must not be zero.
+                // Do not use Math.max as NaN would be returned for a NaN epsilon.
+                final double eps =  epsilon > EPSILON ? epsilon : EPSILON;
+
+                final double a0 = getA(1, x);
+
+                double hPrev = updateIfCloseToZero(getB(1, x));
+
+                int n = 2;
+                double dPrev = 0.0;
+                double cPrev = hPrev;
+                double hN;
+
+                while (n <= maxIterations) {
+                    final double a = getA(n, x);
+                    final double b = getB(n, x);
+
+                    double dN = updateIfCloseToZero(b + a * dPrev);
+                    final double cN = updateIfCloseToZero(b + a / cPrev);
+
+                    dN = 1 / dN;
+                    final double deltaN = cN * dN;
+                    hN = hPrev * deltaN;
+
+                    if (!Double.isFinite(hN)) {
+                        throw new ArithmeticException(String.format(
+                            MSG_DIVERGED, hN, x));
+                    }
+
+                    if (deltaN == 0) {
+                        throw new ArithmeticException();
+                    }
+
+                    if (Math.abs(deltaN - 1) < eps) {
+                        // Divide the numerator a0 by the converged continued fraction
+                        return a0 / hN;
+                    }
+
+                    dPrev = dN;
+                    cPrev = cN;
+                    hPrev = hN;
+                    ++n;
+                }
+
+                throw new ArithmeticException(MSG_MAX_ITERATIONS + maxIterations);
+            }
+        }
+
+        /**
+         * A continued fraction class.
+         * Evaluates:
+         * <pre>
+         *            a1
+         *      ---------------
+         *      b1 +     a2
+         *           ----------
+         *           b2 +   a3
+         *                -----
+         *                b3 + ...
+         * </pre>
+         */
+        abstract static class ContinuedFractionIterator {
+            /** Current a coefficient. */
+            private double a = 1;
+            /** Current b coefficient. */
+            private double b = 1;
+
+            /**
+             * @param ca the next a coefficient
+             * @param cb the next b coefficient
+             */
+            protected void setCoefficients(double ca, double cb) {
+                this.a = ca;
+                this.b = cb;
+            }
+
+            /**
+             * Set the next coefficients using {@link #setCoefficients(double, double)}.
+             */
+            abstract void next();
+
+            /**
+             * Evaluate the fraction.
+             *
+             * @param epsilon the epsilon
+             * @param maxIterations the max iterations
+             * @return the value
+             */
+            public double evaluate(double epsilon, int maxIterations) {
+                // Relative error epsilon must not be zero.
+                // Do not use Math.max as NaN would be returned for a NaN epsilon.
+                final double eps = epsilon > EPSILON ? epsilon : EPSILON;
+
+                next();
+                final double a0 = a;
+
+                double hPrev = updateIfCloseToZero(b);
+
+                int n = 2;
+                double dPrev = 0.0;
+                double cPrev = hPrev;
+                double hN;
+
+                while (n <= maxIterations) {
+                    next();
+
+                    double dN = updateIfCloseToZero(b + a * dPrev);
+                    final double cN = updateIfCloseToZero(b + a / cPrev);
+
+                    dN = 1 / dN;
+                    final double deltaN = cN * dN;
+                    hN = hPrev * deltaN;
+
+                    if (!Double.isFinite(hN)) {
+                        throw new ArithmeticException("Continued fraction diverged to: " + hN);
+                    }
+
+                    if (deltaN == 0) {
+                        throw new ArithmeticException();
+                    }
+
+                    // Note:
+                    // Changing this from '< eps' to '<= eps' has a small but
+                    // noticeable effect on the performance.
+                    if (Math.abs(deltaN - 1) <= eps) {
+                        // Divide the numerator a0 by the converged continued fraction
+                        return a0 / hN;
+                    }
+
+                    dPrev = dN;
+                    cPrev = cN;
+                    hPrev = hN;
+                    ++n;
+                }
+
+                throw new ArithmeticException(MSG_MAX_ITERATIONS + maxIterations);
+            }
+        }
+
+        /**
+         * Returns the value, or if close to zero returns a small epsilon.
+         *
+         * <p>This method is used in Thompson & Barnett to monitor both the numerator and denominator
+         * ratios for approaches to zero.
+         *
+         * @param value the value
+         * @return the value (or small epsilon)
+         */
+        private static double updateIfCloseToZero(double value) {
+            return Math.abs(value) < SMALL ? Math.copySign(SMALL, value) : value;
+        }
+    }
+
+    /**
+     * Gets the pairs of (a,z) data used for benchmarking.
+     *
+     * @return the data
+     */
+    static double[][] getData() {
+        return Arrays.stream(A_Z).map(d -> d.clone()).toArray(double[][]::new);
+    }
+
+    /**
+     * Apply the function to all the numbers.
+     *
+     * @param fun Function.
+     * @param bh Data sink.
+     */
+    private static void apply(DoubleBinaryOperator fun, Blackhole bh) {
+        for (int i = 0; i < A_Z.length; i++) {
+            final double[] az = A_Z[i];
+            bh.consume(fun.applyAsDouble(az[0], az[1]));
+        }
+    }
+
+    // Benchmark methods.
+    // Benchmarks use function references to perform different operations on the numbers.
+
+    /**
+     * Benchmark the error function.
+     *
+     * @param data Test data.
+     * @param bh Data sink.
+     */
+    @Benchmark
+    public void evaluate(BaseData data, Blackhole bh) {
+        apply(data.getFunction(), bh);
+    }
+}
diff --git a/commons-numbers-examples/examples-jmh/src/test/java/org/apache/commons/numbers/examples/jmh/gamma/GammaContinuedFractionTest.java b/commons-numbers-examples/examples-jmh/src/test/java/org/apache/commons/numbers/examples/jmh/gamma/GammaContinuedFractionTest.java
new file mode 100644
index 0000000..812be23
--- /dev/null
+++ b/commons-numbers-examples/examples-jmh/src/test/java/org/apache/commons/numbers/examples/jmh/gamma/GammaContinuedFractionTest.java
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.numbers.examples.jmh.gamma;
+
+import java.util.function.DoubleBinaryOperator;
+import org.apache.commons.numbers.examples.jmh.gamma.GammaContinuedFractionPerformance.BaseData;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.ValueSource;
+
+/**
+ * Tests the continued fraction implementations in {@link GammaContinuedFractionPerformance}.
+ */
+class GammaContinuedFractionTest {
+
+    @ParameterizedTest
+    @ValueSource(strings = {
+        GammaContinuedFractionPerformance.IMP_NUMBERS_1_0,
+        GammaContinuedFractionPerformance.IMP_NUMBERS_EXT_A,
+        GammaContinuedFractionPerformance.IMP_NUMBERS_EXT_A1,
+        GammaContinuedFractionPerformance.IMP_ITERATOR,
+        GammaContinuedFractionPerformance.IMP_NUMBERS_1_1_INC,
+    })
+    void testContinuedFraction(String implementation) {
+        // In the absence of expected results test that all implementations
+        // return the same value. Use the Numbers 1.1 version as the reference.
+        final DoubleBinaryOperator f1 = BaseData.createFunction(GammaContinuedFractionPerformance.IMP_NUMBERS_1_1);
+        final DoubleBinaryOperator f2 = BaseData.createFunction(implementation);
+        for (final double[] pair : GammaContinuedFractionPerformance.getData()) {
+            final double a = pair[0];
+            final double z = pair[1];
+            final double expected = f1.applyAsDouble(a, z);
+            final double actual = f2.applyAsDouble(a, z);
+            Assertions.assertEquals(expected, actual, Math.abs(1e-14 * expected),
+                () -> String.format("(%s,%s)", a, z));
+        }
+    }
+}
diff --git a/commons-numbers-gamma/NOTICE b/commons-numbers-gamma/NOTICE
index 5bbc4dd..174ace6 100644
--- a/commons-numbers-gamma/NOTICE
+++ b/commons-numbers-gamma/NOTICE
@@ -7,4 +7,7 @@ The Apache Software Foundation (http://www.apache.org/).
 The org.apache.commons.numbers.gamma package contains derivative
 work originating from the "Boost C++ Libraries" <boost/math/special_functions>.
 https://www.boost.org/
-Copyright 2006-7 John Maddock 2006-7.
+Copyright 2006-7, 2013-14 John Maddock.
+Copyright 2007, 2013-14 Paul A. Bristow.
+Copyright 2013-14 Nikhar Agrawal.
+Copyright 2013-14, 2020 Christopher Kormanyos.
diff --git a/commons-numbers-gamma/pom.xml b/commons-numbers-gamma/pom.xml
index 297c7e6..872901b 100644
--- a/commons-numbers-gamma/pom.xml
+++ b/commons-numbers-gamma/pom.xml
@@ -44,7 +44,10 @@
     <dependency>
       <groupId>org.apache.commons</groupId>
       <artifactId>commons-numbers-fraction</artifactId>
-      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.commons</groupId>
+      <artifactId>commons-numbers-core</artifactId>
     </dependency>
   </dependencies>
 
diff --git a/commons-numbers-gamma/src/main/java/org/apache/commons/numbers/gamma/BoostGamma.java b/commons-numbers-gamma/src/main/java/org/apache/commons/numbers/gamma/BoostGamma.java
new file mode 100644
index 0000000..76feed6
--- /dev/null
+++ b/commons-numbers-gamma/src/main/java/org/apache/commons/numbers/gamma/BoostGamma.java
@@ -0,0 +1,2109 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+//  Copyright John Maddock 2006-7, 2013-20.
+//  Copyright Paul A. Bristow 2007, 2013-14.
+//  Copyright Nikhar Agrawal 2013-14
+//  Copyright Christopher Kormanyos 2013-14, 2020
+//  Use, modification and distribution are subject to the
+//  Boost Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+package org.apache.commons.numbers.gamma;
+
+import java.util.function.DoubleSupplier;
+import java.util.function.Supplier;
+import org.apache.commons.numbers.core.Sum;
+import org.apache.commons.numbers.fraction.GeneralizedContinuedFraction;
+import org.apache.commons.numbers.fraction.GeneralizedContinuedFraction.Coefficient;
+
+/**
+ * Implementation of the
+ * <a href="http://mathworld.wolfram.com/RegularizedGammaFunction.html">Regularized Gamma functions</a> and
+ * <a href="https://mathworld.wolfram.com/IncompleteGammaFunction.html">Incomplete Gamma functions</a>.
+ *
+ * <p>This code has been adapted from the <a href="https://www.boost.org/">Boost</a>
+ * {@code c++} implementation {@code <boost/math/special_functions/gamma.hpp>}.
+ * All work is copyright to the original authors and subject to the Boost Software License.
+ *
+ * @see
+ * <a href="https://www.boost.org/doc/libs/1_77_0/libs/math/doc/html/math_toolkit/sf_gamma.html">
+ * Boost C++ Gamma functions</a>
+ */
+final class BoostGamma {
+    //
+    // Code ported from Boost 1.77.0
+    //
+    // boost/math/special_functions/gamma.hpp
+    // boost/math/special_functions/detail/igamma_large.hpp
+    // boost/math/special_functions/lanczos.hpp
+    //
+    // Original code comments are preserved.
+    //
+    // Changes to the Boost implementation:
+    // - Update method names to replace underscores with camel case
+    // - Explicitly inline the polynomial function evaluation
+    //   using Horner's method (https://en.wikipedia.org/wiki/Horner%27s_method)
+    // - Remove checks for under/overflow. In this implementation no error is raised
+    //   for overflow (infinity is returned) or underflow (sub-normal or zero is returned).
+    //   This follows the conventions in java.lang.Math for the same conditions.
+    // - Removed the pointer p_derivative in the gammaIncompleteImp. This is used
+    //   in the Boost code for the gamma_(p|q)_inv functions for a derivative
+    //   based inverse function. This is currently not supported.
+    // - Added extended precision arithmetic for some series summations or other computations.
+    //   The Boost default policy is to evaluate in long double for a double result. Extended
+    //   precision is not possible for the entire computation but has been used where
+    //   possible for some terms to reduce errors. Error reduction verified on the test data.
+    // - Altered the tgamma(x) function to use the double-precision NSWC Library of Mathematics
+    //   Subroutines when the error is lower. This is for the non Lanczos code.
+    // - Altered the condition used for the asymptotic approximation method to avoid
+    //   loss of precision in the series summation when a ~ z.
+    // - Altered series generators to use integer counters added to the double term
+    //   replacing directly incrementing a double term. When the term is large it cannot
+    //   be incremented: 1e16 + 1 == 1e16.
+    //
+    // Note:
+    // The major source of error is in the function regularisedGammaPrefix when computing
+    // (z^a)(e^-z)/tgamma(a) with extreme input to the power and exponential terms.
+    // An extended precision pow and exp function returning a quad length result would
+    // be required to reduce error for these arguments. Tests using the Dfp class
+    // from o.a.c.math4.legacy.core have been demonstrated to effectively eliminate the
+    // errors from the power terms and improve accuracy on the current test data.
+    // In the interest of performance the Dfp class is not used in this version.
+
+    /** Default epsilon value for relative error.
+     * This is equal to the Boost constant {@code boost::math::tools::epsilon<double>()}. */
+    private static final double EPSILON = 0x1.0p-52;
+    /** Value for the sqrt of the epsilon for relative error.
+     * This is equal to the Boost constant {@code boost::math::tools::root_epsilon<double>()}. */
+    private static final double ROOT_EPSILON = 1.4901161193847656E-8;
+    /** Approximate value for ln(Double.MAX_VALUE).
+     * This is equal to the Boost constant {@code boost::math::tools::log_max_value<double>()}.
+     * No term {@code x} should be used in {@code exp(x)} if {@code x > LOG_MAX_VALUE} to avoid
+     * overflow. */
+    private static final int LOG_MAX_VALUE = 709;
+    /** Approximate value for ln(Double.MIN_VALUE).
+     * This is equal to the Boost constant {@code boost::math::tools::log_min_value<double>()}.
+     * No term {@code x} should be used in {@code exp(x)} if {@code x < LOG_MIN_VALUE} to avoid
+     * underflow to sub-normal or zero. */
+    private static final int LOG_MIN_VALUE = -708;
+    /** The largest factorial that can be represented as a double.
+     * This is equal to the Boost constant {@code boost::math::max_factorial<double>::value}. */
+    private static final int MAX_FACTORIAL = 170;
+    /** The largest integer value for gamma(z) that can be represented as a double. */
+    private static final int MAX_GAMMA_Z = MAX_FACTORIAL + 1;
+    /** ln(sqrt(2 pi)). Computed to 25-digits precision. */
+    private static final double LOG_ROOT_TWO_PI = 0.9189385332046727417803297;
+    /** ln(pi). Computed to 25-digits precision. */
+    private static final double LOG_PI = 1.144729885849400174143427;
+    /** Euler's constant. */
+    private static final double EULER = 0.5772156649015328606065120900824024310;
+    /** The threshold value for choosing the Lanczos approximation. */
+    private static final int LANCZOS_THRESHOLD = 20;
+
+    /** All factorials that can be represented as a double. Size = 171. */
+    private static final double[] FACTORIAL = {
+        1,
+        1,
+        2,
+        6,
+        24,
+        120,
+        720,
+        5040,
+        40320,
+        362880.0,
+        3628800.0,
+        39916800.0,
+        479001600.0,
+        6227020800.0,
+        87178291200.0,
+        1307674368000.0,
+        20922789888000.0,
+        355687428096000.0,
+        6402373705728000.0,
+        121645100408832000.0,
+        0.243290200817664e19,
+        0.5109094217170944e20,
+        0.112400072777760768e22,
+        0.2585201673888497664e23,
+        0.62044840173323943936e24,
+        0.15511210043330985984e26,
+        0.403291461126605635584e27,
+        0.10888869450418352160768e29,
+        0.304888344611713860501504e30,
+        0.8841761993739701954543616e31,
+        0.26525285981219105863630848e33,
+        0.822283865417792281772556288e34,
+        0.26313083693369353016721801216e36,
+        0.868331761881188649551819440128e37,
+        0.29523279903960414084761860964352e39,
+        0.103331479663861449296666513375232e41,
+        0.3719933267899012174679994481508352e42,
+        0.137637530912263450463159795815809024e44,
+        0.5230226174666011117600072241000742912e45,
+        0.203978820811974433586402817399028973568e47,
+        0.815915283247897734345611269596115894272e48,
+        0.3345252661316380710817006205344075166515e50,
+        0.1405006117752879898543142606244511569936e52,
+        0.6041526306337383563735513206851399750726e53,
+        0.265827157478844876804362581101461589032e55,
+        0.1196222208654801945619631614956577150644e57,
+        0.5502622159812088949850305428800254892962e58,
+        0.2586232415111681806429643551536119799692e60,
+        0.1241391559253607267086228904737337503852e62,
+        0.6082818640342675608722521633212953768876e63,
+        0.3041409320171337804361260816606476884438e65,
+        0.1551118753287382280224243016469303211063e67,
+        0.8065817517094387857166063685640376697529e68,
+        0.427488328406002556429801375338939964969e70,
+        0.2308436973392413804720927426830275810833e72,
+        0.1269640335365827592596510084756651695958e74,
+        0.7109985878048634518540456474637249497365e75,
+        0.4052691950487721675568060190543232213498e77,
+        0.2350561331282878571829474910515074683829e79,
+        0.1386831185456898357379390197203894063459e81,
+        0.8320987112741390144276341183223364380754e82,
+        0.507580213877224798800856812176625227226e84,
+        0.3146997326038793752565312235495076408801e86,
+        0.1982608315404440064116146708361898137545e88,
+        0.1268869321858841641034333893351614808029e90,
+        0.8247650592082470666723170306785496252186e91,
+        0.5443449390774430640037292402478427526443e93,
+        0.3647111091818868528824985909660546442717e95,
+        0.2480035542436830599600990418569171581047e97,
+        0.1711224524281413113724683388812728390923e99,
+        0.1197857166996989179607278372168909873646e101,
+        0.8504785885678623175211676442399260102886e102,
+        0.6123445837688608686152407038527467274078e104,
+        0.4470115461512684340891257138125051110077e106,
+        0.3307885441519386412259530282212537821457e108,
+        0.2480914081139539809194647711659403366093e110,
+        0.188549470166605025498793226086114655823e112,
+        0.1451830920282858696340707840863082849837e114,
+        0.1132428117820629783145752115873204622873e116,
+        0.8946182130782975286851441715398316520698e117,
+        0.7156945704626380229481153372318653216558e119,
+        0.5797126020747367985879734231578109105412e121,
+        0.4753643337012841748421382069894049466438e123,
+        0.3945523969720658651189747118012061057144e125,
+        0.3314240134565353266999387579130131288001e127,
+        0.2817104114380550276949479442260611594801e129,
+        0.2422709538367273238176552320344125971528e131,
+        0.210775729837952771721360051869938959523e133,
+        0.1854826422573984391147968456455462843802e135,
+        0.1650795516090846108121691926245361930984e137,
+        0.1485715964481761497309522733620825737886e139,
+        0.1352001527678402962551665687594951421476e141,
+        0.1243841405464130725547532432587355307758e143,
+        0.1156772507081641574759205162306240436215e145,
+        0.1087366156656743080273652852567866010042e147,
+        0.103299784882390592625997020993947270954e149,
+        0.9916779348709496892095714015418938011582e150,
+        0.9619275968248211985332842594956369871234e152,
+        0.942689044888324774562618574305724247381e154,
+        0.9332621544394415268169923885626670049072e156,
+        0.9332621544394415268169923885626670049072e158,
+        0.9425947759838359420851623124482936749562e160,
+        0.9614466715035126609268655586972595484554e162,
+        0.990290071648618040754671525458177334909e164,
+        0.1029901674514562762384858386476504428305e167,
+        0.1081396758240290900504101305800329649721e169,
+        0.1146280563734708354534347384148349428704e171,
+        0.1226520203196137939351751701038733888713e173,
+        0.132464181945182897449989183712183259981e175,
+        0.1443859583202493582204882102462797533793e177,
+        0.1588245541522742940425370312709077287172e179,
+        0.1762952551090244663872161047107075788761e181,
+        0.1974506857221074023536820372759924883413e183,
+        0.2231192748659813646596607021218715118256e185,
+        0.2543559733472187557120132004189335234812e187,
+        0.2925093693493015690688151804817735520034e189,
+        0.339310868445189820119825609358857320324e191,
+        0.396993716080872089540195962949863064779e193,
+        0.4684525849754290656574312362808384164393e195,
+        0.5574585761207605881323431711741977155627e197,
+        0.6689502913449127057588118054090372586753e199,
+        0.8094298525273443739681622845449350829971e201,
+        0.9875044200833601362411579871448208012564e203,
+        0.1214630436702532967576624324188129585545e206,
+        0.1506141741511140879795014161993280686076e208,
+        0.1882677176888926099743767702491600857595e210,
+        0.237217324288004688567714730513941708057e212,
+        0.3012660018457659544809977077527059692324e214,
+        0.3856204823625804217356770659234636406175e216,
+        0.4974504222477287440390234150412680963966e218,
+        0.6466855489220473672507304395536485253155e220,
+        0.8471580690878820510984568758152795681634e222,
+        0.1118248651196004307449963076076169029976e225,
+        0.1487270706090685728908450891181304809868e227,
+        0.1992942746161518876737324194182948445223e229,
+        0.269047270731805048359538766214698040105e231,
+        0.3659042881952548657689727220519893345429e233,
+        0.5012888748274991661034926292112253883237e235,
+        0.6917786472619488492228198283114910358867e237,
+        0.9615723196941089004197195613529725398826e239,
+        0.1346201247571752460587607385894161555836e242,
+        0.1898143759076170969428526414110767793728e244,
+        0.2695364137888162776588507508037290267094e246,
+        0.3854370717180072770521565736493325081944e248,
+        0.5550293832739304789551054660550388118e250,
+        0.80479260574719919448490292577980627711e252,
+        0.1174997204390910823947958271638517164581e255,
+        0.1727245890454638911203498659308620231933e257,
+        0.2556323917872865588581178015776757943262e259,
+        0.380892263763056972698595524350736933546e261,
+        0.571338395644585459047893286526105400319e263,
+        0.8627209774233240431623188626544191544816e265,
+        0.1311335885683452545606724671234717114812e268,
+        0.2006343905095682394778288746989117185662e270,
+        0.308976961384735088795856467036324046592e272,
+        0.4789142901463393876335775239063022722176e274,
+        0.7471062926282894447083809372938315446595e276,
+        0.1172956879426414428192158071551315525115e279,
+        0.1853271869493734796543609753051078529682e281,
+        0.2946702272495038326504339507351214862195e283,
+        0.4714723635992061322406943211761943779512e285,
+        0.7590705053947218729075178570936729485014e287,
+        0.1229694218739449434110178928491750176572e290,
+        0.2004401576545302577599591653441552787813e292,
+        0.3287218585534296227263330311644146572013e294,
+        0.5423910666131588774984495014212841843822e296,
+        0.9003691705778437366474261723593317460744e298,
+        0.1503616514864999040201201707840084015944e301,
+        0.2526075744973198387538018869171341146786e303,
+        0.4269068009004705274939251888899566538069e305,
+        0.7257415615307998967396728211129263114717e307,
+    };
+
+    /**
+     * Encapsulate the policy for function evaluation.
+     * This is a reduced implementation of the Boost {@code boost::math::policies}
+     * functionality. No settings are preserved for the error handling policy or
+     * promotion of data types for computations.
+     * This controls the convergence criteria and maximum iterations for series evaluations.
+     *
+     * @see <a href="https://www.boost.org/doc/libs/1_77_0/libs/math/doc/html/policy.html">
+     * Policies: Controlling Precision, Error Handling etc</a>
+     */
+    static final class Policy {
+        /** Default policy. The Boost default uses 2^-52 for the epsilon. This uses
+         * 2^-53 to use an extra guard digit in the Kahan series summations.
+         * The minimum value for the Commons continued fraction epsilon is also 2^-53. */
+        private static final Policy DEFAULT = new Policy(0x1.0p-53, 1000000);
+
+        /** Epsilon value for relative error. */
+        private final double eps;
+        /** The maximum number of iterations permitted in a series evaluation. */
+        private final int maxIterations;
+
+        /**
+         * Instantiates a new policy.
+         *
+         * @param eps the eps
+         * @param maxIterations the maximum number of iterations permitted in a series
+         * evaluation
+         */
+        Policy(double eps, int maxIterations) {
+            this.eps = eps;
+            this.maxIterations = maxIterations;
+        }
+
+        /**
+         * Gets the default.
+         *
+         * @return the default policy
+         */
+        static Policy getDefault() {
+            return DEFAULT;
+        }
+
+        /**
+         * Gets the epsilon value for relative error.
+         *
+         * @return the epsilon
+         */
+        double getEps() {
+            return eps;
+        }
+
+        /**
+         * Gets the maximum number of iterations permitted in a series evaluation.
+         *
+         * @return max iterations
+         */
+        int getMaxIterations() {
+            return maxIterations;
+        }
+    }
+
+    /**
+     * 53-bit precision implementation of the Lanczos approximation.
+     *
+     * <p>This implementation is in partial fraction form with the leading constant
+     * of \( \sqrt{2\pi} \) absorbed into the sum.
+     *
+     * <p>It is related to the Gamma function by the following equation
+     * \[
+     * \Gamma(z) = \frac{(z + g - 0.5)^{z - 0.5}}{e^{z + g - 0.5}} \mathrm{lanczos}(z)
+     * \]
+     * where \( g \) is the Lanczos constant.
+     *
+     * <h2>Warning</h2>
+     *
+     * <p>This is not a substitute for {@link LanczosApproximation}. The approximation is
+     * written in partial fraction form with the leading constants absorbed by the
+     * coefficients in the sum.
+     *
+     * @see <a href="https://www.boost.org/doc/libs/1_77_0/libs/math/doc/html/math_toolkit/lanczos.html">
+     * Boost Lanczos Approximation</a>
+     */
+    static final class Lanczos {
+        // Optimal values for G for each N are taken from
+        // http://web.mala.bc.ca/pughg/phdThesis/phdThesis.pdf,
+        // as are the theoretical error bounds.
+        //
+        // Constants calculated using the method described by Godfrey
+        // http://my.fit.edu/~gabdo/gamma.txt and elaborated by Toth at
+        // http://www.rskey.org/gamma.htm using NTL::RR at 1000 bit precision.
+
+        //
+        // Lanczos Coefficients for N=13 G=6.024680040776729583740234375
+        // Max experimental error (with arbitrary precision arithmetic) 1.196214e-17
+        // Generated with compiler: Microsoft Visual C++ version 8.0 on Win32 at Mar 23 2006
+        //
+
+        /** Common denominator used for the rational evaluation. */
+        private static final int[] DENOM = {
+            0,
+            39916800,
+            120543840,
+            150917976,
+            105258076,
+            45995730,
+            13339535,
+            2637558,
+            357423,
+            32670,
+            1925,
+            66,
+            1
+        };
+
+        /** Private constructor. */
+        private Lanczos() {
+            // intentionally empty.
+        }
+
+        /**
+         * Lanczos constant G.
+         *
+         * @return the Lanczos constant.
+         */
+        static double g() {
+            return 6.024680040776729583740234375;
+        }
+
+        /**
+         * Lanczos constant G - half.
+         *
+         * <p>Note: The form {@code (g - 0.5)} is used when computing the gamma function.
+         *
+         * @return the Lanczos constant - 0.5.
+         */
+        static double gmh() {
+            return 5.524680040776729583740234375;
+        }
+
+        /**
+         * Computes the Lanczos approximation.
+         *
+         * @param z Argument.
+         * @return the Lanczos approximation.
+         */
+        static double lanczosSum(double z) {
+            final double[] num = {
+                23531376880.41075968857200767445163675473,
+                42919803642.64909876895789904700198885093,
+                35711959237.35566804944018545154716670596,
+                17921034426.03720969991975575445893111267,
+                6039542586.35202800506429164430729792107,
+                1439720407.311721673663223072794912393972,
+                248874557.8620541565114603864132294232163,
+                31426415.58540019438061423162831820536287,
+                2876370.628935372441225409051620849613599,
+                186056.2653952234950402949897160456992822,
+                8071.672002365816210638002902272250613822,
+                210.8242777515793458725097339207133627117,
+                2.506628274631000270164908177133837338626
+            };
+            return evaluateRational(num, DENOM, z);
+        }
+
+        /**
+         * Computes the Lanczos approximation scaled by {@code exp(g)}.
+         *
+         * @param z Argument.
+         * @return the scaled Lanczos approximation.
+         */
+        static double lanczosSumExpGScaled(double z) {
+            // As above with numerator divided by exp(g) = 413.509...
+            final double[] num = {
+                56906521.91347156388090791033559122686859,
+                103794043.1163445451906271053616070238554,
+                86363131.28813859145546927288977868422342,
+                43338889.32467613834773723740590533316085,
+                14605578.08768506808414169982791359218571,
+                3481712.15498064590882071018964774556468,
+                601859.6171681098786670226533699352302507,
+                75999.29304014542649875303443598909137092,
+                6955.999602515376140356310115515198987526,
+                449.9445569063168119446858607650988409623,
+                19.51992788247617482847860966235652136208,
+                0.5098416655656676188125178644804694509993,
+                0.006061842346248906525783753964555936883222
+            };
+            return evaluateRational(num, DENOM, z);
+        }
+
+        /**
+         * Evaluate the rational number as two polynomials.
+         *
+         * <p>Adapted from {@code boost/math/tools/detail/rational_horner3_13.hpp}.
+         * Note: There are 3 variations of the unrolled rational evaluation.
+         * These methods change the order based on the sign of x. This
+         * should be used for the Lanczos code as this comment in
+         * {@code boost/math/tools/rational.hpp} notes:
+         *
+         * <blockquote>
+         * However, there
+         * are some tricks we can use to prevent overflow that might otherwise
+         * occur in polynomial evaluation, if z is large.  This is important
+         * in our Lanczos code for example.
+         * </blockquote>
+         *
+         * @param a Coefficients of the numerator polynomial
+         * @param b Coefficients of the denominator polynomial
+         * @param x Value
+         * @return the rational number
+         */
+        private static double evaluateRational(double[] a, int[] b, double x) {
+            // The choice of algorithm in Boost is based on the compiler
+            // to suite the available optimisations.
+            //
+            // Tests against rational_horner1_13.hpp which uses a first order
+            // Horner method (no x*x term) show only minor variations in
+            // error. rational_horner2_13.hpp has the same second order Horner
+            // method with different code layout of the same sum.
+
+            // rational_horner3_13.hpp
+            if (x <= 1) {
+                final double x2 = x * x;
+                double t0 = a[12] * x2 + a[10];
+                double t1 = a[11] * x2 + a[9];
+                double t2 = b[12] * x2 + b[10];
+                double t3 = b[11] * x2 + b[9];
+                t0 *= x2;
+                t1 *= x2;
+                t2 *= x2;
+                t3 *= x2;
+                t0 += a[8];
+                t1 += a[7];
+                t2 += b[8];
+                t3 += b[7];
+                t0 *= x2;
+                t1 *= x2;
+                t2 *= x2;
+                t3 *= x2;
+                t0 += a[6];
+                t1 += a[5];
+                t2 += b[6];
+                t3 += b[5];
+                t0 *= x2;
+                t1 *= x2;
+                t2 *= x2;
+                t3 *= x2;
+                t0 += a[4];
+                t1 += a[3];
+                t2 += b[4];
+                t3 += b[3];
+                t0 *= x2;
+                t1 *= x2;
+                t2 *= x2;
+                t3 *= x2;
+                t0 += a[2];
+                t1 += a[1];
+                t2 += b[2];
+                t3 += b[1];
+                t0 *= x2;
+                t2 *= x2;
+                t0 += a[0];
+                t2 += b[0];
+                t1 *= x;
+                t3 *= x;
+                return (t0 + t1) / (t2 + t3);
+            }
+            final double z = 1 / x;
+            final double z2 = 1 / (x * x);
+            double t0 = a[0] * z2 + a[2];
+            double t1 = a[1] * z2 + a[3];
+            double t2 = b[0] * z2 + b[2];
+            double t3 = b[1] * z2 + b[3];
+            t0 *= z2;
+            t1 *= z2;
+            t2 *= z2;
+            t3 *= z2;
+            t0 += a[4];
+            t1 += a[5];
+            t2 += b[4];
+            t3 += b[5];
+            t0 *= z2;
+            t1 *= z2;
+            t2 *= z2;
+            t3 *= z2;
+            t0 += a[6];
+            t1 += a[7];
+            t2 += b[6];
+            t3 += b[7];
+            t0 *= z2;
+            t1 *= z2;
+            t2 *= z2;
+            t3 *= z2;
+            t0 += a[8];
+            t1 += a[9];
+            t2 += b[8];
+            t3 += b[9];
+            t0 *= z2;
+            t1 *= z2;
+            t2 *= z2;
+            t3 *= z2;
+            t0 += a[10];
+            t1 += a[11];
+            t2 += b[10];
+            t3 += b[11];
+            t0 *= z2;
+            t2 *= z2;
+            t0 += a[12];
+            t2 += b[12];
+            t1 *= z;
+            t3 *= z;
+            return (t0 + t1) / (t2 + t3);
+        }
+
+        // Not implemented:
+        // lanczos_sum_near_1
+        // lanczos_sum_near_2
+    }
+
+    /** Private constructor. */
+    private BoostGamma() {
+        // intentionally empty.
+    }
+
+    /**
+     * All factorials that are representable as a double.
+     * This data is exposed for testing.
+     *
+     * @return factorials
+     */
+    static double[] getFactorials() {
+        return FACTORIAL.clone();
+    }
+
+    /**
+     * Gamma function.
+     *
+     * <p>For small {@code z} this is based on the <em>NSWC Library of Mathematics
+     * Subroutines</em> double precision implementation, {@code DGAMMA}.
+     *
+     * <p>For large {@code z} this is an implementation of the Boost C++ tgamma
+     * function with Lanczos support.
+     *
+     * <p>Integers are handled using a look-up table of factorials.
+     *
+     * <p>Note: The Boost C++ implementation uses the Lanczos sum for all {@code z}.
+     * When promotion of double to long double is not available this has larger
+     * errors than the double precision specific NSWC implementation. For larger
+     * {@code z} the Boost C++ Lanczos implementation incorporates the sqrt(2 pi)
+     * factor and has lower error than the implementation using the
+     * {@link LanczosApproximation} class.
+     *
+     * @param z Argument z
+     * @return gamma value
+     */
+    static double tgamma(double z) {
+        // Handle integers
+        if (Math.rint(z) == z) {
+            if (z <= 0) {
+                // Pole error
+                return Double.NaN;
+            }
+            if (z <= MAX_GAMMA_Z) {
+                // Gamma(n) = (n-1)!
+                return FACTORIAL[(int) z - 1];
+            }
+            // Overflow
+            return Double.POSITIVE_INFINITY;
+        }
+
+        if (Math.abs(z) <= LANCZOS_THRESHOLD) {
+            // Small z
+            // NSWC Library of Mathematics Subroutines
+            // Note:
+            // This does not benefit from using extended precision to track the sum (t).
+            // Extended precision on the product reduces the error but the majority
+            // of error remains in InvGamma1pm1.
+
+            if (z >= 1) {
+                /*
+                 * From the recurrence relation
+                 * Gamma(x) = (x - 1) * ... * (x - n) * Gamma(x - n),
+                 * then
+                 * Gamma(t) = 1 / [1 + InvGamma1pm1.value(t - 1)],
+                 * where t = x - n. This means that t must satisfy
+                 * -0.5 <= t - 1 <= 1.5.
+                 */
+                double prod = 1;
+                double t = z;
+                while (t > 2.5) {
+                    t -= 1;
+                    prod *= t;
+                }
+                return prod / (1 + InvGamma1pm1.value(t - 1));
+            }
+            /*
+             * From the recurrence relation
+             * Gamma(x) = Gamma(x + n + 1) / [x * (x + 1) * ... * (x + n)]
+             * then
+             * Gamma(x + n + 1) = 1 / [1 + InvGamma1pm1.value(x + n)],
+             * which requires -0.5 <= x + n <= 1.5.
+             */
+            double prod = z;
+            double t = z;
+            while (t < -0.5) {
+                t += 1;
+                prod *= t;
+            }
+            return 1 / (prod * (1 + InvGamma1pm1.value(t)));
+        }
+
+        // Large non-integer z
+        // Boost C++ tgamma implementation
+
+        if (z < 0) {
+            /*
+             * From the reflection formula
+             * Gamma(x) * Gamma(1 - x) * sin(pi * x) = pi,
+             * and the recurrence relation
+             * Gamma(1 - x) = -x * Gamma(-x),
+             * it is found
+             * Gamma(x) = -pi / [x * sin(pi * x) * Gamma(-x)].
+             */
+            return -Math.PI / (sinpx(z) * tgamma(-z));
+        } else if (z > MAX_GAMMA_Z + 1) {
+            // Addition to the Boost code: Simple overflow detection
+            return Double.POSITIVE_INFINITY;
+        }
+
+        double result = Lanczos.lanczosSum(z);
+        final double zgh = z + Lanczos.gmh();
+        final double lzgh = Math.log(zgh);
+        if (z * lzgh > LOG_MAX_VALUE) {
+            // we're going to overflow unless this is done with care:
+
+            // Updated
+            // Check for overflow removed:
+            // if (lzgh * z / 2 > LOG_MAX_VALUE) ... overflow
+            // This is replaced by checking z > MAX_FACTORIAL + 2
+
+            final double hp = Math.pow(zgh, (z / 2) - 0.25);
+            result *= hp / Math.exp(zgh);
+            // Check for overflow has been removed:
+            // if (Double.MAX_VALUE / hp < result) ... overflow
+            result *= hp;
+        } else {
+            result *= Math.pow(zgh, z - 0.5) / Math.exp(zgh);
+        }
+
+        return result;
+    }
+
+    /**
+     * Ad hoc function calculates x * sin(pi * x), taking extra care near when x is
+     * near a whole number.
+     *
+     * @param x Value (assumed to be negative)
+     * @return x * sin(pi * x)
+     */
+    static double sinpx(double x) {
+        int sign = 1;
+        // This is always called with a negative
+        // if (x < 0)
+        x = -x;
+        double fl = Math.floor(x);
+        double dist;
+        if (isOdd(fl)) {
+            fl += 1;
+            dist = fl - x;
+            sign = -sign;
+        } else {
+            dist = x - fl;
+        }
+        if (dist > 0.5f) {
+            dist = 1 - dist;
+        }
+        final double result = Math.sin(dist * Math.PI);
+        return sign * x * result;
+    }
+
+    /**
+     * Checks if the value is odd.
+     *
+     * @param v Value (assumed to be positive and an integer)
+     * @return true if odd
+     */
+    private static boolean isOdd(double v) {
+        // Note:
+        // Any value larger than 2^53 should be even.
+        // If the input is positive then truncation of extreme doubles (>2^63)
+        // to the primitive long creates an odd value: 2^63-1.
+        // This is corrected by inverting the sign of v and the extreme is even: -2^63.
+        // This function is never called when the argument is this large
+        // as this is a pole error in tgamma so the effect is never observed.
+        // However the isOdd function is correct for all positive finite v.
+        return (((long) -v) & 0x1) == 1;
+    }
+
+    /**
+     * Log Gamma function.
+     * Defined as the natural logarithm of the absolute value of tgamma(z).
+     *
+     * @param z Argument z
+     * @return log gamma value
+     */
+    static double lgamma(double z) {
+        return lgamma(z, null);
+    }
+
+    /**
+     * Log Gamma function.
+     * Defined as the natural logarithm of the absolute value of tgamma(z).
+     *
+     * @param z Argument z
+     * @param sign If a non-zero length array the first index is set on output to the sign of tgamma(z)
+     * @return log gamma value
+     */
+    static double lgamma(double z, int[] sign) {
+        double result = 0;
+        int sresult = 1;
+        if (z <= -ROOT_EPSILON) {
+            // reflection formula:
+            if (Math.rint(z) == z) {
+                // Pole error
+                return Double.NaN;
+            }
+
+            double t = sinpx(z);
+            z = -z;
+            if (t < 0) {
+                t = -t;
+            } else {
+                sresult = -sresult;
+            }
+
+            // This summation can have large magnitudes with opposite signs.
+            // Use an extended precision sum to reduce cancellation.
+            result = Sum.of(-lgamma(z)).add(-Math.log(t)).add(LOG_PI).getAsDouble();
+
+        } else if (z < ROOT_EPSILON) {
+            if (z == 0) {
+                // Pole error
+                return Double.NaN;
+            }
+            if (4 * Math.abs(z) < EPSILON) {
+                result = -Math.log(Math.abs(z));
+            } else {
+                result = Math.log(Math.abs(1 / z - EULER));
+            }
+            if (z < 0) {
+                sresult = -1;
+            }
+        } else if (z < 15) {
+            result = lgammaSmall(z, z - 1, z - 2);
+        // The z > 3 condition is always true
+        //} else if (z > 3 && z < 100) {
+        } else if (z < 100) {
+            // taking the log of tgamma reduces the error, no danger of overflow here:
+            result = Math.log(tgamma(z));
+        } else {
+            // regular evaluation:
+            final double zgh = z + Lanczos.gmh();
+            result = Math.log(zgh) - 1;
+            result *= z - 0.5f;
+            //
+            // Only add on the lanczos sum part if we're going to need it:
+            //
+            if (result * EPSILON < 20) {
+                result += Math.log(Lanczos.lanczosSumExpGScaled(z));
+            }
+        }
+
+        if (nonZeroLength(sign)) {
+            sign[0] = sresult;
+        }
+        return result;
+    }
+
+    /**
+     * Log Gamma function for small z.
+     *
+     * @param z Argument z
+     * @param zm1 {@code z - 1}
+     * @param zm2 {@code z - 2}
+     * @return log gamma value
+     */
+    private static double lgammaSmall(double z, double zm1, double zm2) {
+        // This version uses rational approximations for small
+        // values of z accurate enough for 64-bit mantissas
+        // (80-bit long doubles), works well for 53-bit doubles as well.
+
+        // Updated to use an extended precision sum
+        final Sum result = Sum.create();
+
+        // Note:
+        // Removed z < EPSILON branch.
+        // The function is called
+        // from lgamma:
+        //   ROOT_EPSILON <= z < 15
+        // from tgamma1pm1:
+        //   1.5 <= z < 2
+        //   1 <= z < 3
+
+        if ((zm1 == 0) || (zm2 == 0)) {
+            // nothing to do, result is zero....
+            return 0;
+        } else if (z > 2) {
+            //
+            // Begin by performing argument reduction until
+            // z is in [2,3):
+            //
+            if (z >= 3) {
+                do {
+                    z -= 1;
+                    result.add(Math.log(z));
+                } while (z >= 3);
+                // Update zm2, we need it below:
+                zm2 = z - 2;
+            }
+
+            //
+            // Use the following form:
+            //
+            // lgamma(z) = (z-2)(z+1)(Y + R(z-2))
+            //
+            // where R(z-2) is a rational approximation optimised for
+            // low absolute error - as long as its absolute error
+            // is small compared to the constant Y - then any rounding
+            // error in its computation will get wiped out.
+            //
+            // R(z-2) has the following properties:
+            //
+            // At double: Max error found:                    4.231e-18
+            // At long double: Max error found:               1.987e-21
+            // Maximum Deviation Found (approximation error): 5.900e-24
+            //
+            double P;
+            P = -0.324588649825948492091e-4;
+            P = -0.541009869215204396339e-3 + P * zm2;
+            P = -0.259453563205438108893e-3 + P * zm2;
+            P =  0.172491608709613993966e-1 + P * zm2;
+            P =  0.494103151567532234274e-1 + P * zm2;
+            P =   0.25126649619989678683e-1 + P * zm2;
+            P = -0.180355685678449379109e-1 + P * zm2;
+            double Q;
+            Q = -0.223352763208617092964e-6;
+            Q =  0.224936291922115757597e-3 + Q * zm2;
+            Q =   0.82130967464889339326e-2 + Q * zm2;
+            Q =  0.988504251128010129477e-1 + Q * zm2;
+            Q =   0.541391432071720958364e0 + Q * zm2;
+            Q =   0.148019669424231326694e1 + Q * zm2;
+            Q =   0.196202987197795200688e1 + Q * zm2;
+            Q =                       0.1e1 + Q * zm2;
+
+            final float Y = 0.158963680267333984375e0f;
+
+            final double r = zm2 * (z + 1);
+            final double R = P / Q;
+
+            result.addProduct(r, Y).addProduct(r, R);
+        } else {
+            //
+            // If z is less than 1 use recurrence to shift to
+            // z in the interval [1,2]:
+            //
+            if (z < 1) {
+                result.add(-Math.log(z));
+                zm2 = zm1;
+                zm1 = z;
+                z += 1;
+            }
+            //
+            // Two approximations, one for z in [1,1.5] and
+            // one for z in [1.5,2]:
+            //
+            if (z <= 1.5) {
+                //
+                // Use the following form:
+                //
+                // lgamma(z) = (z-1)(z-2)(Y + R(z-1
+                //
+                // where R(z-1) is a rational approximation optimised for
+                // low absolute error - as long as its absolute error
+                // is small compared to the constant Y - then any rounding
+                // error in its computation will get wiped out.
+                //
+                // R(z-1) has the following properties:
+                //
+                // At double precision: Max error found:                1.230011e-17
+                // At 80-bit long double precision:   Max error found:  5.631355e-21
+                // Maximum Deviation Found:                             3.139e-021
+                // Expected Error Term:                                 3.139e-021
+
+                //
+                final float Y = 0.52815341949462890625f;
+
+                double P;
+                P = -0.100346687696279557415e-2;
+                P = -0.240149820648571559892e-1 + P * zm1;
+                P =  -0.158413586390692192217e0 + P * zm1;
+                P =  -0.406567124211938417342e0 + P * zm1;
+                P =  -0.414983358359495381969e0 + P * zm1;
+                P = -0.969117530159521214579e-1 + P * zm1;
+                P =  0.490622454069039543534e-1 + P * zm1;
+                double Q;
+                Q = 0.195768102601107189171e-2;
+                Q = 0.577039722690451849648e-1 + Q * zm1;
+                Q =  0.507137738614363510846e0 + Q * zm1;
+                Q =  0.191415588274426679201e1 + Q * zm1;
+                Q =  0.348739585360723852576e1 + Q * zm1;
+                Q =  0.302349829846463038743e1 + Q * zm1;
+                Q =                      0.1e1 + Q * zm1;
+
+                final double r = P / Q;
+                final double prefix = zm1 * zm2;
+
+                result.addProduct(prefix, Y).addProduct(prefix, r);
+            } else {
+                //
+                // Use the following form:
+                //
+                // lgamma(z) = (2-z)(1-z)(Y + R(2-z
+                //
+                // where R(2-z) is a rational approximation optimised for
+                // low absolute error - as long as its absolute error
+                // is small compared to the constant Y - then any rounding
+                // error in its computation will get wiped out.
+                //
+                // R(2-z) has the following properties:
+                //
+                // At double precision, max error found:              1.797565e-17
+                // At 80-bit long double precision, max error found:  9.306419e-21
+                // Maximum Deviation Found:                           2.151e-021
+                // Expected Error Term:                               2.150e-021
+                //
+                final float Y = 0.452017307281494140625f;
+
+                final double mzm2 = -zm2;
+                double P;
+                P =  0.431171342679297331241e-3;
+                P = -0.850535976868336437746e-2 + P * mzm2;
+                P =  0.542809694055053558157e-1 + P * mzm2;
+                P =  -0.142440390738631274135e0 + P * mzm2;
+                P =   0.144216267757192309184e0 + P * mzm2;
+                P = -0.292329721830270012337e-1 + P * mzm2;
+                double Q;
+                Q = -0.827193521891290553639e-6;
+                Q = -0.100666795539143372762e-2 + Q * mzm2;
+                Q =   0.25582797155975869989e-1 + Q * mzm2;
+                Q =  -0.220095151814995745555e0 + Q * mzm2;
+                Q =   0.846973248876495016101e0 + Q * mzm2;
+                Q =  -0.150169356054485044494e1 + Q * mzm2;
+                Q =                       0.1e1 + Q * mzm2;
+                final double r = zm2 * zm1;
+                final double R = P / Q;
+
+                result.addProduct(r, Y).addProduct(r, R);
+            }
+        }
+        return result.getAsDouble();
+    }
+
+    /**
+     * Calculates tgamma(1+dz)-1.
+     *
+     * @param dz Argument
+     * @return tgamma(1+dz)-1
+     */
+    static double tgamma1pm1(double dz) {
+        //
+        // This helper calculates tgamma(1+dz)-1 without cancellation errors,
+        // used by the upper incomplete gamma with z < 1:
+        //
+        double result;
+        if (dz < 0) {
+            if (dz < -0.5) {
+                // Best method is simply to subtract 1 from tgamma:
+                result = tgamma(1 + dz) - 1;
+            } else {
+                // Use expm1 on lgamma:
+                result = Math.expm1(-Math.log1p(dz) + lgammaSmall(dz + 2, dz + 1, dz));
+            }
+        } else {
+            if (dz < 2) {
+                // Use expm1 on lgamma:
+                result = Math.expm1(lgammaSmall(dz + 1, dz, dz - 1));
+            } else {
+                // Best method is simply to subtract 1 from tgamma:
+                result = tgamma(1 + dz) - 1;
+            }
+        }
+
+        return result;
+    }
+
+    /**
+     * Full upper incomplete gamma.
+     *
+     * @param a Argument a
+     * @param x Argument x
+     * @return upper gamma value
+     */
+    static double tgamma(double a, double x) {
+        return gammaIncompleteImp(a, x, false, true, Policy.getDefault());
+    }
+
+    /**
+     * Full upper incomplete gamma.
+     *
+     * @param a Argument a
+     * @param x Argument x
+     * @param policy Function evaluation policy
+     * @return upper gamma value
+     */
+    static double tgamma(double a, double x, Policy policy) {
+        return gammaIncompleteImp(a, x, false, true, policy);
+    }
+
+    /**
+     * Full lower incomplete gamma.
+     *
+     * @param a Argument a
+     * @param x Argument x
+     * @return lower gamma value
+     */
+    static double tgammaLower(double a, double x) {
+        return gammaIncompleteImp(a, x, false, false, Policy.getDefault());
+    }
+
+    /**
+     * Full lower incomplete gamma.
+     *
+     * @param a Argument a
+     * @param x Argument x
+     * @param policy Function evaluation policy
+     * @return lower gamma value
+     */
+    static double tgammaLower(double a, double x, Policy policy) {
+        return gammaIncompleteImp(a, x, false, false, policy);
+    }
+
+    /**
+     * Regularised upper incomplete gamma.
+     *
+     * @param a Argument a
+     * @param x Argument x
+     * @return q
+     */
+    static double gammaQ(double a, double x) {
+        return gammaIncompleteImp(a, x, true, true, Policy.getDefault());
+    }
+
+    /**
+     * Regularised upper incomplete gamma.
+     *
+     * @param a Argument a
+     * @param x Argument x
+     * @param policy Function evaluation policy
+     * @return q
+     */
+    static double gammaQ(double a, double x, Policy policy) {
+        return gammaIncompleteImp(a, x, true, true, policy);
+    }
+
+    /**
+     * Regularised lower incomplete gamma.
+     *
+     * @param a Argument a
+     * @param x Argument x
+     * @return p
+     */
+    static double gammaP(double a, double x) {
+        return gammaIncompleteImp(a, x, true, false, Policy.getDefault());
+    }
+
+    /**
+     * Regularised lower incomplete gamma.
+     *
+     * @param a Argument a
+     * @param x Argument x
+     * @param policy Function evaluation policy
+     * @return p
+     */
+    static double gammaP(double a, double x, Policy policy) {
+        return gammaIncompleteImp(a, x, true, false, policy);
+    }
+
+    /**
+     * Derivative of the regularised lower incomplete gamma.
+     * <p>\( \frac{e^{-x} x^{a-1}}{\Gamma(a)} \)
+     *
+     * <p>Adapted from {@code boost::math::detail::gamma_p_derivative_imp}
+     *
+     * @param a Argument a
+     * @param x Argument x
+     * @return p derivative
+     */
+    static double gammaPDerivative(double a, double x) {
+        //
+        // Usual error checks first:
+        //
+        if (Double.isNaN(a) || Double.isNaN(x) || a <= 0 || x < 0) {
+            return Double.NaN;
+        }
+        //
+        // Now special cases:
+        //
+        if (x == 0) {
+            return (a > 1) ? 0 : (a == 1) ? 1 : Double.POSITIVE_INFINITY;
+        }
+        //
+        // Normal case:
+        //
+        double f1 = regularisedGammaPrefix(a, x);
+        if (f1 == 0) {
+            // Underflow in calculation, use logs instead:
+            f1 = a * Math.log(x) - x - lgamma(a) - Math.log(x);
+            f1 = Math.exp(f1);
+        } else {
+            // Will overflow when (x < 1) && (Double.MAX_VALUE * x < f1).
+            // There is no exception for this case so just return the result.
+            f1 /= x;
+        }
+
+        return f1;
+    }
+
+    /**
+     * Main incomplete gamma entry point, handles all four incomplete gammas.
+     * Adapted from {@code boost::math::detail::gamma_incomplete_imp}.
+     *
+     * <p>The Boost code has a pointer {@code p_derivative} that can be set to the
+     * value of the derivative. This is used for the inverse incomplete
+     * gamma functions {@code gamma_(p|q)_inv_imp}. It is not required for the forward
+     * evaluation functions.
+     *
+     * @param a Argument a
+     * @param x Argument x
+     * @param normalised true to compute the regularised value
+     * @param invert true to compute the upper value Q (default is lower value P)
+     * @param pol Function evaluation policy
+     * @return gamma value
+     */
+    private static double gammaIncompleteImp(double a, double x,
+            boolean normalised, boolean invert, Policy pol) {
+        if (Double.isNaN(a) || Double.isNaN(x) || a <= 0 || x < 0) {
+            return Double.NaN;
+        }
+
+        double result = 0;
+
+        if (a >= MAX_FACTORIAL && !normalised) {
+            //
+            // When we're computing the non-normalized incomplete gamma
+            // and a is large the result is rather hard to compute unless
+            // we use logs. There are really two options - if x is a long
+            // way from a in value then we can reliably use methods 2 and 4
+            // below in logarithmic form and go straight to the result.
+            // Otherwise we let the regularized gamma take the strain
+            // (the result is unlikely to underflow in the central region anyway)
+            // and combine with lgamma in the hopes that we get a finite result.
+            //
+
+            if (invert && (a * 4 < x)) {
+                // This is method 4 below, done in logs:
+                result = a * Math.log(x) - x;
+                result += Math.log(upperGammaFraction(a, x, pol));
+            } else if (!invert && (a > 4 * x)) {
+                // This is method 2 below, done in logs:
+                result = a * Math.log(x) - x;
+                result += Math.log(lowerGammaSeries(a, x, 0, pol) / a);
+            } else {
+                result = gammaIncompleteImp(a, x, true, invert, pol);
+                if (result == 0) {
+                    if (invert) {
+                        // Try http://functions.wolfram.com/06.06.06.0039.01
+                        result = 1 + 1 / (12 * a) + 1 / (288 * a * a);
+                        result = Math.log(result) - a + (a - 0.5f) * Math.log(a) + LOG_ROOT_TWO_PI;
+                    } else {
+                        // This is method 2 below, done in logs, we're really outside the
+                        // range of this method, but since the result is almost certainly
+                        // infinite, we should probably be OK:
+                        result = a * Math.log(x) - x;
+                        result += Math.log(lowerGammaSeries(a, x, 0, pol) / a);
+                    }
+                } else {
+                    result = Math.log(result) + lgamma(a);
+                }
+            }
+            // If result is > log(MAX_VALUE) the result will overflow.
+            // There is no exception for this case so just return the result.
+            return Math.exp(result);
+        }
+
+        boolean isInt;
+        boolean isHalfInt;
+        // Update. x must be safe for exp(-x). Change to -x > LOG_MIN_VALUE.
+        final boolean isSmallA = (a < 30) && (a <= x + 1) && (-x > LOG_MIN_VALUE);
+        if (isSmallA) {
+            final double fa = Math.floor(a);
+            isInt = fa == a;
+            isHalfInt = !isInt && (Math.abs(fa - a) == 0.5f);
+        } else {
+            isInt = isHalfInt = false;
+        }
+
+        int evalMethod;
+
+        if (isInt && (x > 0.6)) {
+            // calculate Q via finite sum:
+            invert = !invert;
+            evalMethod = 0;
+        } else if (isHalfInt && (x > 0.2)) {
+            // calculate Q via finite sum for half integer a:
+            invert = !invert;
+            evalMethod = 1;
+        } else if ((x < ROOT_EPSILON) && (a > 1)) {
+            evalMethod = 6;
+        } else if ((x > 1000) && (a < x * 0.75f)) {
+            // Note:
+            // The branch is used in Boost when:
+            // ((x > 1000) && ((a < x) || (Math.abs(a - 50) / x < 1)))
+            //
+            // This case was added after Boost 1_68_0.
+            // See: https://github.com/boostorg/math/issues/168
+            //
+            // When using only double precision for the evaluation
+            // it is a source of error when a ~ z as the asymptotic approximation
+            // sums terms t_n+1 = t_n * (a - n - 1) / z starting from t_0 = 1.
+            // These terms are close to 1 when a ~ z and the sum has many terms
+            // with reduced precision.
+            // This has been updated to allow only cases with fast convergence.
+            // It will be used when x -> infinity and a << x.
+
+            // calculate Q via asymptotic approximation:
+            invert = !invert;
+            evalMethod = 7;
+
+        } else if (x < 0.5) {
+            //
+            // Changeover criterion chosen to give a changeover at Q ~ 0.33
+            //
+            if (-0.4 / Math.log(x) < a) {
+                // Compute P
+                evalMethod = 2;
+            } else {
+                evalMethod = 3;
+            }
+        } else if (x < 1.1) {
+            //
+            // Changover here occurs when P ~ 0.75 or Q ~ 0.25:
+            //
+            if (x * 0.75f < a) {
+                // Compute P
+                evalMethod = 2;
+            } else {
+                evalMethod = 3;
+            }
+        } else {
+            //
+            // Begin by testing whether we're in the "bad" zone
+            // where the result will be near 0.5 and the usual
+            // series and continued fractions are slow to converge:
+            //
+            boolean useTemme = false;
+            if (normalised && (a > 20)) {
+                final double sigma = Math.abs((x - a) / a);
+                if (a > 200) {
+                    //
+                    // This limit is chosen so that we use Temme's expansion
+                    // only if the result would be larger than about 10^-6.
+                    // Below that the regular series and continued fractions
+                    // converge OK, and if we use Temme's method we get increasing
+                    // errors from the dominant erfc term as its (inexact) argument
+                    // increases in magnitude.
+                    //
+                    if (20 / a > sigma * sigma) {
+                        useTemme = true;
+                    }
+                } else {
+                    // Note in this zone we can't use Temme's expansion for
+                    // types longer than an 80-bit real:
+                    // it would require too many terms in the polynomials.
+                    if (sigma < 0.4) {
+                        useTemme = true;
+                    }
+                }
+            }
+            if (useTemme) {
+                evalMethod = 5;
+            } else {
+                //
+                // Regular case where the result will not be too close to 0.5.
+                //
+                // Changeover here occurs at P ~ Q ~ 0.5
+                // Note that series computation of P is about x2 faster than continued fraction
+                // calculation of Q, so try and use the CF only when really necessary,
+                // especially for small x.
+                //
+                if (x - (1 / (3 * x)) < a) {
+                    evalMethod = 2;
+                } else {
+                    evalMethod = 4;
+                    invert = !invert;
+                }
+            }
+        }
+
+        switch (evalMethod) {
+        case 0:
+            result = finiteGammaQ(a, x);
+            if (!normalised) {
+                result *= tgamma(a);
+            }
+            break;
+        case 1:
+            result = finiteHalfGammaQ(a, x);
+            if (!normalised) {
+                result *= tgamma(a);
+            }
+            break;
+        case 2:
+            // Compute P:
+            result = normalised ? regularisedGammaPrefix(a, x) : fullIgammaPrefix(a, x);
+            if (result != 0) {
+                //
+                // If we're going to be inverting the result then we can
+                // reduce the number of series evaluations by quite
+                // a few iterations if we set an initial value for the
+                // series sum based on what we'll end up subtracting it from
+                // at the end.
+                // Have to be careful though that this optimization doesn't
+                // lead to spurious numeric overflow. Note that the
+                // scary/expensive overflow checks below are more often
+                // than not bypassed in practice for "sensible" input
+                // values:
+                //
+
+                double initValue = 0;
+                boolean optimisedInvert = false;
+                if (invert) {
+                    initValue = normalised ? 1 : tgamma(a);
+                    if (normalised || (result >= 1) || (Double.MAX_VALUE * result > initValue)) {
+                        initValue /= result;
+                        if (normalised || (a < 1) || (Double.MAX_VALUE / a > initValue)) {
+                            initValue *= -a;
+                            optimisedInvert = true;
+                        } else {
+                            initValue = 0;
+                        }
+                    } else {
+                        initValue = 0;
+                    }
+                }
+                result *= lowerGammaSeries(a, x, initValue, pol) / a;
+                if (optimisedInvert) {
+                    invert = false;
+                    result = -result;
+                }
+            }
+            break;
+        case 3:
+            // Compute Q:
+            invert = !invert;
+            final double[] g = {0};
+            result = tgammaSmallUpperPart(a, x, pol, g, invert);
+            invert = false;
+            if (normalised) {
+                // Addition to the Boost code:
+                if (g[0] == Double.POSITIVE_INFINITY) {
+                    // Very small a will overflow gamma(a). Resort to logs.
+                    // This method requires improvement as the error is very large.
+                    // It is better than returning zero for a non-zero result.
+                    result = Math.exp(Math.log(result) - lgamma(a));
+                } else {
+                    result /= g[0];
+                }
+            }
+            break;
+        case 4:
+            // Compute Q:
+            result = normalised ? regularisedGammaPrefix(a, x) : fullIgammaPrefix(a, x);
+            if (result != 0) {
+                result *= upperGammaFraction(a, x, pol);
+            }
+            break;
+        case 5:
+            // Call 53-bit version
+            result = igammaTemmeLarge(a, x);
+            if (x >= a) {
+                invert = !invert;
+            }
+            break;
+        case 6:
+            // x is so small that P is necessarily very small too, use
+            // http://functions.wolfram.com/GammaBetaErf/GammaRegularized/06/01/05/01/01/
+            if (normalised) {
+                // If tgamma overflows then result = 0
+                result = Math.pow(x, a) / tgamma(a + 1);
+            } else {
+                result = Math.pow(x, a) / a;
+            }
+            result *= 1 - a * x / (a + 1);
+            break;
+        case 7:
+        default:
+            // x is large,
+            // Compute Q:
+            result = normalised ? regularisedGammaPrefix(a, x) : fullIgammaPrefix(a, x);
+            result /= x;
+            if (result != 0) {
+                result *= incompleteTgammaLargeX(a, x, pol);
+            }
+            break;
+        }
+
+        if (normalised && (result > 1)) {
+            result = 1;
+        }
+        if (invert) {
+            final double gam = normalised ? 1 : tgamma(a);
+            result = gam - result;
+        }
+
+        return result;
+    }
+
+    /**
+     * Upper gamma fraction.
+     * Multiply result by z^a * e^-z to get the full
+     * upper incomplete integral.  Divide by tgamma(z)
+     * to normalise.
+     *
+     * @param a Argument a
+     * @param z Argument z
+     * @param pol Function evaluation policy
+     * @return upper gamma fraction
+     */
+    // This is package-private for testing
+    static double upperGammaFraction(double a, double z, Policy pol) {
+        final double eps = pol.getEps();
+        final int maxIterations = pol.getMaxIterations();
+
+        // This is computing:
+        //              1
+        // ------------------------------
+        // b0 + a1 / (b1 +     a2       )
+        //                 -------------
+        //                 b2 +    a3
+        //                      --------
+        //                      b3 + ...
+        //
+        // b0 = z - a + 1
+        // a1 = a - 1
+        //
+        // It can be done several ways with variations in accuracy.
+        // The current implementation has the best accuracy and matches the Boost code.
+
+        final double zma1 = z - a + 1;
+
+        final Supplier<Coefficient> gen = new Supplier<Coefficient>() {
+            /** Iteration. */
+            private int k;
+
+            @Override
+            public Coefficient get() {
+                ++k;
+                return Coefficient.of(k * (a - k), zma1 + 2.0 * k);
+            }
+        };
+
+        return 1 / GeneralizedContinuedFraction.value(zma1, gen, eps, maxIterations);
+    }
+
+    /**
+     * Upper gamma fraction for integer a.
+     * Called when a < 30 and -x > LOG_MIN_VALUE.
+     *
+     * @param a Argument a (assumed to be small)
+     * @param x Argument x
+     * @return upper gamma fraction
+     */
+    private static double finiteGammaQ(double a, double x) {
+        //
+        // Calculates normalised Q when a is an integer:
+        //
+
+        // Update:
+        // Assume -x > log min value and no underflow to zero.
+
+        double sum = Math.exp(-x);
+        double term = sum;
+        for (int n = 1; n < a; ++n) {
+            term /= n;
+            term *= x;
+            sum += term;
+        }
+        return sum;
+    }
+
+    /**
+     * Upper gamma fraction for half integer a.
+     * Called when a < 30 and -x > LOG_MIN_VALUE.
+     *
+     * @param a Argument a (assumed to be small)
+     * @param x Argument x
+     * @return upper gamma fraction
+     */
+    private static double finiteHalfGammaQ(double a, double x) {
+        //
+        // Calculates normalised Q when a is a half-integer:
+        //
+
+        // Update:
+        // Assume -x > log min value:
+        // erfc(sqrt(708)) = erfc(26.6) => erfc has a non-zero value
+
+        double e = BoostErf.erfc(Math.sqrt(x));
+        if (a > 1) {
+            double term = Math.exp(-x) / Math.sqrt(Math.PI * x);
+            term *= x;
+            term /= 0.5;
+            double sum = term;
+            for (int n = 2; n < a; ++n) {
+                term /= n - 0.5;
+                term *= x;
+                sum += term;
+            }
+            e += sum;
+        }
+        return e;
+    }
+
+    /**
+     * Lower gamma series.
+     * Multiply result by ((z^a) * (e^-z) / a) to get the full
+     * lower incomplete integral. Then divide by tgamma(a)
+     * to get the normalised value.
+     *
+     * @param a Argument a
+     * @param z Argument z
+     * @param initValue Initial value
+     * @param pol Function evaluation policy
+     * @return lower gamma series
+     */
+    // This is package-private for testing
+    static double lowerGammaSeries(double a, double z, double initValue, Policy pol) {
+        final double eps = pol.getEps();
+        final int maxIterations = pol.getMaxIterations();
+
+        // Lower gamma series representation.
+        final DoubleSupplier gen = new DoubleSupplier() {
+            /** Next result. */
+            private double result = 1;
+            /** Iteration. */
+            private int n;
+
+            @Override
+            public double getAsDouble() {
+                final double r = result;
+                n++;
+                result *= z / (a + n);
+                return r;
+            }
+        };
+
+        return BoostTools.kahanSumSeries(gen, eps, maxIterations, initValue);
+    }
+
+    /**
+     * Upper gamma fraction for very small a.
+     *
+     * @param a Argument a (assumed to be small)
+     * @param x Argument x
+     * @param pol Function evaluation policy
+     * @param pgam set to value of gamma(a) on output
+     * @param invert true to invert the result
+     * @return upper gamma fraction
+     */
+    private static double tgammaSmallUpperPart(double a, double x, Policy pol, double[] pgam, boolean invert) {
+        //
+        // Compute the full upper fraction (Q) when a is very small:
+        //
+        double result;
+        result = tgamma1pm1(a);
+
+        // Note: Replacing this with tgamma(a) does not reduce error on current test data.
+
+        // gamma(1+z) = z gamma(z)
+        // pgam[0] == gamma(a)
+        pgam[0] = (result + 1) / a;
+
+        double p = BoostMath.powm1(x, a);
+        result -= p;
+        result /= a;
+        // Removed subtraction of 10 from this value
+        final int maxIter = pol.getMaxIterations();
+        p += 1;
+        final double initValue = invert ? pgam[0] : 0;
+
+        // Series representation for upper fraction when z is small.
+        final DoubleSupplier gen = new DoubleSupplier() {
+            /** Result term. */
+            private double result = -x;
+            /** Argument x (this is negated on purpose). */
+            private final double z = -x;
+            /** Iteration. */
+            private int n = 1;
+
+            @Override
+            public double getAsDouble() {
+                final double r = result / (a + n);
+                n++;
+                result = result * z / n;
+                return r;
+            }
+        };
+
+        result = -p * BoostTools.kahanSumSeries(gen, pol.getEps(), maxIter, (initValue - result) / p);
+        if (invert) {
+            result = -result;
+        }
+        return result;
+    }
+
+    /**
+     * Calculate power term prefix (z^a)(e^-z) used in the non-normalised
+     * incomplete gammas.
+     *
+     * @param a Argument a
+     * @param z Argument z
+     * @return incomplete gamma prefix
+     */
+    private static double fullIgammaPrefix(double a, double z) {
+        if (z > Double.MAX_VALUE) {
+            return 0;
+        }
+        final double alz = a * Math.log(z);
+        double prefix;
+
+        if (z >= 1) {
+            if ((alz < LOG_MAX_VALUE) && (-z > LOG_MIN_VALUE)) {
+                prefix = Math.pow(z, a) * Math.exp(-z);
+            } else if (a >= 1) {
+                prefix = Math.pow(z / Math.exp(z / a), a);
+            } else {
+                prefix = Math.exp(alz - z);
+            }
+        } else {
+            if (alz > LOG_MIN_VALUE) {
+                prefix = Math.pow(z, a) * Math.exp(-z);
+            } else {
+                // Updated to remove unreachable final branch using Math.exp(alz - z).
+                // This branch requires (z / a < LOG_MAX_VALUE) to avoid overflow in exp.
+                // At this point:
+                // 1. log(z) is negative;
+                // 2. a * log(z) <= -708 requires a > -708 / log(z).
+                // For any z < 1: -708 / log(z) is > z. Thus a is > z and
+                // z / a < LOG_MAX_VALUE is always true.
+                prefix = Math.pow(z / Math.exp(z / a), a);
+            }
+        }
+        // Removed overflow check. Return infinity if it occurs.
+        return prefix;
+    }
+
+    /**
+     * Compute (z^a)(e^-z)/tgamma(a).
+     * <p>Most of the error occurs in this function.
+     *
+     * @param a Argument a
+     * @param z Argument z
+     * @return regularized gamma prefix
+     */
+    // This is package-private for testing
+    static double regularisedGammaPrefix(double a, double z) {
+        if (z >= Double.MAX_VALUE) {
+            return 0;
+        }
+
+        // Update this condition from: a < 1
+        if (a <= 1) {
+            //
+            // We have to treat a < 1 as a special case because our Lanczos
+            // approximations are optimised against the factorials with a > 1,
+            // and for high precision types especially (128-bit reals for example)
+            // very small values of a can give rather erroneous results for gamma
+            // unless we do this:
+            //
+            // Boost todo: is this still required? Lanczos approx should be better now?
+            //
+
+            // Update this condition from: z <= LOG_MIN_VALUE
+            // Require exp(-z) to not underflow:
+            // -z > log(min_value)
+            if (-z <= LOG_MIN_VALUE) {
+                // Oh dear, have to use logs, should be free of cancellation errors though:
+                return Math.exp(a * Math.log(z) - z - lgamma(a));
+            }
+            // direct calculation, no danger of overflow as gamma(a) < 1/a
+            // for small a.
+            return Math.pow(z, a) * Math.exp(-z) / tgamma(a);
+        }
+
+        //
+        // For smallish a and x combining the power terms with the Lanczos approximation
+        // gives the greatest accuracy
+        //
+
+        final double agh = a + Lanczos.gmh();
+        double prefix;
+        final double d = ((z - a) - Lanczos.gmh()) / agh;
+
+        if ((Math.abs(d * d * a) <= 100) && (a > 150)) {
+            // special case for large a and a ~ z.
+            // When a and x are large, we end up with a very large exponent with a base near one:
+            // this will not be computed accurately via the pow function, and taking logs simply
+            // leads to cancellation errors.
+            prefix = a * SpecialMath.log1pmx(d) + z * -Lanczos.gmh() / agh;
+            prefix = Math.exp(prefix);
+        } else {
+            // Update to the Boost code.
+            // Use some of the logic from fullIgammaPrefix(a, z) to use the direct
+            // computation if it is valid. Assuming pow and exp are accurate to 1 ULP it
+            // puts most of the the error in evaluation of tgamma(a). This is accurate
+            // enough that this reduces max error on the current test data.
+            //
+            // Overflow cases fall-through to the Lanczos approximation that incorporates
+            // the pow and exp terms used in the tgamma(a) computation with the terms
+            // z^a and e^-z into a single evaluation of pow and exp. See equation 15:
+            // https://www.boost.org/doc/libs/1_77_0/libs/math/doc/html/math_toolkit/sf_gamma/igamma.html
+            if (a <= MAX_GAMMA_Z) {
+                final double alz1 = a * Math.log(z);
+                if (z >= 1) {
+                    if ((alz1 < LOG_MAX_VALUE) && (-z > LOG_MIN_VALUE)) {
+                        return Math.pow(z, a) * Math.exp(-z) / tgamma(a);
+                    }
+                } else if (alz1 > LOG_MIN_VALUE) {
+                    return Math.pow(z, a) * Math.exp(-z) / tgamma(a);
+                }
+            }
+
+            //
+            // general case.
+            // direct computation is most accurate, but use various fallbacks
+            // for different parts of the problem domain:
+            //
+
+            final double alz = a * Math.log(z / agh);
+            final double amz = a - z;
+            if ((Math.min(alz, amz) <= LOG_MIN_VALUE) || (Math.max(alz, amz) >= LOG_MAX_VALUE)) {
+                final double amza = amz / a;
+                if ((Math.min(alz, amz) / 2 > LOG_MIN_VALUE) && (Math.max(alz, amz) / 2 < LOG_MAX_VALUE)) {
+                    // compute square root of the result and then square it:
+                    final double sq = Math.pow(z / agh, a / 2) * Math.exp(amz / 2);
+                    prefix = sq * sq;
+                } else if ((Math.min(alz, amz) / 4 > LOG_MIN_VALUE) &&
+                        (Math.max(alz, amz) / 4 < LOG_MAX_VALUE) && (z > a)) {
+                    // compute the 4th root of the result then square it twice:
+                    final double sq = Math.pow(z / agh, a / 4) * Math.exp(amz / 4);
+                    prefix = sq * sq;
+                    prefix *= prefix;
+                } else if ((amza > LOG_MIN_VALUE) && (amza < LOG_MAX_VALUE)) {
+                    prefix = Math.pow((z * Math.exp(amza)) / agh, a);
+                } else {
+                    prefix = Math.exp(alz + amz);
+                }
+            } else {
+                prefix = Math.pow(z / agh, a) * Math.exp(amz);
+            }
+        }
+        prefix *= Math.sqrt(agh / Math.E) / Lanczos.lanczosSumExpGScaled(a);
+        return prefix;
+    }
+
+    /**
+     * Implements the asymptotic expansions of the incomplete
+     * gamma functions P(a, x) and Q(a, x), used when a is large and
+     * x ~ a.
+     *
+     * <p>The primary reference is:
+     * <pre>
+     * "The Asymptotic Expansion of the Incomplete Gamma Functions"
+     * N. M. Temme.
+     * Siam J. Math Anal. Vol 10 No 4, July 1979, p757.
+     * </pre>
+     *
+     * <p>A different way of evaluating these expansions,
+     * plus a lot of very useful background information is in:
+     * <pre>
+     * "A Set of Algorithms For the Incomplete Gamma Functions."
+     * N. M. Temme.
+     * Probability in the Engineering and Informational Sciences,
+     * 8, 1994, 291.
+     * </pre>
+     *
+     * <p>An alternative implementation is in:
+     * <pre>
+     * "Computation of the Incomplete Gamma Function Ratios and their Inverse."
+     * A. R. Didonato and A. H. Morris.
+     * ACM TOMS, Vol 12, No 4, Dec 1986, p377.
+     * </pre>
+     *
+     * <p>This is a port of the function accurate for 53-bit mantissas
+     * (IEEE double precision or 10^-17). To understand the code, refer to Didonato
+     * and Morris, from Eq 17 and 18 onwards.
+     *
+     * <p>The coefficients used here are not taken from Didonato and Morris:
+     * the domain over which these expansions are used is slightly different
+     * to theirs, and their constants are not quite accurate enough for
+     * 128-bit long doubles.  Instead the coefficients were calculated
+     * using the methods described by Temme p762 from Eq 3.8 onwards.
+     * The values obtained agree with those obtained by Didonato and Morris
+     * (at least to the first 30 digits that they provide).
+     * At double precision the degrees of polynomial required for full
+     * machine precision are close to those recommended to Didonato and Morris,
+     * but of course many more terms are needed for larger types.
+     *
+     * <p>Adapted from {@code boost/math/special_functions/detail/igamma_large.hpp}.
+     *
+     * @param a the a
+     * @param x the x
+     * @return the double
+     */
+    // This is package-private for testing
+    static double igammaTemmeLarge(double a, double x) {
+        final double sigma = (x - a) / a;
+        final double phi = -SpecialMath.log1pmx(sigma);
+        final double y = a * phi;
+        double z = Math.sqrt(2 * phi);
+        if (x < a) {
+            z = -z;
+        }
+
+        // The following polynomials are evaluated with a loop
+        // with Horner's method. Variations exist using
+        // a second order Horner's method with an unrolled loop.
+        // These are chosen in Boost based on the C++ compiler.
+        // For example:
+        // boost/math/tools/detail/polynomial_horner1_15.hpp
+        // boost/math/tools/detail/polynomial_horner2_15.hpp
+        // boost/math/tools/detail/polynomial_horner3_15.hpp
+
+        final double[] workspace = new double[10];
+
+        final double[] C0 = {
+            -0.33333333333333333,
+            0.083333333333333333,
+            -0.014814814814814815,
+            0.0011574074074074074,
+            0.0003527336860670194,
+            -0.00017875514403292181,
+            0.39192631785224378e-4,
+            -0.21854485106799922e-5,
+            -0.185406221071516e-5,
+            0.8296711340953086e-6,
+            -0.17665952736826079e-6,
+            0.67078535434014986e-8,
+            0.10261809784240308e-7,
+            -0.43820360184533532e-8,
+            0.91476995822367902e-9,
+        };
+        workspace[0] = BoostTools.evaluatePolynomial(C0, z);
+
+        final double[] C1 = {
+            -0.0018518518518518519,
+            -0.0034722222222222222,
+            0.0026455026455026455,
+            -0.00099022633744855967,
+            0.00020576131687242798,
+            -0.40187757201646091e-6,
+            -0.18098550334489978e-4,
+            0.76491609160811101e-5,
+            -0.16120900894563446e-5,
+            0.46471278028074343e-8,
+            0.1378633446915721e-6,
+            -0.5752545603517705e-7,
+            0.11951628599778147e-7,
+        };
+        workspace[1] = BoostTools.evaluatePolynomial(C1, z);
+
+        final double[] C2 = {
+            0.0041335978835978836,
+            -0.0026813271604938272,
+            0.00077160493827160494,
+            0.20093878600823045e-5,
+            -0.00010736653226365161,
+            0.52923448829120125e-4,
+            -0.12760635188618728e-4,
+            0.34235787340961381e-7,
+            0.13721957309062933e-5,
+            -0.6298992138380055e-6,
+            0.14280614206064242e-6,
+        };
+        workspace[2] = BoostTools.evaluatePolynomial(C2, z);
+
+        final double[] C3 = {
+            0.00064943415637860082,
+            0.00022947209362139918,
+            -0.00046918949439525571,
+            0.00026772063206283885,
+            -0.75618016718839764e-4,
+            -0.23965051138672967e-6,
+            0.11082654115347302e-4,
+            -0.56749528269915966e-5,
+            0.14230900732435884e-5,
+        };
+        workspace[3] = BoostTools.evaluatePolynomial(C3, z);
+
+        final double[] C4 = {
+            -0.0008618882909167117,
+            0.00078403922172006663,
+            -0.00029907248030319018,
+            -0.14638452578843418e-5,
+            0.66414982154651222e-4,
+            -0.39683650471794347e-4,
+            0.11375726970678419e-4,
+        };
+        workspace[4] = BoostTools.evaluatePolynomial(C4, z);
+
+        final double[] C5 = {
+            -0.00033679855336635815,
+            -0.69728137583658578e-4,
+            0.00027727532449593921,
+            -0.00019932570516188848,
+            0.67977804779372078e-4,
+            0.1419062920643967e-6,
+            -0.13594048189768693e-4,
+            0.80184702563342015e-5,
+            -0.22914811765080952e-5,
+        };
+        workspace[5] = BoostTools.evaluatePolynomial(C5, z);
+
+        final double[] C6 = {
+            0.00053130793646399222,
+            -0.00059216643735369388,
+            0.00027087820967180448,
+            0.79023532326603279e-6,
+            -0.81539693675619688e-4,
+            0.56116827531062497e-4,
+            -0.18329116582843376e-4,
+        };
+        workspace[6] = BoostTools.evaluatePolynomial(C6, z);
+
+        final double[] C7 = {
+            0.00034436760689237767,
+            0.51717909082605922e-4,
+            -0.00033493161081142236,
+            0.0002812695154763237,
+            -0.00010976582244684731,
+        };
+        workspace[7] = BoostTools.evaluatePolynomial(C7, z);
+
+        final double[] C8 = {
+            -0.00065262391859530942,
+            0.00083949872067208728,
+            -0.00043829709854172101,
+        };
+        workspace[8] = BoostTools.evaluatePolynomial(C8, z);
+        workspace[9] = -0.00059676129019274625;
+
+        double result = BoostTools.evaluatePolynomial(workspace, 1 / a);
+        result *= Math.exp(-y) / Math.sqrt(2 * Math.PI * a);
+        if (x < a) {
+            result = -result;
+        }
+
+        result += BoostErf.erfc(Math.sqrt(y)) / 2;
+
+        return result;
+    }
+
+    /**
+     * Incomplete tgamma for large X.
+     *
+     * <p>This summation is a source of error as the series starts at 1 and descends to zero.
+     * It can have thousands of iterations when a and z are large and close in value.
+     *
+     * @param a Argument a
+     * @param x Argument x
+     * @param pol Function evaluation policy
+     * @return incomplete tgamma
+     */
+    // This is package-private for testing
+    static double incompleteTgammaLargeX(double a, double x, Policy pol) {
+        final double eps = pol.getEps();
+        final int maxIterations = pol.getMaxIterations();
+
+        // Asymptotic approximation for large argument, see: https://dlmf.nist.gov/8.11#E2.
+        final DoubleSupplier gen = new DoubleSupplier() {
+            /** Result term. */
+            private double term = 1;
+            /** Iteration. */
+            private int n;
+
+            @Override
+            public double getAsDouble() {
+                final double result = term;
+                n++;
+                term *= (a - n) / x;
+                return result;
+            }
+        };
+
+        return BoostTools.kahanSumSeries(gen, eps, maxIterations);
+    }
+
+    /**
+     * Return true if the array is not null and has non-zero length.
+     *
+     * @param array Array
+     * @return true if a non-zero length array
+     */
+    private static boolean nonZeroLength(int[] array) {
+        return array != null && array.length != 0;
+    }
+}
diff --git a/commons-numbers-gamma/src/main/java/org/apache/commons/numbers/gamma/BoostMath.java b/commons-numbers-gamma/src/main/java/org/apache/commons/numbers/gamma/BoostMath.java
new file mode 100644
index 0000000..217b1ce
--- /dev/null
+++ b/commons-numbers-gamma/src/main/java/org/apache/commons/numbers/gamma/BoostMath.java
@@ -0,0 +1,76 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+//  (C) Copyright John Maddock 2006.
+//  Use, modification and distribution are subject to the
+//  Boost Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+package org.apache.commons.numbers.gamma;
+
+/**
+ * Math functions used by the Boost functions.
+ *
+ * <p>This code has been adapted from the <a href="https://www.boost.org/">Boost</a>
+ * {@code c++} implementations in {@code <boost/math/special_functions/>}.
+ * All work is copyright John Maddock 2006 and subject to the Boost Software License.
+ */
+public final class BoostMath {
+    /** Private constructor. */
+    private BoostMath() {
+        // intentionally empty.
+    }
+
+    /**
+     * Returns {@code pow(x, y) - 1}. This function is accurate when {@code x -> 1} or {@code y} is
+     * small.
+     *
+     * <p>Adapted from {@code boost/math/special_functions/powm1.hpp}. Explicit handling of
+     * edges cases (overflow, domain error) using the policy has been removed.
+     *
+     * @param x the x
+     * @param y the y
+     * @return {@code pow(x, y) - 1}
+     */
+    static double powm1(double x, double y) {
+        if (x > 0) {
+            // Check for small y or x close to 1.
+            // Require term < 0.5
+            // => log(x) * y < 0.5
+            // Assume log(x) ~ (x - 1) [true when x is close to 1]
+            // => |(x-1) * y| < 0.5
+
+            if ((Math.abs(y * (x - 1)) < 0.5) || (Math.abs(y) < 0.2)) {
+                // We don't have any good/quick approximation for log(x) * y
+                // so just try it and see:
+                final double l = y * Math.log(x);
+                if (l < 0.5) {
+                    return Math.expm1(l);
+                }
+                // fall through....
+            }
+        } else if (x < 0 &&
+                   // y had better be an integer:
+                   // x is negative.
+                   // pow(x, y) only allowed if y is an integer.
+                   // if y is even then we can invert non-zero finite x.
+                   Math.rint(y * 0.5) == y * 0.5) {
+            return powm1(-x, y);
+        }
+        return Math.pow(x, y) - 1;
+    }
+}
diff --git a/commons-numbers-gamma/src/main/java/org/apache/commons/numbers/gamma/BoostTools.java b/commons-numbers-gamma/src/main/java/org/apache/commons/numbers/gamma/BoostTools.java
new file mode 100644
index 0000000..f9ae9ad
--- /dev/null
+++ b/commons-numbers-gamma/src/main/java/org/apache/commons/numbers/gamma/BoostTools.java
@@ -0,0 +1,242 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+//  (C) Copyright John Maddock 2006.
+//  Use, modification and distribution are subject to the
+//  Boost Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+package org.apache.commons.numbers.gamma;
+
+import java.util.function.DoubleSupplier;
+
+/**
+ * Utility tools used by the Boost functions.
+ *
+ * <p>This code has been adapted from the <a href="https://www.boost.org/">Boost</a>
+ * {@code c++} implementations in {@code <boost/math/tools/>}.
+ * All work is copyright John Maddock 2006 and subject to the Boost Software License.
+ */
+public final class BoostTools {
+    /**
+     * The minimum epsilon value for relative error in the summation.
+     * Equal to Math.ulp(1.0) or 2^-52.
+     *
+     * <h2>Note</h2>
+     *
+     * <p>The summation will terminate when any additional terms are too small to
+     * change the sum. Assuming additional terms are reducing in magnitude this
+     * occurs when the term is 1 ULP from the sum:
+     * <pre>
+     * ulp(sum) >= term
+     * </pre>
+     *
+     * <p>The epsilon is used to set a configurable threshold using:
+     * <pre>
+     * sum * eps >= term
+     * </pre>
+     * <p>The minimum epsilon is the smallest value that will create a value
+     * {@code >= 1} ULP and {@code < 2} ULP of the sum. For any normal number the ULP
+     * of all values with the same exponent b is scalb(1.0, b - 52). This can
+     * be achieved by multiplication by 2^-52.
+     */
+    private static final double EPSILON = 0x1.0p-52;
+    /**
+     * The minimum epsilon value for relative error in the Kahan summation.
+     * This can be lower than {@link #EPSILON}. Set to 2^-62.
+     *
+     * <h2>Note</h2>
+     *
+     * <p>The Kahan summation uses a carry term to extend the precision of the sum.
+     * This extends the 53-bit mantissa by adding more bits to hold round-off error.
+     * Thus the term may effect the sum when it has a magnitude smaller than 1 ULP
+     * of the current sum. The epsilon can be lowered from 2^-52 to include the
+     * extra bits in the convergence criteria. The lower limit for the epsilon is
+     * 2^-104. Boost uses an epsilon specified as a number of bits of accuracy. Each
+     * lowering of the epsilon by a factor of 2 adds a guard digit to the sum.
+     * Slower converging series will benefit from a lower epsilon. This uses 2^-62
+     * to add 10 guard digits and allow testing of different thresholds when the
+     * Kahan summation is used, for example in the gamma function. Lowering the
+     * epsilon further is only of benefit if the terms can be computed exactly.
+     * Otherwise the rounding errors of the early terms affect the final result as
+     * much as the inclusion of extra guard digits.
+     */
+    private static final double KAHAN_EPSILON = 0x1.0p-62;
+    /** Message for failure to converge. */
+    private static final String MSG_FAILED_TO_CONVERGE = "Failed to converge within %d iterations";
+
+    /** Private constructor. */
+    private BoostTools() {
+        // intentionally empty.
+    }
+
+    /**
+     * Sum the series.
+     *
+     * <p>Adapted from {@code boost/math/tools/series.hpp}.
+     *
+     * @param func Series generator
+     * @param epsilon Maximum relative error allowed
+     * @param maxTerms Maximum number of terms
+     * @return result
+     */
+    static double sumSeries(DoubleSupplier func, double epsilon, int maxTerms) {
+        return sumSeries(func, epsilon, maxTerms, 0);
+    }
+
+    /**
+     * Sum the series.
+     *
+     * <p>Adapted from {@code boost/math/tools/series.hpp}.
+     *
+     * @param func Series generator
+     * @param epsilon Maximum relative error allowed
+     * @param maxTerms Maximum number of terms
+     * @param initValue Initial value
+     * @return result
+     */
+    static double sumSeries(DoubleSupplier func, double epsilon, int maxTerms, double initValue) {
+        // Note:
+        // The Boost code requires eps to be non-zero. It is created in the
+        // <boost/math/policies/policy.hpp> as a non-zero relative error term.
+        // An alternative termination condition with a divide is:
+        // (eps < Math.abs(nextTerm / result))
+        //
+        // Here the argument is checked against the minimum epsilon for a double
+        // to provide functional equivalence with the Boost policy.
+        // In the min eps case the loop terminates if the most recently added term is
+        // 0 or 1 ulp of the result. This condition is acceptable if the next
+        // computed term will be at most half of the most recent term (thus
+        // cannot be added to the current result).
+
+        final double eps = getEpsilon(epsilon, EPSILON);
+
+        int counter = maxTerms;
+
+        double result = initValue;
+        double nextTerm;
+        do {
+            nextTerm = func.getAsDouble();
+            result += nextTerm;
+        } while ((Math.abs(eps * result) < Math.abs(nextTerm)) && --counter > 0);
+
+        if (counter <= 0) {
+            throw new ArithmeticException(
+               String.format(MSG_FAILED_TO_CONVERGE, maxTerms));
+        }
+
+        return result;
+    }
+
+
+    /**
+     * Sum the series using Kahan summation.
+     *
+     * <p>Adapted from {@code boost/math/tools/series.hpp}.
+     *
+     * @param func Series generator
+     * @param epsilon Maximum relative error allowed
+     * @param maxTerms Maximum number of terms
+     * @return result
+     */
+    static double kahanSumSeries(DoubleSupplier func, double epsilon, int maxTerms) {
+        return kahanSumSeries(func, epsilon, maxTerms, 0);
+    }
+
+    /**
+     * Sum the series using Kahan summation.
+     *
+     * <p>Adapted from {@code boost/math/tools/series.hpp}.
+     *
+     * @param func Series generator
+     * @param epsilon Maximum relative error allowed
+     * @param maxTerms Maximum number of terms
+     * @param initValue Initial value
+     * @return result
+     */
+    static double kahanSumSeries(DoubleSupplier func, double epsilon, int maxTerms, double initValue) {
+        final double eps = getEpsilon(epsilon, KAHAN_EPSILON);
+
+        int counter = maxTerms;
+
+        // Kahan summation:
+        // https://en.wikipedia.org/wiki/Kahan_summation_algorithm
+        // This summation is accurate if the term is smaller in magnitude
+        // than the current sum. This is a condition required for the
+        // series termination thus the extended precision sum need not
+        // check magnitudes of terms to compute the carry.
+
+        double result = initValue;
+        double carry = 0;
+        double nextTerm;
+        do {
+            nextTerm = func.getAsDouble();
+            final double y = nextTerm - carry;
+            final double t = result + y;
+            carry = t - result;
+            carry -= y;
+            result = t;
+        } while ((Math.abs(eps * result) < Math.abs(nextTerm)) && --counter > 0);
+
+        if (counter <= 0) {
+            throw new ArithmeticException(
+               String.format(MSG_FAILED_TO_CONVERGE, maxTerms));
+        }
+
+        return result;
+    }
+
+    /**
+     * Gets the epsilon ensuring it satisfies the minimum allowed value.
+     *
+     * <p>This is returning the maximum of the two arguments.
+     * Do not use Math.max as it returns NaN if either value is NaN.
+     * In this case the desired result in the default minEpsilon, not NaN.
+     * Math.max will also check ordering when terms are equal to support
+     * -0.0 and 0.0. This does not apply here and a single conditional
+     * returns the desired result.
+     *
+     * @param epsilon Configured epsilon
+     * @param minEpsilon Minimum allowed epsilon
+     * @return the epsilon
+     */
+    private static double getEpsilon(double epsilon, double minEpsilon) {
+        return epsilon > minEpsilon ? epsilon : minEpsilon;
+    }
+
+    /**
+     * Evaluate the polynomial using Horner's method.
+     * The coefficients are used in descending order, for example a polynomial of order
+     * 3 requires 4 coefficients:
+     * <pre>
+     * f(x) = c[3] * x^3 + c[2] * x^2 + c[1] * x + c[0]
+     * </pre>
+     *
+     * @param c Polynomial coefficients (must have length > 0)
+     * @param x Argument x
+     * @return polynomial value
+     */
+    static double evaluatePolynomial(double[] c, double x) {
+        final int count = c.length;
+        double sum = c[count - 1];
+        for (int i = count - 2; i >= 0; --i) {
+            sum *= x;
+            sum += c[i];
+        }
+        return sum;
+    }
+}
diff --git a/commons-numbers-gamma/src/main/java/org/apache/commons/numbers/gamma/SpecialMath.java b/commons-numbers-gamma/src/main/java/org/apache/commons/numbers/gamma/SpecialMath.java
new file mode 100644
index 0000000..f57676f
--- /dev/null
+++ b/commons-numbers-gamma/src/main/java/org/apache/commons/numbers/gamma/SpecialMath.java
@@ -0,0 +1,218 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.numbers.gamma;
+
+/**
+ * Special math functions.
+ */
+public final class SpecialMath {
+    /** Minimum x for log1pmx(x). */
+    private static final double X_MIN = -1;
+    /** Low threshold to use log1p(x) - x. */
+    private static final double X_LOW = -0.79149064;
+    /** High threshold to use log1p(x) - x. */
+    private static final double X_HIGH = 1;
+    /** 2^-6. */
+    private static final double TWO_POW_M6 = 0x1.0p-6;
+    /** 2^-12. */
+    private static final double TWO_POW_M12 = 0x1.0p-12;
+    /** 2^-20. */
+    private static final double TWO_POW_M20 = 0x1.0p-20;
+    /** 2^-53. */
+    private static final double TWO_POW_M53 = 0x1.0p-53;
+
+    /** Private constructor. */
+    private SpecialMath() {
+        // intentionally empty.
+    }
+
+    /**
+     * Returns {@code log(1 + x) - x}. This function is accurate when {@code x -> 0}.
+     *
+     * <p>This function uses a Taylor series expansion when x is small ({@code |x| < 0.01}):
+     *
+     * <pre>
+     * ln(1 + x) - x = -x^2/2 + x^3/3 - x^4/4 + ...
+     * </pre>
+     *
+     * <p>or around 0 ({@code -0.791 <= x <= 1}):
+     *
+     * <pre>
+     * ln(x + a) = ln(a) + 2 [z + z^3/3 + z^5/5 + z^7/7 + ... ]
+     *
+     * z = x / (2a + x)
+     * </pre>
+     *
+     * <p>For a = 1:
+     *
+     * <pre>
+     * ln(x + 1) - x = -x + 2 [z + z^3/3 + z^5/5 + z^7/7 + ... ]
+     *               = z * (-x + 2z^2 [ 1/3 + z^2/5 + z^4/7 + ... ])
+     * </pre>
+     *
+     * <p>The code is based on the {@code log1pmx} documentation for the <a
+     * href="https://rdrr.io/rforge/DPQ/man/log1pmx.html">R DPQ package</a> with addition of the
+     * direct Taylor series for tiny x.
+     *
+     * <p>See Abramowitz, M. and Stegun, I. A. (1972) Handbook of Mathematical Functions. New York:
+     * Dover. Formulas 4.1.24 and 4.2.29, p.68. <a
+     * href="https://en.wikipedia.org/wiki/Abramowitz_and_Stegun">Wikipedia: Abramowitz_and_Stegun</a>
+     * provides links to the full text which is in public domain.
+     *
+     * @param x Value x
+     * @return {@code log(1 + x) - x}
+     */
+    static double log1pmx(double x) {
+        // -1 is the minimum supported value
+        if (x <= X_MIN) {
+            return x == X_MIN ? Double.NEGATIVE_INFINITY : Double.NaN;
+        }
+        // Use the thresholds documented in the R implementation
+        if (x < X_LOW || x > X_HIGH) {
+            return Math.log1p(x) - x;
+        }
+        final double a = Math.abs(x);
+
+        // Addition to the R version for small x.
+        // Use a direct Taylor series:
+        // ln(1 + x) = x - x^2/2 + x^3/3 - x^4/4 + ...
+        if (a < TWO_POW_M6) {
+            return log1pmxSmall(x, a);
+        }
+
+        // The use of the following series is fast converging:
+        // ln(x + 1) - x = -x + 2 [z + z^3/3 + z^5/5 + z^7/7 + ... ]
+        //               = z * (-x + 2z^2 [ 1/3 + z^2/5 + z^4/7 + ... ])
+        // z = x / (2 + x)
+        //
+        // Tests show this is more accurate when |x| > 1e-4 than the direct Taylor series.
+        // The direct series can be modified to sum multiple terms together for a small
+        // increase in precision to a closer match to this variation but the direct series
+        // takes approximately 3x longer to converge.
+
+        final double z = x / (2 + x);
+        final double zz = z * z;
+
+        // Series sum
+        // sum(k=0,...,Inf; zz^k/(3+k*2)) = 1/3 + zz/5 + zz^2/7 + zz^3/9 + ... )
+
+        double sum = 1.0 / 3;
+        double numerator = 1;
+        int denominator = 3;
+        for (;;) {
+            numerator *= zz;
+            denominator += 2;
+            final double sum2 = sum + numerator / denominator;
+            // Since |x| <= 1 the additional terms will reduce in magnitude.
+            // Iterate until convergence. Expected iterations:
+            // x      iterations
+            // -0.79  38
+            // -0.5   15
+            // -0.1    5
+            //  0.1    5
+            //  0.5   10
+            //  1.0   15
+            if (sum2 == sum) {
+                break;
+            }
+            sum = sum2;
+        }
+        return z * (2 * zz * sum - x);
+    }
+
+
+    /**
+     * Returns {@code log(1 + x) - x}. This function is accurate when
+     * {@code x -> 0}.
+     *
+     * <p>This function uses a Taylor series expansion when x is small
+     * ({@code |x| < 0.01}):
+     *
+     * <pre>
+     * ln(1 + x) - x = -x^2/2 + x^3/3 - x^4/4 + ...
+     * </pre>
+     *
+     * <p>No loop iterations are used as the series is directly expanded
+     * for a set number of terms based on the absolute value of x.
+     *
+     * @param x Value x (assumed to be small)
+     * @param a Absolute value of x
+     * @return {@code log(1 + x) - x}
+     */
+    private static double log1pmxSmall(double x, double a) {
+        // Use a direct Taylor series:
+        // ln(1 + x) = x - x^2/2 + x^3/3 - x^4/4 + ...
+        // Reverse the summation (small to large) for a marginal increase in precision.
+        // To stop the Taylor series the next term must be less than 1 ulp from the
+        // answer.
+        // x^n/n < |log(1+x)-x| * eps
+        // eps = machine epsilon = 2^-53
+        // x^n < |log(1+x)-x| * eps
+        // n < (log(|log(1+x)-x|) + log(eps)) / log(x)
+        // In practice this is a conservative limit.
+
+        final double x2 = x * x;
+
+        if (a < TWO_POW_M53) {
+            // Below machine epsilon. Addition of x^3/3 is not possible.
+            // Subtract from zero to prevent creating -0.0 for x=0.
+            return 0 - x2 / 2;
+        }
+
+        final double x4 = x2 * x2;
+
+        // +/-9.5367431640625e-07: log1pmx = -4.547470617660916e-13 :
+        // -4.5474764000725028e-13
+        // n = 4.69
+        if (a < TWO_POW_M20) {
+            // n=5
+            return x * x4 / 5 -
+                       x4 / 4 +
+                   x * x2 / 3 -
+                       x2 / 2;
+        }
+
+        // +/-2.44140625E-4: log1pmx = -2.9797472637290841e-08 : -2.9807173914456693e-08
+        // n = 6.49
+        if (a < TWO_POW_M12) {
+            // n=7
+            return x * x2 * x4 / 7 -
+                       x2 * x4 / 6 +
+                        x * x4 / 5 -
+                            x4 / 4 +
+                        x * x2 / 3 -
+                            x2 / 2;
+        }
+
+        // Assume |x| < 2^-6
+        // +/-0.015625: log1pmx = -0.00012081346403474586 : -0.00012335696813916864
+        // n = 10.9974
+
+        // n=11
+        final double x8 = x4 * x4;
+        return x * x2 * x8 / 11 -
+                   x2 * x8 / 10 +
+                    x * x8 /  9 -
+                        x8 /  8 +
+               x * x2 * x4 /  7 -
+                   x2 * x4 /  6 +
+                    x * x4 /  5 -
+                        x4 /  4 +
+                    x * x2 /  3 -
+                        x2 /  2;
+    }
+}
diff --git a/commons-numbers-gamma/src/test/java/org/apache/commons/numbers/gamma/BoostErfTest.java b/commons-numbers-gamma/src/test/java/org/apache/commons/numbers/gamma/BoostErfTest.java
index e171269..5fd4e78 100644
--- a/commons-numbers-gamma/src/test/java/org/apache/commons/numbers/gamma/BoostErfTest.java
+++ b/commons-numbers-gamma/src/test/java/org/apache/commons/numbers/gamma/BoostErfTest.java
@@ -135,7 +135,7 @@ class BoostErfTest {
         ERFC_INV_LIMIT(TestFunction.ERFC_INV, 1.2, 0.5);
 
         /** Sum of the squared ULP error and count n. */
-        private final RMS rms = new RMS();
+        private final TestUtils.ErrorStatistics stats = new TestUtils.ErrorStatistics();
 
         /** The function. */
         private final TestFunction fun;
@@ -175,25 +175,25 @@ class BoostErfTest {
          * @param ulp error in ulp
          */
         void addError(double ulp) {
-            rms.add(ulp);
+            stats.add(ulp);
         }
 
         /**
          * @return Root Mean Squared measured error
          */
         double getRMSError() {
-            return rms.getRMS();
+            return stats.getRMS();
         }
 
         /**
-         * @return maximum measured error
+         * @return maximum absolute measured error
          */
-        double getMaxError() {
-            return rms.getMax();
+        double getMaxAbsError() {
+            return stats.getMaxAbs();
         }
 
         /**
-         * @return maximum allowed error
+         * @return maximum allowed absolute error
          */
         double getTolerance() {
             return maxUlp;
@@ -207,54 +207,6 @@ class BoostErfTest {
         }
     }
 
-    /**
-     * Class to compute the root mean squared error (RMS).
-     * @see <a href="https://en.wikipedia.org/wiki/Root_mean_square">Wikipedia: RMS</a>
-     */
-    private static class RMS {
-        private double ss;
-        private double max;
-        private int n;
-
-        /**
-         * @param x Value (assumed to be positive)
-         */
-        void add(double x) {
-            // Overflow is not supported.
-            // Assume the expected and actual are quite close when measuring the RMS.
-            ss += x * x;
-            n++;
-            // Assume absolute error when detecting the maximum
-            max = max < x ? x : max;
-        }
-
-        /**
-         * Gets the maximum error.
-         *
-         * <p>This is not used for assertions. It can be used to set maximum ULP thresholds
-         * for test data if the TestUtils.assertEquals method is used with a large maxUlps
-         * to measure the ulp (and effectively ignore failures) and the maximum reported
-         * as the end of testing.
-         *
-         * @return maximum error
-         */
-        double getMax() {
-            return max;
-        }
-
-        /**
-         * Gets the root mean squared error (RMS).
-         *
-         * <p> Note: If no data has been added this will return 0/0 = nan.
-         * This prevents using in assertions without adding data.
-         *
-         * @return root mean squared error (RMS)
-         */
-        double getRMS() {
-            return Math.sqrt(ss / n);
-        }
-    }
-
     @ParameterizedTest
     @CsvSource({
         "-Infinity, -1",
@@ -515,7 +467,7 @@ class BoostErfTest {
             DoubleUnaryOperator fun,
             double low, double high, double increment,
             long tolerance, double rmsUlp) {
-        final RMS data = new RMS();
+        final TestUtils.ErrorStatistics data = new TestUtils.ErrorStatistics();
         for (double p = low; p <= high; p += increment) {
             final double pp = fun.applyAsDouble(p);
             TestUtils.assertEquals(p, pp, tolerance, ulp -> data.add(ulp), () -> name);
@@ -547,7 +499,7 @@ class BoostErfTest {
      */
     private static void assertRms(TestCase tc) {
         final double rms = tc.getRMSError();
-        debugRms(tc.toString(), tc.getMaxError(), rms);
+        debugRms(tc.toString(), tc.getMaxAbsError(), rms);
         Assertions.assertTrue(rms <= tc.getRmsTolerance(),
             () -> String.format("%s RMS %s < %s", tc, rms, tc.getRmsTolerance()));
     }
@@ -559,9 +511,9 @@ class BoostErfTest {
      * @param data Test data
      * @param rmsTolerance RMS tolerance
      */
-    private static void assertRms(String name, RMS data, double rmsTolerance) {
+    private static void assertRms(String name, TestUtils.ErrorStatistics data, double rmsTolerance) {
         final double rms = data.getRMS();
-        debugRms(name, data.getMax(), rms);
+        debugRms(name, data.getMaxAbs(), rms);
         Assertions.assertTrue(rms <= rmsTolerance,
             () -> String.format("%s RMS %s < %s", name, rms, rmsTolerance));
     }
diff --git a/commons-numbers-gamma/src/test/java/org/apache/commons/numbers/gamma/BoostGammaTest.java b/commons-numbers-gamma/src/test/java/org/apache/commons/numbers/gamma/BoostGammaTest.java
new file mode 100644
index 0000000..24b4500
--- /dev/null
+++ b/commons-numbers-gamma/src/test/java/org/apache/commons/numbers/gamma/BoostGammaTest.java
@@ -0,0 +1,1999 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.numbers.gamma;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.math.BigDecimal;
+import java.util.Arrays;
+import java.util.function.DoubleBinaryOperator;
+import java.util.function.DoubleUnaryOperator;
+import java.util.regex.Pattern;
+import org.apache.commons.numbers.gamma.BoostGamma.Lanczos;
+import org.apache.commons.numbers.gamma.BoostGamma.Policy;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.MethodOrderer;
+import org.junit.jupiter.api.Order;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestMethodOrder;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.CsvSource;
+import org.junit.jupiter.params.provider.EnumSource;
+import org.junit.jupiter.params.provider.EnumSource.Mode;
+import org.junit.jupiter.params.provider.ValueSource;
+
+/**
+ * Tests for {@link BoostGamma}. Special functions from {@link BoostMath} and {@link SpecialMath}
+ * are also tested as these are used within the {@link BoostGamma} class.
+ *
+ * <p>Note: Some resource data files used in these tests have been extracted
+ * from the Boost test files for the gamma functions.
+ */
+@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
+class BoostGammaTest {
+    /** All representable factorials. */
+    private static final double[] FACTORIAL = BoostGamma.getFactorials();
+    /** The threshold value for choosing the Lanczos approximation. */
+    private static final double LANCZOS_THRESHOLD = 20;
+    /** Value for the sqrt of the epsilon for relative error.
+     * This is equal to the Boost constant {@code boost::math::tools::root_epsilon<double>()}. */
+    private static final double ROOT_EPSILON = 1.4901161193847656E-8;
+    /** Approximate value for ln(Double.MAX_VALUE).
+     * This is equal to the Boost constant {@code boost::math::tools::log_max_value<double>()}. */
+    private static final int LOG_MAX_VALUE = 709;
+    /** Approximate value for ln(Double.MIN_VALUE).
+     * This is equal to the Boost constant {@code boost::math::tools::log_min_value<double>()}.
+     * No term {@code x} should be used in {@code exp(x)} if {@code x < LOG_MIN_VALUE} to avoid
+     * underflow to sub-normal or zero. */
+    private static final int LOG_MIN_VALUE = -708;
+    /** The largest factorial that can be represented as a double.
+     * This is equal to the Boost constant {@code boost::math::max_factorial<double>::value}. */
+    private static final int MAX_FACTORIAL = 170;
+    /** Euler's constant. */
+    private static final double EULER = 0.5772156649015328606065120900824024310;
+
+    /** The Boost 1_77_0 condition to use the asymptotic approximation. */
+    private static final DoubleDoubleBiPredicate USE_ASYM_APPROX =
+        (a, x) -> (x > 1000) && ((a < x) || (Math.abs(a - 50) / x < 1));
+    /** Predicate to not use the asymptotic approximation. */
+    private static final DoubleDoubleBiPredicate NO_ASYM_APPROX = (a, x) -> false;
+    /** Predicate to use the asymptotic approximation. */
+    private static final DoubleDoubleBiPredicate ASYM_APPROX = (a, x) -> true;
+
+    /** A predicate for two {@code double} arguments. */
+    private interface DoubleDoubleBiPredicate {
+        /**
+         * @param a Argument a
+         * @param b Argument b
+         * @return true if successful
+         */
+        boolean test(double a, double b);
+    }
+
+    /** Define the expected error for a test. */
+    private interface TestError {
+        /**
+         * @return maximum allowed error
+         */
+        double getTolerance();
+
+        /**
+         * @return maximum allowed RMS error
+         */
+        double getRmsTolerance();
+
+        /**
+         * @param name name of the test error (used to provide a name for {@link #toString()})
+         * @param tolerance maximum allowed error
+         * @param rmsTolerance maximum allowed RMS error
+         * @return the test error
+         */
+        static TestError of(String name, double tolerance, double rmsTolerance) {
+            return new TestError() {
+                @Override
+                public String toString() {
+                    return name;
+                }
+
+                @Override
+                public double getTolerance() {
+                    return tolerance;
+                }
+
+                @Override
+                public double getRmsTolerance() {
+                    return rmsTolerance;
+                }
+            };
+        }
+    }
+
+    /**
+     * Define the test cases for each resource file.
+     * This encapsulates the function to test, the expected maximum and RMS error, and
+     * the resource file containing the data.
+     *
+     * <h2>Note on accuracy</h2>
+     *
+     * <p>The Boost functions use the default policy of internal promotion
+     * of double to long double if it offers more precision. Code comments
+     * in the implementations for the maximum error are using the defaults with
+     * promotion enabled where the error is 'effectively zero'. Java does not
+     * support long double computation. Tolerances have been set to allow tests to
+     * pass. Spot checks on larger errors have been verified against the reference
+     * implementation compiled with promotion of double <strong>disabled</strong>.
+     *
+     * @see <a href="https://www.boost.org/doc/libs/1_77_0/libs/math/doc/html/math_toolkit/relative_error.html">Relative error</a>
+     * @see <a href="https://www.boost.org/doc/libs/1_77_0/libs/math/doc/html/math_toolkit/pol_tutorial/policy_tut_defaults.html">Policy defaults</a>
+     */
+    private enum TestCase implements TestError {
+        // Note:
+        // The original Boost tgamma function is not as accurate as the
+        // NSWC Library of Mathematics Subroutines in the range [-20, 20].
+        // The default implementation uses long double to compute and
+        // performs a narrowing cast to the double result. Without this
+        // feature the method accuracy is reduced.
+        // The code is here for testing.
+
+        /** gamma Boost near 0 data. */
+        TGAMMAO_NEAR_0(BoostGammaTest::tgammaOriginal, "gamma_near_0_data.csv", 3.3, 1.2),
+        /** gamma Boost near 1 data. */
+        TGAMMAO_NEAR_1(BoostGammaTest::tgammaOriginal, "gamma_near_1_data.csv", 3.3, 1.2),
+        /** gamma Boost near 2 data. */
+        TGAMMAO_NEAR_2(BoostGammaTest::tgammaOriginal, "gamma_near_2_data.csv", 2.9, 1.2),
+        /** gamma Boost near -10 data. */
+        TGAMMAO_NEAR_M10(BoostGammaTest::tgammaOriginal, "gamma_near_m10_data.csv", 2.5, 1.2),
+        /** gamma -20 to 0 data. */
+        TGAMMAO_M20_0(BoostGammaTest::tgammaOriginal, "gamma_m20_0_data.csv", 4.5, 1.4),
+        /** gamma 0 to 20 data. */
+        TGAMMAO_0_20(BoostGammaTest::tgammaOriginal, "gamma_0_20_data.csv", 3.2, 1.2),
+        /** gamma very near 0 data. */
+        TGAMMAO_VERY_NEAR_0(BoostGammaTest::tgammaOriginal, "gamma_very_near_0_data.csv", 3.3, 0.75),
+
+        /** gamma Boost factorial data. */
+        TGAMMA_FACTORIALS(BoostGamma::tgamma, "gamma_factorials_data.csv", 2.5, 0.8),
+        /** gamma Boost near 0 data. */
+        TGAMMA_NEAR_0(BoostGamma::tgamma, "gamma_near_0_data.csv", 1.6, 0.7),
+        /** gamma Boost near 1 data. */
+        TGAMMA_NEAR_1(BoostGamma::tgamma, "gamma_near_1_data.csv", 1.3, 0.7),
+        /** gamma Boost near 2 data. */
+        TGAMMA_NEAR_2(BoostGamma::tgamma, "gamma_near_2_data.csv", 1.1, 0.6),
+        /** gamma Boost near -10 data. */
+        TGAMMA_NEAR_M10(BoostGamma::tgamma, "gamma_near_m10_data.csv", 1.8, 0.7),
+        /** gamma Boost near -55 data. */
+        TGAMMA_NEAR_M55(BoostGamma::tgamma, "gamma_near_m55_data.csv", 2.5, 1.2),
+        /** gamma -20 to 0 data. */
+        TGAMMA_M20_0(BoostGamma::tgamma, "gamma_m20_0_data.csv", 3, 0.8),
+        /** gamma 0 to 20 data. */
+        TGAMMA_0_20(BoostGamma::tgamma, "gamma_0_20_data.csv", 2, 0.65),
+        /** gamma 20 to 150 data. */
+        TGAMMA_20_150(BoostGamma::tgamma, "gamma_20_150_data.csv", 3.8, 1.2),
+        /** gamma 150 to 171 data. */
+        TGAMMA_150_171(BoostGamma::tgamma, "gamma_150_171_data.csv", 3.2, 1.2),
+        /** gamma very near 0 data. */
+        TGAMMA_VERY_NEAR_0(BoostGamma::tgamma, "gamma_very_near_0_data.csv", 3.8, 0.7),
+
+        /** gamma Boost factorial data. */
+        LGAMMA_FACTORIALS(BoostGamma::lgamma, "gamma_factorials_data.csv", 2, 0.8, 0.1),
+        /** gamma Boost near 0 data. */
+        LGAMMA_NEAR_0(BoostGamma::lgamma, "gamma_near_0_data.csv", 2, 1.2, 0.5),
+        /** gamma Boost near 1 data. */
+        LGAMMA_NEAR_1(BoostGamma::lgamma, "gamma_near_1_data.csv", 2, 1.5, 0.7),
+        /** gamma Boost near 2 data. */
+        LGAMMA_NEAR_2(BoostGamma::lgamma, "gamma_near_2_data.csv", 2, 0.7, 0.2),
+        /** gamma Boost near -10 data. */
+        LGAMMA_NEAR_M10(BoostGamma::lgamma, "gamma_near_m10_data.csv", 2, 3, 0.99),
+        /** gamma Boost near -55 data. */
+        LGAMMA_NEAR_M55(BoostGamma::lgamma, "gamma_near_m55_data.csv", 2, 0.9, 0.45),
+        /** gamma -20 to 0 data. */
+        // The value -2.75 is low precision
+        LGAMMA_M20_0(BoostGamma::lgamma, "gamma_m20_0_data.csv", 2, 100, 9),
+        /** gamma 0 to 20 data. */
+        LGAMMA_0_20(BoostGamma::lgamma, "gamma_0_20_data.csv", 2, 0.95, 0.25),
+        /** gamma 20 to 150 data. */
+        LGAMMA_20_150(BoostGamma::lgamma, "gamma_20_150_data.csv", 2, 1.5, 0.45),
+        /** gamma 150 to 171 data. */
+        LGAMMA_150_171(BoostGamma::lgamma, "gamma_150_171_data.csv", 2, 1.6, 0.65),
+        /** gamma very near 0 data. */
+        LGAMMA_VERY_NEAR_0(BoostGamma::lgamma, "gamma_very_near_0_data.csv", 2, 1.8, 0.4),
+
+        /** gamma(1+x) - 1 Boost data. */
+        TGAMMAP1M1(BoostGamma::tgamma1pm1, "gamma1pm1_data.csv", 1.8, 0.6),
+
+        /** log(1+x) - 1  data. */
+        LOG1PMX(SpecialMath::log1pmx, "log1pmx_data.csv", 0.9, 0.15);
+
+        /** The function. */
+        private final DoubleUnaryOperator fun;
+
+        /** The filename containing the test data. */
+        private final String filename;
+
+        /** The field containing the expected value. */
+        private final int expected;
+
+        /** The maximum allowed ulp. */
+        private final double maxUlp;
+
+        /** The maximum allowed RMS ulp. */
+        private final double rmsUlp;
+
+        /**
+         * Instantiates a new test case.
+         *
+         * @param fun function to test
+         * @param filename Filename of the test data
+         * @param maxUlp maximum allowed ulp
+         * @param rmsUlp maximum allowed RMS ulp
+         */
+        TestCase(DoubleUnaryOperator fun, String filename, double maxUlp, double rmsUlp) {
+            this(fun, filename, 1, maxUlp, rmsUlp);
+        }
+
+        /**
+         * Instantiates a new test case.
+         *
+         * @param fun function to test
+         * @param filename Filename of the test data
+         * @param expected Expected result field index
+         * @param maxUlp maximum allowed ulp
+         * @param rmsUlp maximum allowed RMS ulp
+         */
+        TestCase(DoubleUnaryOperator fun, String filename, int expected, double maxUlp, double rmsUlp) {
+            this.fun = fun;
+            this.filename = filename;
+            this.expected = expected;
+            this.maxUlp = maxUlp;
+            this.rmsUlp = rmsUlp;
+        }
+
+        /**
+         * @return function to test
+         */
+        DoubleUnaryOperator getFunction() {
+            return fun;
+        }
+
+        /**
+         * @return Filename of the test data
+         */
+        String getFilename() {
+            return filename;
+        }
+
+        /**
+         * @return Expected result field index
+         */
+        int getExpectedField() {
+            return expected;
+        }
+
+        @Override
+        public double getTolerance() {
+            return maxUlp;
+        }
+
+        @Override
+        public double getRmsTolerance() {
+            return rmsUlp;
+        }
+    }
+
+    /**
+     * Define the test cases for each resource file for two argument functions.
+     * This encapsulates the function to test, the expected maximum and RMS error, and
+     * the resource file containing the data.
+     */
+    private enum BiTestCase implements TestError {
+        /** pow(x, y) - 1 Boost data. */
+        POWM1(BoostMath::powm1, "powm1_data.csv", 2.3, 0.4),
+        /** igamma Boost int data. */
+        IGAMMA_UPPER_INT(BoostGamma::tgamma, "igamma_int_data.csv", 6, 1.5),
+        /** igamma Boost small data. */
+        IGAMMA_UPPER_SMALL(BoostGamma::tgamma, "igamma_small_data.csv", 2.5, 0.9),
+        /** igamma Boost med data. */
+        IGAMMA_UPPER_MED(BoostGamma::tgamma, "igamma_med_data.csv", 9, 1.85),
+        /** igamma Boost big data. */
+        IGAMMA_UPPER_BIG(BoostGamma::tgamma, "igamma_big_data.csv", 8, 1.3),
+        /** igamma extra data containing edge cases. */
+        IGAMMA_UPPER_EXTRA(BoostGamma::tgamma, "igamma_extra_data.csv", 13, 4),
+        /** igamma Boost int data. */
+        IGAMMA_Q_INT(BoostGamma::gammaQ, "igamma_int_data.csv", 3, 5, 1.3),
+        /** igamma Boost small data. */
+        IGAMMA_Q_SMALL(BoostGamma::gammaQ, "igamma_small_data.csv", 3, 4, 1.1),
+        /** igamma Boost med data. */
+        IGAMMA_Q_MED(BoostGamma::gammaQ, "igamma_med_data.csv", 3, 6, 0.95),
+        /** igamma Boost big data. */
+        IGAMMA_Q_BIG(BoostGamma::gammaQ, "igamma_big_data.csv", 3, 550, 62),
+        /** igamma extra data containing edge cases. */
+        IGAMMA_Q_EXTRA(BoostGamma::gammaQ, "igamma_extra_data.csv", 3, 60, 18),
+        /** igamma Boost int data. */
+        IGAMMA_LOWER_INT(BoostGamma::tgammaLower, "igamma_int_data.csv", 4, 6, 1.3),
+        /** igamma Boost small data. */
+        IGAMMA_LOWER_SMALL(BoostGamma::tgammaLower, "igamma_small_data.csv", 4, 1.6, 0.55),
+        /** igamma Boost med data. */
+        IGAMMA_LOWER_MED(BoostGamma::tgammaLower, "igamma_med_data.csv", 4, 6.5, 1.3),
+        /** igamma Boost big data. */
+        IGAMMA_LOWER_BIG(BoostGamma::tgammaLower, "igamma_big_data.csv", 4, 8, 1.3),
+        /** igamma extra data containing edge cases. */
+        IGAMMA_LOWER_EXTRA(BoostGamma::tgammaLower, "igamma_extra_data.csv", 4, 5, 1.4),
+        /** igamma Boost int data. */
+        IGAMMA_P_INT(BoostGamma::gammaP, "igamma_int_data.csv", 5, 3.5, 0.95),
+        /** igamma Boost small data. */
+        IGAMMA_P_SMALL(BoostGamma::gammaP, "igamma_small_data.csv", 5, 2.8, 0.9),
+        /** igamma Boost med data. */
+        IGAMMA_P_MED(BoostGamma::gammaP, "igamma_med_data.csv", 5, 5, 0.9),
+        /** igamma Boost big data. */
+        IGAMMA_P_BIG(BoostGamma::gammaP, "igamma_big_data.csv", 5, 430, 55),
+        /** igamma extra data containing edge cases. */
+        IGAMMA_P_EXTRA(BoostGamma::gammaP, "igamma_extra_data.csv", 5, 0.7, 0.2),
+        /** gamma p derivative computed for igamma Boost int data. */
+        GAMMA_P_DERIV_INT(BoostGamma::gammaPDerivative, "igamma_int_data_p_derivative.csv", 3.5, 1.1),
+        /** gamma p derivative computed for igamma Boost small data. */
+        GAMMA_P_DERIV_SMALL(BoostGamma::gammaPDerivative, "igamma_small_data_p_derivative.csv", 3.3, 0.99),
+        /** gamma p derivative computed for igamma Boost med data. */
+        GAMMA_P_DERIV_MED(BoostGamma::gammaPDerivative, "igamma_med_data_p_derivative.csv", 5, 1.25),
+        /** gamma p derivative computed for igamma Boost big data. */
+        GAMMA_P_DERIV_BIG(BoostGamma::gammaPDerivative, "igamma_big_data_p_derivative.csv", 550, 55),
+        /** gamma p derivative computed for igamma Boost int data. */
+        LOG_GAMMA_P_DERIV1_INT(BoostGammaTest::logGammaPDerivative1, "igamma_int_data_p_derivative.csv", 3, 50, 10),
+        /** gamma p derivative computed for igamma Boost small data. */
+        LOG_GAMMA_P_DERIV1_SMALL(BoostGammaTest::logGammaPDerivative1, "igamma_small_data_p_derivative.csv", 3, 8e11, 5e10),
+        /** gamma p derivative computed for igamma Boost med data. */
+        LOG_GAMMA_P_DERIV1_MED(BoostGammaTest::logGammaPDerivative1, "igamma_med_data_p_derivative.csv", 3, 190, 35),
+        /** gamma p derivative computed for igamma Boost big data. */
+        LOG_GAMMA_P_DERIV1_BIG(BoostGammaTest::logGammaPDerivative1, "igamma_big_data_p_derivative.csv", 3, 1.2e6, 125000),
+        /** gamma p derivative computed for igamma Boost int data. */
+        LOG_GAMMA_P_DERIV2_INT(BoostGammaTest::logGammaPDerivative2, "igamma_int_data_p_derivative.csv", 3, 2, 0.5),
+        /** gamma p derivative computed for igamma Boost small data. */
+        LOG_GAMMA_P_DERIV2_SMALL(BoostGammaTest::logGammaPDerivative2, "igamma_small_data_p_derivative.csv", 3, 1.8e10, 1.4e9),
+        /** gamma p derivative computed for igamma Boost med data. */
+        LOG_GAMMA_P_DERIV2_MED(BoostGammaTest::logGammaPDerivative2, "igamma_med_data_p_derivative.csv", 3, 6.2, 0.5),
+        /** gamma p derivative computed for igamma Boost big data. */
+        LOG_GAMMA_P_DERIV2_BIG(BoostGammaTest::logGammaPDerivative2, "igamma_big_data_p_derivative.csv", 3, 40000, 3000),
+        /** igamma asymptotic approximation term. */
+        IGAMMA_LARGE_X_ASYMP_TERM(BoostGammaTest::incompleteTgammaLargeX, "igamma_asymptotic_data.csv", 300, 110),
+        /** gamma Q where the asymptotic approximation applies and <em>is not</em> used. */
+        IGAMMA_LARGE_X_Q(BoostGammaTest::igammaQLargeXNoAsym, "igamma_asymptotic_data.csv", 3, 550, 130),
+        /** gamma P where the asymptotic approximation applies and <em>is not</em> used. */
+        IGAMMA_LARGE_X_P(BoostGammaTest::igammaPLargeXNoAsym, "igamma_asymptotic_data.csv", 4, 1, 0.3),
+        /** gamma Q where the asymptotic approximation applies and <em>is</em> used. */
+        IGAMMA_LARGE_X_Q_ASYM(BoostGammaTest::igammaQLargeXWithAsym, "igamma_asymptotic_data.csv", 3, 550, 190),
+        /** gamma P where the asymptotic approximation applies and <em>is</em> used. */
+        IGAMMA_LARGE_X_P_ASYM(BoostGammaTest::igammaPLargeXWithAsym, "igamma_asymptotic_data.csv", 4, 350, 110);
+
+        /** The function. */
+        private final DoubleBinaryOperator fun;
+
+        /** The filename containing the test data. */
+        private final String filename;
+
+        /** The field containing the expected value. */
+        private final int expected;
+
+        /** The maximum allowed ulp. */
+        private final double maxUlp;
+
+        /** The maximum allowed RMS ulp. */
+        private final double rmsUlp;
+
+        /**
+         * Instantiates a new test case.
+         *
+         * @param fun function to test
+         * @param filename Filename of the test data
+         * @param maxUlp maximum allowed ulp
+         * @param rmsUlp maximum allowed RMS ulp
+         */
+        BiTestCase(DoubleBinaryOperator fun, String filename, double maxUlp, double rmsUlp) {
+            this(fun, filename, 2, maxUlp, rmsUlp);
+        }
+
+        /**
+         * Instantiates a new test case.
+         *
+         * @param fun function to test
+         * @param filename Filename of the test data
+         * @param expected Expected result field index
+         * @param maxUlp maximum allowed ulp
+         * @param rmsUlp maximum allowed RMS ulp
+         */
+        BiTestCase(DoubleBinaryOperator fun, String filename, int expected, double maxUlp, double rmsUlp) {
+            this.fun = fun;
+            this.filename = filename;
+            this.expected = expected;
+            this.maxUlp = maxUlp;
+            this.rmsUlp = rmsUlp;
+        }
+
+        /**
+         * @return function to test
+         */
+        DoubleBinaryOperator getFunction() {
+            return fun;
+        }
+
+        /**
+         * @return Filename of the test data
+         */
+        String getFilename() {
+            return filename;
+        }
+
+        /**
+         * @return Expected result field index
+         */
+        int getExpectedField() {
+            return expected;
+        }
+
+        @Override
+        public double getTolerance() {
+            return maxUlp;
+        }
+
+        @Override
+        public double getRmsTolerance() {
+            return rmsUlp;
+        }
+    }
+
+    @ParameterizedTest
+    @CsvSource({
+        // Pole errors
+        "0, NaN",
+        "-1, NaN",
+        "-2, NaN",
+        // Factorials: gamma(n+1) = n!
+        "1, 1",
+        "2, 1",
+        "3, 2",
+        "4, 6",
+        "5, 24",
+        "171, 0.7257415615307998967396728211129263114717e307",
+        "171.9, Infinity",
+        "172, Infinity",
+        "172.1, Infinity",
+        "500.34, Infinity, 0",
+        "1000.123, Infinity, 0",
+        "2000.1, Infinity, 0",
+        // Overflow close to negative poles creates signed zeros
+        "-171.99999999999997, 0.0",
+        "-172, NaN",
+        "-172.00000000000003, -0.0",
+        "-172.99999999999997, -0.0",
+        "-173, NaN",
+        "-173.00000000000003, 0.0",
+    })
+    void testTGammaEdgeCases(double z, double expected) {
+        Assertions.assertEquals(expected, BoostGamma.tgamma(z));
+    }
+
+    /**
+     * Test the approach to the overflow limit of gamma(z).
+     * This checks that extreme edge case handling is correct.
+     */
+    @ParameterizedTest
+    @CsvSource({
+        // Values computed using boost long double implementation.
+        "171.5, 9.483367566824799e+307, 1",
+        "171.62, 1.7576826789978127e+308, 1",
+        "171.624, 1.7942117599248106e+308, 4",
+        "171.62437600000001, 1.7976842943982607e+308, 4",
+        "171.6244, Infinity, 0",
+    })
+    void testTGammaLimit(double z, double expected, int ulp) {
+        TestUtils.assertEquals(expected, BoostGamma.tgamma(z), ulp);
+    }
+
+    /**
+     * tgamma spot tests extracted from
+     * {@code boost/libs/math/test/test_gamma.hpp}.
+     */
+    @Test
+    void testTGammaSpotTests() {
+        final int tolerance = 50;
+        assertClose(BoostGamma::tgamma, 3.5, 3.3233509704478425511840640312646472177454052302295, tolerance);
+        assertClose(BoostGamma::tgamma, 0.125, 7.5339415987976119046992298412151336246104195881491, tolerance);
+        assertClose(BoostGamma::tgamma, -0.125, -8.7172188593831756100190140408231437691829605421405, tolerance);
+        assertClose(BoostGamma::tgamma, -3.125, 1.1668538708507675587790157356605097019141636072094, tolerance);
+        // Lower tolerance on this one, is only really needed on Linux x86 systems, result is mostly down to std lib accuracy:
+        assertClose(BoostGamma::tgamma, -53249.0 / 1024, -1.2646559519067605488251406578743995122462767733517e-65, tolerance * 3);
+
+        // Very small values, from a bug report by Rocco Romeo:
+        assertClose(BoostGamma::tgamma, Math.scalb(1.0, -12), 4095.42302574977164107280305038926932586783813167844235368772, tolerance);
+        assertClose(BoostGamma::tgamma, Math.scalb(1.0, -14), 16383.4228446989052821887834066513143241996925504706815681204, tolerance * 2);
+        assertClose(BoostGamma::tgamma, Math.scalb(1.0, -25), 3.35544314227843645746319656372890833248893111091576093784981e7, tolerance);
+        assertClose(BoostGamma::tgamma, Math.scalb(1.0, -27), 1.34217727422784342467508497080056807355928046680073490038257e8, tolerance);
+        assertClose(BoostGamma::tgamma, Math.scalb(1.0, -29), 5.36870911422784336940727488260481582524683632281496706906706e8, tolerance);
+        assertClose(BoostGamma::tgamma, Math.scalb(1.0, -35), 3.43597383674227843351272524573929605605651956475300480712955e10, tolerance);
+        assertClose(BoostGamma::tgamma, Math.scalb(1.0, -54), 1.80143985094819834227843350984671942971248427509141008005685e16, tolerance);
+        assertClose(BoostGamma::tgamma, Math.scalb(1.0, -64), 1.84467440737095516154227843350984671394471047428598176073616e19, tolerance);
+        assertClose(BoostGamma::tgamma, Math.scalb(1.0, -66), 7.37869762948382064634227843350984671394068921181531525785592922800e19, tolerance);
+        assertClose(BoostGamma::tgamma, Math.scalb(1.0, -33), 8.58993459142278433521360841138215453639282914047157884932317481977e9, tolerance);
+        assertClose(BoostGamma::tgamma, 4 / Double.MAX_VALUE, Double.MAX_VALUE / 4, tolerance);
+        assertClose(BoostGamma::tgamma, -Math.scalb(1.0, -12), -4096.57745718775464971331294488248972086965434176847741450728, tolerance);
+        assertClose(BoostGamma::tgamma, -Math.scalb(1.0, -14), -16384.5772760354695939336148831283410381037202353359487504624, tolerance * 2);
+        assertClose(BoostGamma::tgamma, -Math.scalb(1.0, -25), -3.35544325772156943776992988569766723938420508937071533029983e7, tolerance);
+        assertClose(BoostGamma::tgamma, -Math.scalb(1.0, -27), -1.34217728577215672270574319043497450577151370942651414968627e8, tolerance);
+        assertClose(BoostGamma::tgamma, -Math.scalb(1.0, -29), -5.36870912577215666743793215770406791630514293641886249382012e8, tolerance);
+        assertClose(BoostGamma::tgamma, -Math.scalb(1.0, -34), -1.71798691845772156649591034966100693794360502123447124928244e10, tolerance);
+        assertClose(BoostGamma::tgamma, -Math.scalb(1.0, -54), -1.80143985094819845772156649015329155101490229157245556564920e16, tolerance);
+        assertClose(BoostGamma::tgamma, -Math.scalb(1.0, -64), -1.84467440737095516165772156649015328606601289230246224694513e19, tolerance);
+        assertClose(BoostGamma::tgamma, -Math.scalb(1.0, -66), -7.37869762948382064645772156649015328606199162983179574406439e19, tolerance);
+        assertClose(BoostGamma::tgamma, -Math.scalb(1.0, -33), -8.58993459257721566501667413261977598620193488449233402857632e9, tolerance);
+        assertClose(BoostGamma::tgamma, -4 / Double.MAX_VALUE, -Double.MAX_VALUE / 4, tolerance);
+        assertClose(BoostGamma::tgamma, -1 + Math.scalb(1.0, -22), -4.19430442278467170746130758391572421252211886167956799318843e6, tolerance);
+        assertClose(BoostGamma::tgamma, -1 - Math.scalb(1.0, -22), 4.19430357721600151046968956086404748206205391186399889108944e6, tolerance);
+        assertClose(BoostGamma::tgamma, -4 + Math.scalb(1.0, -20), 43690.7294216755534842491085530510391932288379640970386378756, tolerance);
+        assertClose(BoostGamma::tgamma, -4 - Math.scalb(1.0, -20), -43690.6039118698506165317137699180871126338425941292693705533, tolerance);
+        assertClose(BoostGamma::tgamma, -1 + Math.scalb(1.0, -44), -1.75921860444164227843350985473932247549232492467032584051825e13, tolerance);
+        assertClose(BoostGamma::tgamma, -1 - Math.scalb(1.0, -44), 1.75921860444155772156649016131144377791001546933519242218430e13, tolerance);
+        assertClose(BoostGamma::tgamma, -4 + Math.scalb(1.0, -44), 7.33007751850729421569517998006564998020333048893618664936994e11, tolerance);
+        assertClose(BoostGamma::tgamma, -4 - Math.scalb(1.0, -44), -7.33007751850603911763815347967171096249288790373790093559568e11, tolerance);
+        // Test bug fixes in tgamma:
+        assertClose(BoostGamma::tgamma, 142.75, 7.8029496083318133344429227511387928576820621466e244, tolerance * 4);
+        assertClose(BoostGamma::tgamma, -Double.MIN_VALUE, Double.NEGATIVE_INFINITY, 0);
+        assertClose(BoostGamma::tgamma, Double.MIN_VALUE, Double.POSITIVE_INFINITY, 0);
+    }
+
+    @Test
+    void testLanczosGmh() {
+        // These terms are equal. The value (g - 0.5) is provided as a convenience.
+        Assertions.assertEquals(Lanczos.g() - 0.5, Lanczos.gmh());
+        Assertions.assertEquals(0.5 - Lanczos.g(), -Lanczos.gmh());
+    }
+
+    @ParameterizedTest
+    @EnumSource(value = TestCase.class, mode = Mode.MATCH_ANY, names = {"TGAMMAO_.*"})
+    void testTGammaOriginal(TestCase tc) {
+        assertFunction(tc);
+    }
+
+    @ParameterizedTest
+    @EnumSource(value = TestCase.class, mode = Mode.MATCH_ANY, names = {"TGAMMA_.*"})
+    void testTGamma(TestCase tc) {
+        assertFunction(tc);
+    }
+
+    /**
+     * Read the gamma data and compare the result with the Commons Numbers 1.0 implementation
+     * using data that requires the Lanczos support. This test verifies the Boost Lanczos
+     * support is an improvement.
+     */
+    @ParameterizedTest
+    @ValueSource(strings = {"gamma_20_150_data.csv", "gamma_factorials_data.csv"})
+    @Order(1)
+    void testTGammaWithLanczosSupport(String datafile) throws Exception {
+        final TestUtils.ErrorStatistics e1 = new TestUtils.ErrorStatistics();
+        final TestUtils.ErrorStatistics e2 = new TestUtils.ErrorStatistics();
+
+        // Set this to allow all data to be processed.
+        // If set to negative any failures will be output to stdout (useful to debugging).
+        final double tolerance = 10;
+
+        try (DataReader in = new DataReader(datafile)) {
+            while (in.next()) {
+                final double x = in.getDouble(0);
+
+                // The Boost method tabulates the integer factorials so skip these.
+                // Also skip those not support by the partial implementation.
+                if ((int) x == x || x <= LANCZOS_THRESHOLD) {
+                    continue;
+                }
+
+                final double v1 = gammaOriginal(x);
+                // The original method can overflow even when x <= 170 (the largest factorial).
+                // The largest supported value is around 141.5.
+                if (Double.isInfinite(v1)) {
+                    continue;
+                }
+                final double v2 = BoostGamma.tgamma(x);
+
+                final BigDecimal expected = in.getBigDecimal(1);
+
+                TestUtils.assertEquals(expected, v1, tolerance, e1::add, () -> "Numbers 1.0 x=" + x);
+                TestUtils.assertEquals(expected, v2, tolerance, e2::add, () -> "Boost x=" + x);
+            }
+        }
+        // The gamma functions are accurate to a few ULP.
+        // This test is mainly interested in checking the Boost implementation is an improvement.
+        final double maxTolerance = 6;
+        final double rmsTolerance = 2;
+        assertRms(TestError.of(datafile + "  Numbers 1.0", maxTolerance, rmsTolerance), e1);
+        assertRms(TestError.of(datafile + "  Boost      ", maxTolerance, rmsTolerance), e2);
+        Assertions.assertTrue(e2.getRMS() < e1.getRMS() * 0.8, "Expected better precision");
+        Assertions.assertTrue(e2.getMaxAbs() < e1.getMaxAbs() * 0.7, "Expected lower max error");
+        Assertions.assertTrue(Math.abs(e2.getMean()) < Math.abs(e1.getMean()) * 0.5, "Expected better accuracy");
+    }
+
+    @ParameterizedTest
+    @CsvSource({
+        // Pole errors
+        "0, NaN",
+        "-1, NaN",
+        "-2, NaN",
+        // Factorials: gamma(n+1) = n!
+        "1, 0",
+        "2, 0",
+    })
+    void testLGammaEdgeCases(double z, double p) {
+        Assertions.assertEquals(p, BoostGamma.lgamma(z));
+    }
+
+    /**
+     * lgamma spot tests extracted from
+     * {@code boost/libs/math/test/test_gamma.hpp}.
+     */
+    @Test
+    void testLGammaSpotTests() {
+        final int tolerance = 1;
+        final int[] sign = {0};
+        final DoubleUnaryOperator fun = z -> BoostGamma.lgamma(z, sign);
+
+        assertClose(fun, 3.5, 1.2009736023470742248160218814507129957702389154682, tolerance);
+        Assertions.assertEquals(1, sign[0]);
+        assertClose(fun, 0.125, 2.0194183575537963453202905211670995899482809521344, tolerance);
+        Assertions.assertEquals(1, sign[0]);
+        assertClose(fun, -0.125, 2.1653002489051702517540619481440174064962195287626, tolerance);
+        Assertions.assertEquals(-1, sign[0]);
+        assertClose(fun, -3.125, 0.1543111276840418242676072830970532952413339012367, tolerance * 2);
+        Assertions.assertEquals(1, sign[0]);
+        assertClose(fun, -53249.0 / 1024, -149.43323093420259741100038126078721302600128285894, tolerance);
+        Assertions.assertEquals(-1, sign[0]);
+        // Very small values, from a bug report by Rocco Romeo:
+        assertClose(fun, Math.scalb(1.0, -12), Math.log(4095.42302574977164107280305038926932586783813167844235368772), tolerance);
+        Assertions.assertEquals(1, sign[0]);
+        assertClose(fun, Math.scalb(1.0, -14), Math.log(16383.4228446989052821887834066513143241996925504706815681204), tolerance);
+        Assertions.assertEquals(1, sign[0]);
+        assertClose(fun, Math.scalb(1.0, -25), Math.log(3.35544314227843645746319656372890833248893111091576093784981e7), tolerance);
+        Assertions.assertEquals(1, sign[0]);
+        assertClose(fun, Math.scalb(1.0, -27), Math.log(1.34217727422784342467508497080056807355928046680073490038257e8), tolerance);
+        Assertions.assertEquals(1, sign[0]);
+        assertClose(fun, Math.scalb(1.0, -29), Math.log(5.36870911422784336940727488260481582524683632281496706906706e8), tolerance);
+        Assertions.assertEquals(1, sign[0]);
+        assertClose(fun, Math.scalb(1.0, -35), Math.log(3.43597383674227843351272524573929605605651956475300480712955e10), tolerance);
+        Assertions.assertEquals(1, sign[0]);
+        assertClose(fun, Math.scalb(1.0, -54), Math.log(1.80143985094819834227843350984671942971248427509141008005685e16), tolerance);
+        Assertions.assertEquals(1, sign[0]);
+        assertClose(fun, Math.scalb(1.0, -64), Math.log(1.84467440737095516154227843350984671394471047428598176073616e19), tolerance);
+        Assertions.assertEquals(1, sign[0]);
+        assertClose(fun, Math.scalb(1.0, -66), Math.log(7.37869762948382064634227843350984671394068921181531525785592922800e19), tolerance);
+        Assertions.assertEquals(1, sign[0]);
+        assertClose(fun, Math.scalb(1.0, -33), Math.log(8.58993459142278433521360841138215453639282914047157884932317481977e9), tolerance);
+        Assertions.assertEquals(1, sign[0]);
+        assertClose(fun, 4 / Double.MAX_VALUE, Math.log(Double.MAX_VALUE / 4), tolerance);
+        Assertions.assertEquals(1, sign[0]);
+        assertClose(fun, -Math.scalb(1.0, -12), Math.log(4096.57745718775464971331294488248972086965434176847741450728), tolerance);
+        Assertions.assertEquals(-1, sign[0]);
+        assertClose(fun, -Math.scalb(1.0, -14), Math.log(16384.5772760354695939336148831283410381037202353359487504624), tolerance);
+        Assertions.assertEquals(-1, sign[0]);
+        assertClose(fun, -Math.scalb(1.0, -25), Math.log(3.35544325772156943776992988569766723938420508937071533029983e7), tolerance);
+        Assertions.assertEquals(-1, sign[0]);
+        assertClose(fun, -Math.scalb(1.0, -27), Math.log(1.34217728577215672270574319043497450577151370942651414968627e8), tolerance);
+        Assertions.assertEquals(-1, sign[0]);
+        assertClose(fun, -Math.scalb(1.0, -29), Math.log(5.36870912577215666743793215770406791630514293641886249382012e8), tolerance);
+        Assertions.assertEquals(-1, sign[0]);
+        assertClose(fun, -Math.scalb(1.0, -34), Math.log(1.71798691845772156649591034966100693794360502123447124928244e10), tolerance);
+        Assertions.assertEquals(-1, sign[0]);
+        assertClose(fun, -Math.scalb(1.0, -54), Math.log(1.80143985094819845772156649015329155101490229157245556564920e16), tolerance);
+        Assertions.assertEquals(-1, sign[0]);
+        assertClose(fun, -Math.scalb(1.0, -64), Math.log(1.84467440737095516165772156649015328606601289230246224694513e19), tolerance);
+        Assertions.assertEquals(-1, sign[0]);
+        assertClose(fun, -Math.scalb(1.0, -66), Math.log(7.37869762948382064645772156649015328606199162983179574406439e19), tolerance);
+        Assertions.assertEquals(-1, sign[0]);
+        assertClose(fun, -Math.scalb(1.0, -33), Math.log(8.58993459257721566501667413261977598620193488449233402857632e9), tolerance);
+        Assertions.assertEquals(-1, sign[0]);
+        assertClose(fun, -4 / Double.MAX_VALUE, Math.log(Double.MAX_VALUE / 4), tolerance);
+        Assertions.assertEquals(-1, sign[0]);
+        assertClose(fun, -1 + Math.scalb(1.0, -22), Math.log(4.19430442278467170746130758391572421252211886167956799318843e6), tolerance);
+        Assertions.assertEquals(-1, sign[0]);
+        assertClose(fun, -1 - Math.scalb(1.0, -22), Math.log(4.19430357721600151046968956086404748206205391186399889108944e6), tolerance);
+        Assertions.assertEquals(1, sign[0]);
+        assertClose(fun, -4 + Math.scalb(1.0, -20), Math.log(43690.7294216755534842491085530510391932288379640970386378756), tolerance);
+        Assertions.assertEquals(1, sign[0]);
+        assertClose(fun, -4 - Math.scalb(1.0, -20), Math.log(43690.6039118698506165317137699180871126338425941292693705533), tolerance);
+        Assertions.assertEquals(-1, sign[0]);
+
+        assertClose(fun, -1 + Math.scalb(1.0, -44), Math.log(1.75921860444164227843350985473932247549232492467032584051825e13), tolerance);
+        Assertions.assertEquals(-1, sign[0]);
+        assertClose(fun, -1 - Math.scalb(1.0, -44), Math.log(1.75921860444155772156649016131144377791001546933519242218430e13), tolerance);
+        Assertions.assertEquals(1, sign[0]);
+        assertClose(fun, -4 + Math.scalb(1.0, -44), Math.log(7.33007751850729421569517998006564998020333048893618664936994e11), tolerance);
+        Assertions.assertEquals(1, sign[0]);
+        assertClose(fun, -4 - Math.scalb(1.0, -44), Math.log(7.33007751850603911763815347967171096249288790373790093559568e11), tolerance);
+        Assertions.assertEquals(-1, sign[0]);
+        //
+        // Extra large values for lgamma, see https://github.com/boostorg/math/issues/242
+        //
+        assertClose(fun, Math.scalb(11103367432951928.0, 32), 2.7719825960021351251696385101478518546793793286704974382373670822285114741208958e27, tolerance);
+        assertClose(fun, Math.scalb(11103367432951928.0, 62), 4.0411767712186990905102512019058204792570873633363159e36, tolerance);
+        assertClose(fun, Math.scalb(11103367432951928.0, 326), 3.9754720509185529233002820161357111676582583112671658e116, tolerance);
+        //
+        // Super small values may cause spurious overflow:
+        //
+        double value = Double.MIN_NORMAL;
+        while (value != 0) {
+            Assertions.assertTrue(Double.isFinite(fun.applyAsDouble(value)));
+            value /= 2;
+        }
+
+        // Simple check to ensure a zero length array is ignored
+        final int[] signEmpty = {};
+        for (final double z : new double[] {3.5, 6.76, 8.12}) {
+            Assertions.assertEquals(BoostGamma.lgamma(z), BoostGamma.lgamma(z, signEmpty));
+        }
+    }
+
+    @ParameterizedTest
+    @EnumSource(value = TestCase.class, mode = Mode.MATCH_ANY, names = {"LGAMMA_.*"})
+    void testLGamma(TestCase tc) {
+        assertFunction(tc);
+    }
+
+    @ParameterizedTest
+    @CsvSource({
+        // Pole errors
+        "-1, NaN",
+        "-2, NaN",
+        // Factorials: gamma(n+1)-1 = n! - 1
+        "0, 0",
+        "1, 0",
+        "2, 1",
+        "3, 5",
+        "4, 23",
+        "5, 119",
+    })
+    void testTGammap1m1EdgeCases(double z, double p) {
+        Assertions.assertEquals(p, BoostGamma.tgamma1pm1(z));
+    }
+
+    @ParameterizedTest
+    @EnumSource(value = TestCase.class, mode = Mode.MATCH_ANY, names = {"TGAMMAP1M1.*"})
+    void testTGammap1m1(TestCase tc) {
+        assertFunction(tc);
+    }
+
+    @ParameterizedTest
+    @CsvSource({
+        "0, 1, -1",
+        "0, 0, 0",
+        "0, -1, Infinity",
+        "2, -2, -0.75",
+        "2, 1024, Infinity",
+        "2, -1075, -1",
+        "NaN, 1, NaN",
+        "1, NaN, NaN",
+        // Negative x, even integer y
+        "-2, 2, 3",
+        // Negative x, non (even integer) y
+        "-2, 2.1, NaN",
+    })
+    void testPowm1EdgeCases(double x, double y, double expected) {
+        Assertions.assertEquals(expected, BoostMath.powm1(x, y));
+    }
+
+    @ParameterizedTest
+    @EnumSource(value = BiTestCase.class, mode = Mode.MATCH_ANY, names = {"POWM1.*"})
+    void testPowm1(BiTestCase tc) {
+        assertFunction(tc);
+    }
+
+    /**
+     * Test the log1pmx function with values that do not require high precision.
+     *
+     * @param x Argument x
+     */
+    @ParameterizedTest
+    @ValueSource(doubles = {-1.1, -1, 0, 1, 1.5, 2, 3})
+    void testLog1pmxStandard(double x) {
+        Assertions.assertEquals(Math.log1p(x) - x, SpecialMath.log1pmx(x));
+    }
+
+    /**
+     * Test the log1pmx function. The function is not a direct port of the Boost log1pmx
+     * function so resides in the {@link SpecialMath} class. It is only used in {@link BoostGamma}
+     * so tested here using the same test framework.
+     */
+    @ParameterizedTest
+    @EnumSource(value = TestCase.class, mode = Mode.MATCH_ANY, names = {"LOG1PMX.*"})
+    void testLog1pmx(TestCase tc) {
+        assertFunction(tc);
+    }
+
+    @ParameterizedTest
+    @CsvSource({
+        // Argument a > 0
+        "NaN, 1, NaN",
+        "0, 1, NaN",
+        "-1, 1, NaN",
+        // Argument z >= 0
+        "1, NaN, NaN",
+        "1, -1, NaN",
+    })
+    void testIGammaEdgeCases(double a, double z, double expected) {
+        // All functions have the same invalid domain for a and z
+        Assertions.assertEquals(expected, BoostGamma.tgamma(a, z), "tgamma");
+        Assertions.assertEquals(expected, BoostGamma.tgammaLower(a, z), "tgammaLower");
+        Assertions.assertEquals(expected, BoostGamma.gammaP(a, z), "gammaP");
+        Assertions.assertEquals(expected, BoostGamma.gammaQ(a, z), "gammaQ");
+        Assertions.assertEquals(expected, BoostGamma.gammaPDerivative(a, z), "gammaPDerivative");
+    }
+
+    @ParameterizedTest
+    @CsvSource({
+        // z==0
+        "2, 0, 0",
+        "1, 0, 1",
+        "0.5, 0, Infinity",
+    })
+    void testGammaPDerivativeEdgeCases(double a, double z, double expected) {
+        Assertions.assertEquals(expected, BoostGamma.gammaPDerivative(a, z));
+    }
+
+    /**
+     * tgamma spot tests extracted from
+     * {@code boost/libs/math/test/test_igamma.hpp}.
+     */
+    @Test
+    void testIGammaSpotTests() {
+        int tolerance = 10;
+        assertClose(BoostGamma::tgamma, 5, 1, 23.912163676143750903709045060494956383977723517065, tolerance);
+        assertClose(BoostGamma::tgamma, 5, 5, 10.571838841565097874621959975919877646444998907920, tolerance);
+        assertClose(BoostGamma::tgamma, 5, 10, 0.70206451384706574414638719662835463671916532623256, tolerance);
+        assertClose(BoostGamma::tgamma, 5, 100, 3.8734332808745531496973774140085644548465762343719e-36, tolerance);
+        assertClose(BoostGamma::tgamma, 0.5, 0.5, 0.56241823159440712427949495730204306902676756479651, tolerance);
+        assertClose(BoostGamma::tgamma, 0.5, 9.0 / 10, 0.31853210360412109873859360390443790076576777747449, tolerance * 10);
+        assertClose(BoostGamma::tgamma, 0.5, 5, 0.0027746032604128093194908357272603294120210079791437, tolerance);
+        assertClose(BoostGamma::tgamma, 0.5, 100, 3.7017478604082789202535664481339075721362102520338e-45, tolerance);
+
+        assertClose(BoostGamma::tgammaLower, 5, 1, 0.087836323856249096290954939505043616022276482935091, tolerance);
+        assertClose(BoostGamma::tgammaLower, 5, 5, 13.428161158434902125378040024080122353555001092080, tolerance);
+        assertClose(BoostGamma::tgammaLower, 5, 10, 23.297935486152934255853612803371645363280834673767, tolerance);
+        assertClose(BoostGamma::tgammaLower, 5, 100, 23.999999999999999999999999999999999996126566719125, tolerance);
+
+        assertClose(BoostGamma::gammaQ, 5, 1, 0.99634015317265628765454354418728984933240514654437, tolerance);
+        assertClose(BoostGamma::gammaQ, 5, 5, 0.44049328506521241144258166566332823526854162116334, tolerance);
+        assertClose(BoostGamma::gammaQ, 5, 10, 0.029252688076961072672766133192848109863298555259690, tolerance);
+        assertClose(BoostGamma::gammaQ, 5, 100, 1.6139305336977304790405739225035685228527400976549e-37, tolerance);
+        assertClose(BoostGamma::gammaQ, 1.5, 2, 0.26146412994911062220282207597592120190281060919079, tolerance);
+        assertClose(BoostGamma::gammaQ, 20.5, 22, 0.34575332043467326814971590879658406632570278929072, tolerance);
+
+        assertClose(BoostGamma::gammaP, 5, 1, 0.0036598468273437123454564558127101506675948534556288, tolerance);
+        assertClose(BoostGamma::gammaP, 5, 5, 0.55950671493478758855741833433667176473145837883666, tolerance);
+        assertClose(BoostGamma::gammaP, 5, 10, 0.97074731192303892732723386680715189013670144474031, tolerance);
+        assertClose(BoostGamma::gammaP, 5, 100, 0.9999999999999999999999999999999999998386069466302, tolerance);
+        assertClose(BoostGamma::gammaP, 1.5, 2, 0.73853587005088937779717792402407879809718939080921, tolerance);
+        assertClose(BoostGamma::gammaP, 20.5, 22, 0.65424667956532673185028409120341593367429721070928, tolerance);
+
+        // naive check on derivative function:
+        tolerance = 50;
+        assertClose(BoostGamma::gammaPDerivative, 20.5, 22,
+            Math.exp(-22) * Math.pow(22, 19.5) / BoostGamma.tgamma(20.5), tolerance);
+
+        // Bug reports from Rocco Romeo:
+        assertClose(BoostGamma::tgamma, 20, Math.scalb(1.0, -40), 1.21645100408832000000e17, tolerance);
+        assertClose(BoostGamma::tgammaLower, 20, Math.scalb(1.0, -40), 7.498484069471659696438206828760307317022658816757448882e-243, tolerance);
+        assertClose(BoostGamma::gammaP, 20, Math.scalb(1.0, -40), 6.164230243774976473534975936127139110276824507876192062e-260, tolerance);
+
+        assertClose(BoostGamma::tgamma, 30, Math.scalb(1.0, -30), 8.841761993739701954543616000000e30, tolerance);
+        assertClose(BoostGamma::tgammaLower, 30, Math.scalb(1.0, -30), 3.943507283668378474979245322638092813837393749566146974e-273, tolerance);
+        assertClose(BoostGamma::gammaP, 30, Math.scalb(1.0, -30), 4.460092102072560946444018923090222645613009128135650652e-304, tolerance);
+        assertClose(BoostGamma::gammaPDerivative, 2, Math.scalb(1.0, -575), 8.08634922390438981326119906687585206568664784377654648227177e-174, tolerance);
+
+        Assertions.assertEquals(BoostGamma.tgamma(176, 100), Double.POSITIVE_INFINITY);
+        Assertions.assertEquals(BoostGamma.tgamma(530, 2000), Double.POSITIVE_INFINITY);
+        Assertions.assertEquals(BoostGamma.tgamma(740, 2500), Double.POSITIVE_INFINITY);
+        Assertions.assertEquals(BoostGamma.tgamma(530.5, 2000), Double.POSITIVE_INFINITY);
+        Assertions.assertEquals(BoostGamma.tgamma(740.5, 2500), Double.POSITIVE_INFINITY);
+        Assertions.assertEquals(BoostGamma.tgammaLower(10000.0f, 10000.0f / 4), Double.POSITIVE_INFINITY);
+        assertClose(BoostGamma::tgamma, 170, 165, 2.737338337642022829223832094019477918166996032112404370e304, tolerance);
+        assertClose(BoostGamma::tgammaLower, 170, 165, 1.531729671362682445715419794880088619901822603944331733e304, tolerance);
+        // *** Increased from 10 * tolerance ***
+        assertClose(BoostGamma::tgamma, 170, 170, 2.090991698081449410761040647015858316167077909285580375e304, 16 * tolerance);
+        assertClose(BoostGamma::tgammaLower, 170, 170, 2.178076310923255864178211241883708221901740726771155728e304, 16 * tolerance);
+        assertClose(BoostGamma::tgamma, 170, 190, 2.8359275512790301602903689596273175148895758522893941392e303, 10 * tolerance);
+        assertClose(BoostGamma::tgammaLower, 170, 190, 3.985475253876802258910214992936834786579861050827796689e304, 10 * tolerance);
+        // *** Increased from 10 * tolerance ***
+        assertClose(BoostGamma::tgamma, 170, 1000, 6.1067635957780723069200425769800190368662985052038980542e72, 16 * tolerance);
+
+        assertClose(BoostGamma::tgammaLower, 185, 1, 0.001999286058955490074702037576083582139834300307968257924836, tolerance);
+        assertClose(BoostGamma::tgamma, 185, 1500, 1.037189524841404054867100938934493979112615962865368623e-67, tolerance * 10);
+
+        assertClose(BoostGamma::tgamma, 36, Math.scalb(1.0, -26), 1.03331479663861449296666513375232000000e40, tolerance * 10);
+        assertClose(BoostGamma::tgamma, 50.5, Math.scalb(1.0, -17), 4.2904629123519598109157551960589377e63, tolerance * 10);
+        assertClose(BoostGamma::tgamma, 164.5, 0.125, 2.5649307433687542701168405519538910e292, tolerance * 10);
+        //
+        // Check very large parameters, see: https://github.com/boostorg/math/issues/168
+        //
+        final double maxVal = Double.MAX_VALUE;
+        final double largeVal = maxVal * 0.99f;
+        Assertions.assertEquals(BoostGamma.tgamma(22.25, maxVal), 0);
+        Assertions.assertEquals(BoostGamma.tgamma(22.25, largeVal), 0);
+        Assertions.assertEquals(BoostGamma.tgammaLower(22.25, maxVal), BoostGamma.tgamma(22.25));
+        Assertions.assertEquals(BoostGamma.tgammaLower(22.25, largeVal), BoostGamma.tgamma(22.25));
+        Assertions.assertEquals(BoostGamma.gammaQ(22.25, maxVal), 0);
+        Assertions.assertEquals(BoostGamma.gammaQ(22.25, largeVal), 0);
+        Assertions.assertEquals(BoostGamma.gammaP(22.25, maxVal), 1);
+        Assertions.assertEquals(BoostGamma.gammaP(22.25, largeVal), 1);
+        Assertions.assertEquals(BoostGamma.tgamma(22.25, Double.POSITIVE_INFINITY), 0);
+        Assertions.assertEquals(BoostGamma.tgammaLower(22.25, Double.POSITIVE_INFINITY), BoostGamma.tgamma(22.25));
+        Assertions.assertEquals(BoostGamma.gammaQ(22.25, Double.POSITIVE_INFINITY), 0);
+        Assertions.assertEquals(BoostGamma.gammaP(22.25, Double.POSITIVE_INFINITY), 1);
+        //
+        // Large arguments and small parameters, see
+        // https://github.com/boostorg/math/issues/451:
+        //
+        Assertions.assertEquals(BoostGamma.gammaQ(1770, 1e-12), 1);
+        Assertions.assertEquals(BoostGamma.gammaP(1770, 1e-12), 0);
+    }
+
+    @ParameterizedTest
+    @EnumSource(value = BiTestCase.class, mode = Mode.MATCH_ANY, names = {"IGAMMA_U.*"})
+    void testIGammaUpper(BiTestCase tc) {
+        assertFunction(tc);
+    }
+
+    @ParameterizedTest
+    @EnumSource(value = BiTestCase.class, mode = Mode.MATCH_ANY, names = {"IGAMMA_L.*"})
+    void testIGammaLower(BiTestCase tc) {
+        assertFunction(tc);
+    }
+
+    @ParameterizedTest
+    @EnumSource(value = BiTestCase.class, mode = Mode.MATCH_ANY, names = {"IGAMMA_Q.*"})
+    void testIGammaQ(BiTestCase tc) {
+        assertFunction(tc);
+    }
+
+    @ParameterizedTest
+    @EnumSource(value = BiTestCase.class, mode = Mode.MATCH_ANY, names = {"IGAMMA_P.*"})
+    void testIGammaP(BiTestCase tc) {
+        assertFunction(tc);
+    }
+
+    @ParameterizedTest
+    @EnumSource(value = BiTestCase.class, mode = Mode.MATCH_ANY, names = {"GAMMA_P_DERIV.*"})
+    void testGammaPDerivative(BiTestCase tc) {
+        assertFunction(tc);
+    }
+
+    @ParameterizedTest
+    @EnumSource(value = BiTestCase.class, mode = Mode.MATCH_ANY, names = {"LOG_GAMMA_P_DERIV.*"})
+    void testLogGammaPDerivative(BiTestCase tc) {
+        assertFunction(tc);
+    }
+
+    /**
+     * Test the incomplete gamma function uses the policy containing the epsilon and
+     * maximum iterations for series evaluations. The data targets each method computed
+     * using a series component to check the policy is not ignored.
+     *
+     * <p>Running the policy tests on their own should hit the code paths
+     * using the policy for function evaluation:
+     * <pre>
+     * mvn clean test -Dtest=BoostGammaTest#testIGammaPolicy* jacoco:report
+     * </pre>
+     */
+    @ParameterizedTest
+    @CsvSource(value = {
+        // Methods 0, 1, 5, 6 do not use the iteration policy
+        // Data extracted from the resource files and formatted to double precision
+
+        // Method 2: x > 1.1, x - (1 / (3 * x)) < a
+        "5.0,2.5,21.38827245393963,0.8911780189141513,2.6117275460603704,0.10882198108584876",
+        // Method 4: a < 20, x > 1.1, x - (1 / (3 * x)) > a
+        "19.24400520324707,21.168405532836914,4.0308280447358675E15,0.3084240508178698,9.038282597080282E15,0.6915759491821302",
+        // Method 7: (x > 1000) && (a < x * 0.75f)
+        "664.0791015625,1328.158203125,Infinity,4.90100553385586E-91,Infinity,1.0",
+        // Method 2: 0.5 < x < 1.1, x * 0.75f < a
+        "0.9759566783905029,1.0735523700714111,0.33659577343416824,0.33179703084688433,0.6778671124302277,0.6682029691531157",
+        // Method 3: 0.5 < x < 1.1, x * 0.75f > a
+        "0.4912221431732178,0.9824442863464355,0.2840949896471149,0.1575143024618326,1.519518937513272,0.8424856975381674",
+    })
+    void testIGammaPolicy(double a, double x, double upper, double q, double lower, double p) {
+        // Low iterations should fail to converge
+        final Policy pol1 = new Policy(0x1.0p-52, 1);
+        Assertions.assertThrows(ArithmeticException.class, () -> BoostGamma.tgamma(a, x, pol1), "upper");
+        Assertions.assertThrows(ArithmeticException.class, () -> BoostGamma.tgammaLower(a, x, pol1), "lower");
+        Assertions.assertThrows(ArithmeticException.class, () -> BoostGamma.gammaP(a, x, pol1), "p");
+        Assertions.assertThrows(ArithmeticException.class, () -> BoostGamma.gammaQ(a, x, pol1), "q");
+
+        // Low epsilon should not be as accurate
+        final Policy pol2 = new Policy(1e-3, Integer.MAX_VALUE);
+
+        // Innore infinite
+        if (Double.isFinite(upper)) {
+            final double u1 = BoostGamma.tgamma(a, x);
+            final double u2 = BoostGamma.tgamma(a, x, pol2);
+            assertCloser("upper", upper, u1, u2);
+        }
+        if (Double.isFinite(lower)) {
+            final double l1 = BoostGamma.tgammaLower(a, x);
+            final double l2 = BoostGamma.tgammaLower(a, x, pol2);
+            assertCloser("lower", lower, l1, l2);
+        }
+
+        // Ignore 0 or 1
+        if ((int) p != p) {
+            final double p1 = BoostGamma.gammaP(a, x);
+            final double p2 = BoostGamma.gammaP(a, x, pol2);
+            assertCloser("p", p, p1, p2);
+        }
+        if ((int) q != q) {
+            final double q1 = BoostGamma.gammaQ(a, x);
+            final double q2 = BoostGamma.gammaQ(a, x, pol2);
+            assertCloser("q", q, q1, q2);
+        }
+    }
+
+    @Test
+    void testIGammaPolicy1() {
+        // a >= MAX_FACTORIAL && !normalised; invert && (a * 4 < x)
+        final double a = 230.1575469970703125;
+        final double x = 23015.75390625;
+        // expected ~ 0.95e-8996
+        final double upper = 0;
+        final double u1 = BoostGamma.tgamma(a, x);
+        Assertions.assertEquals(upper, u1);
+        final Policy pol1 = new Policy(0x1.0p-52, 1);
+        Assertions.assertThrows(ArithmeticException.class, () -> BoostGamma.tgamma(a, x, pol1), "upper");
+        // Not possible to test the result is not as close to zero with a lower epsilon
+    }
+
+    @Test
+    void testIGammaPolicy2() {
+        // a >= MAX_FACTORIAL && !normalised; !invert && (a > 4 * x)
+        final double a = 5823.5341796875;
+        final double x = 1.0;
+        final double lower = 0.6318201301512319242829e-4;
+        final double l1 = BoostGamma.tgammaLower(a, x);
+        Assertions.assertEquals(lower, l1, lower * 1e-10);
+        final Policy pol1 = new Policy(0x1.0p-52, 1);
+        Assertions.assertThrows(ArithmeticException.class, () -> BoostGamma.tgammaLower(a, x, pol1), "lower");
+        final Policy pol2 = new Policy(1e-3, Integer.MAX_VALUE);
+        assertCloser("lower", lower, l1, BoostGamma.tgammaLower(a, x, pol2));
+    }
+
+    @Test
+    void testIGammaPolicy3() {
+        // a >= MAX_FACTORIAL && !normalised; other
+        // In this case the regularized result is first computed then scaled back.
+        // The regularized result is typically around 0.5 and is
+        // computed without iteration with the Temme algorithm (method 5).
+        // No cases exist in the current test data that require iteration.
+        // We can check the iteration policy is used for one case.
+        final double a = 53731.765625;
+        final double x = 26865.8828125;
+        final double lower = Double.POSITIVE_INFINITY;
+        final double l1 = BoostGamma.tgammaLower(a, x);
+        Assertions.assertEquals(lower, l1);
+        final Policy pol1 = new Policy(0x1.0p-52, 1);
+        Assertions.assertThrows(ArithmeticException.class, () -> BoostGamma.tgammaLower(a, x, pol1), "lower");
+    }
+
+    /**
+     * Assert x is closer to the expected result than y.
+     */
+    private static void assertCloser(String msg, double expected, double x, double y) {
+        final double dx = Math.abs(expected - x);
+        final double dy = Math.abs(expected - y);
+        Assertions.assertTrue(dx < dy,
+            () -> String.format("%s %s : %s (%s) : %s (%s)", msg, expected, x, dx, y, dy));
+    }
+
+    /**
+     * Test incomplete gamma function with large X. This is a subset of the test data
+     * to isolate the use of the asymptotic approximation for the upper gamma fraction.
+     */
+    @ParameterizedTest
+    @EnumSource(value = BiTestCase.class, mode = Mode.MATCH_ANY, names = {"IGAMMA_LARGE_X.*"})
+    void testIGammaLargeX(BiTestCase tc) {
+        assertFunction(tc);
+    }
+
+    @Test
+    void testIGammaAsymptoticApproximationFailsOnVeryLargeX() {
+        final double a = 1e30;
+        final double x = a + Math.ulp(a);
+        // The aymptotic approximation can be used as a < x:
+        Assertions.assertTrue(a < x);
+        // The term is too big to subtract small integers
+        Assertions.assertEquals(a, a - 1);
+
+        // This will not converge as the term will not reduce.
+        // Limit the iterations to a million.
+        final Policy pol = new Policy(Math.ulp(1.0), 10000000);
+        Assertions.assertThrows(ArithmeticException.class,
+            () -> BoostGamma.incompleteTgammaLargeX(a, x, pol));
+    }
+
+    /**
+     * Test the Boost 1_77_0 switch to the asymptotic approximation results in
+     * less accurate results for Q.
+     *
+     * <p>Note: @Order annotations are used on these methods to collect them together
+     * if outputting the summary to stdout.
+     */
+    @ParameterizedTest
+    @ValueSource(strings = {"igamma_int_data.csv", "igamma_med_data.csv", "igamma_big_data.csv"})
+    @Order(1)
+    void testGammaQLargeXOriginal(String datafile) throws Exception {
+        assertIgammaLargeX("Boost", datafile, true, USE_ASYM_APPROX, USE_ASYM_APPROX, false);
+    }
+
+    /**
+     * Test the Boost 1_77_0 switch to the asymptotic approximation results in
+     * less accurate results for P.
+     */
+    @ParameterizedTest
+    @ValueSource(strings = {"igamma_int_data.csv", "igamma_med_data.csv", "igamma_big_data.csv"})
+    @Order(1)
+    void testGammaPLargeXOriginal(String datafile) throws Exception {
+        assertIgammaLargeX("Boost", datafile, false, USE_ASYM_APPROX, USE_ASYM_APPROX, false);
+    }
+
+    /**
+     * Test an updated switch to the asymptotic approximation results in
+     * more accurate results for Q.
+     */
+    @ParameterizedTest
+    @ValueSource(strings = {"igamma_int_data.csv", "igamma_med_data.csv", "igamma_big_data.csv"})
+    @Order(1)
+    void testGammaQLargeX(String datafile) throws Exception {
+        assertIgammaLargeX("Commons", datafile, true, getLargeXTarget(), getUseAsymApprox(), true);
+    }
+
+    /**
+     * Test an updated switch to the asymptotic approximation results in
+     * more accurate results for P.
+     */
+    @ParameterizedTest
+    @ValueSource(strings = {"igamma_int_data.csv", "igamma_med_data.csv", "igamma_big_data.csv"})
+    @Order(1)
+    void testGammaPLargeX(String datafile) throws Exception {
+        assertIgammaLargeX("Commons", datafile, false, getLargeXTarget(), getUseAsymApprox(), true);
+    }
+
+    /**
+     * @return Predicate to identify target data for igamma suitable for the asymptotic approximation.
+     */
+    private static DoubleDoubleBiPredicate getLargeXTarget() {
+        // Target the data that is computed using this method in Boost.
+        // It will test that the method switch is an improvement.
+        return USE_ASYM_APPROX;
+
+        // Target all data that is computed using this method in Commons numbers.
+        // It will test that when the method is switched it
+        // will not make the computation worse.
+        //return getUseAsymApprox();
+
+        // Allow more data to be tested.
+        // This predicate returns all valid data. Use it for testing but note that
+        // most data is not suitable for the large x approximation.
+        //return (a, x) -> !isIntOrHalfInt(a, x) && x >= 1.1 && (a < x);
+    }
+
+    /**
+     * @return Predicate to identify when to use the asymptotic approximation.
+     */
+    private static DoubleDoubleBiPredicate getUseAsymApprox() {
+        // The asymptotic approximation is suitable for large x.
+        // It sums terms starting from 1 until convergence.
+        // term_n = term_(n-1) * (a-n) / z
+        // term_0 = 1
+        // Terms will get smaller if a < z.
+        // The Boost condition is:
+        // (x > 1000) && ((a < x) || (Math.abs(a - 50) / x < 1))
+        //
+        // This is not suitable if a ~ x and x is very large. The series takes
+        // too many iterations to converge. With limited precision it may not be
+        // possible to reduce the size of a, e.g. 1e16 - 1 == 1e16, thus
+        // the terms do not reduce in size if decremented directly and take
+        // many iterations to build a counter n that can be subtracted: a - n
+
+        // Experimental:
+        // Estimate the number of iterations.
+        //
+        // Assuming the term is reduced by a/z:
+        // term_n = (a/z)^n
+        // Setting the limit for term_n == epsilon (2^-52):
+        // n = log(epsilon) / log(a/z)
+        // Note: log(2^-52) is approximately -36.
+        // Estimate of n is high given the factor is (a-i)/z for iteration i.
+
+        // int limit = 1000;
+        // return (a, x) -> (x > 1000) && (a < x) && (-36 / Math.log(a / x) < limit);
+
+        // Simple:
+        //
+        // Target only data that will quickly converge.
+        // Not that there is loss of precision in the terms when a ~ z.
+        // The closer a/z is to 1 the more bits are lost in the result as the
+        // terms are inexact and this error is compounded by a large number of terms
+        // in the series.
+        // This condition ensures the asymptotic approximation is used when x -> infinity
+        // and a << x.
+        // Using the logic from above an overestimate of the maximum iterations is:
+        // threshold   value      iterations
+        // 1 - 2^-1    0.5        52
+        // 1 - 2^-2    0.75       125
+        // 1 - 2^-3    0.875      270
+        // 1 - 2^-4    0.9375     558
+        // 1 - 2^-5    0.96875    1135
+        // 1 - 2^-6    0.984375   2289
+        return (a, x) -> (x > 1000) && (a < x * 0.75);
+    }
+
+    /**
+     * Read the regularized incomplete gamma data and compare the result with or
+     * without the asymptotic approximation for large X. This test verifies the
+     * conditions used for the asymptotic approximation.
+     *
+     * <p>All applicable target data is evaluated with the incomplete gamma function,
+     * either without the asymptotic approximation or using it when allowed to
+     * by the specified predicate. The final RMS error for the two methods
+     * with or without the asymptotic approximation applied are compared. The test
+     * asserts if the change is an improvement or not.
+     *
+     * <p>Prior to Boost 1_68_0 the asymptotic approximation was not used. It was
+     * added to support large x. Using the conditions from Boost 1_77_0 to switch to
+     * the asymptotic approximation results is worse accuracy.
+     *
+     * <p>This test can be revisited if the Boost reference code is updated for the
+     * conditions under which the asymptotic approximation is used. It is possible
+     * to adjust the condition directly in this test and determine if the RMS error
+     * improves using the asymptotic approximation.
+     *
+     * @param name Test name
+     * @param datafile Test data file
+     * @param invert true to compute the upper value Q (default is lower P)
+     * @param targetData Condition to identify the target data
+     * @param useAsymp Condition to use the asymptotic approximation
+     * @param expectImprovement true if the RMS error is expected to improve
+     * @throws Exception If an error occurs reading the test files
+     */
+    private static void assertIgammaLargeX(String name, String datafile, boolean invert,
+            DoubleDoubleBiPredicate targetData,
+            DoubleDoubleBiPredicate useAsymp,
+            boolean expectImprovement) throws Exception {
+        final TestUtils.ErrorStatistics e1 = new TestUtils.ErrorStatistics();
+        final TestUtils.ErrorStatistics e2 = new TestUtils.ErrorStatistics();
+
+        final Policy pol = BoostGamma.Policy.getDefault();
+        final DoubleBinaryOperator without = (a, x) -> gammaIncompleteImp(a, x, invert, pol, NO_ASYM_APPROX);
+        final DoubleBinaryOperator with = (a, x) -> gammaIncompleteImp(a, x, invert, pol, useAsymp);
+        final int expectedField = invert ? 3 : 5;
+
+        // Count how many times the asymptotic approximation was used
+        int count = 0;
+
+        final String functionName = datafile + " " + name + (invert ? " Q" : " P");
+
+        // Set this to allow all data to be processed.
+        // If set to negative any failures will be output to stdout (useful to debugging).
+        final double tolerance = 1000;
+
+        try (DataReader in = new DataReader(datafile)) {
+            while (in.next()) {
+                final double a = in.getDouble(0);
+                final double x = in.getDouble(1);
+
+                // Test if this is target data
+                if (targetData.test(a, x)) {
+                    final BigDecimal expected = in.getBigDecimal(expectedField);
+
+                    // Ignore 0 or 1 results.
+                    // This test is interested in values that can be computed.
+                    final double value = expected.doubleValue();
+                    if ((int) value != value) {
+                        final double v1 = without.applyAsDouble(a, x);
+                        final double v2 = with.applyAsDouble(a, x);
+                        // Check if the asymptoptic approximation is used
+                        if (useAsymp.test(a, x)) {
+                            count++;
+                        }
+
+                        TestUtils.assertEquals(expected, v1, tolerance, e1::add,
+                            () -> functionName + " " + a + ", x=" + x);
+                        TestUtils.assertEquals(expected, v2, tolerance, e2::add,
+                            () -> functionName + " asymp " + a + ", x=" + x);
+                    }
+                }
+            }
+        }
+        // Use relaxed tolerances to allow the big data to pass.
+        // This test is mainly interested in checking a switch to the asymptotic approximation
+        // does not make the computation worse.
+        final double maxTolerance = 600;
+        final double rmsTolerance = 600;
+        if (e1.size() != 0) {
+            assertRms(TestError.of(functionName + "           ", maxTolerance, rmsTolerance), e1);
+            assertRms(TestError.of(functionName + " asymp " +
+                    String.format("%4d", count), maxTolerance, rmsTolerance), e2);
+            if (expectImprovement) {
+                // Better or equal. Equal applies if the asymptotic approximation was not used
+                // or computed the same result.
+                Assertions.assertTrue(e2.getRMS() <= e1.getRMS());
+            } else {
+                // Worse
+                Assertions.assertTrue(e2.getRMS() > e1.getRMS());
+            }
+        }
+    }
+
+    /**
+     * Test gamma Q with a value {@code a} so small that {@code tgamma(a) == inf}.
+     * A direct port of the Boost code without changes will fail this test.
+     */
+    @ParameterizedTest
+    @CsvSource({
+        // This data needs verifying. Matlab, maxima and Boost all compute different values.
+        // The values are the exponent of 2 to ensure tiny values are machine representable.
+        // The following are from Boost using long double. This at least verifies that
+        // the updated code computes close to the long double equivalent in the source
+        // implementation.
+        "-1074,-1074,3.67517082493672000135e-321",
+        "-1074,-1073,3.67174622284245611609e-321",
+        "-1074,-1072,3.66832162074819223109e-321",
+        "-1074,-1000,3.4217502699611925034e-321",
+        "-1074,-100,3.3960838512369590694e-322",
+        "-1074,-10,3.13990203220802065461e-323",
+        "-1074,-5,1.44243837956526236902e-323",
+        "-1030,-1074,6.46542888972966038541e-308",
+        "-1030,-1073,6.45940426601262169248e-308",
+        "-1030,-1072,6.45337964229558300003e-308",
+        "-1030,-1000,6.01960673466879712923e-308",
+        "-1030,-100,5.97445389333973743599e-309",
+        "-1030,-10,5.52377407118433787103e-310",
+        "-1030,-5,2.53756443309180378013e-310",
+    })
+    void testGammaQTinyA(int ba, int bx, double q) {
+        final double a = Math.scalb(1.0, ba);
+        final double x = Math.scalb(1.0, bx);
+        final double actualQ = BoostGamma.gammaQ(a, x);
+
+        // Without changes to the Boost code that normalises by tgamma(a)
+        // the result is zero. Check this does not occur.
+        Assertions.assertNotEquals(0.0, actualQ);
+
+        // Change tolerance for very small sub-normal result
+        if (q < 1e-320) {
+            // Within 1 ULP
+            TestUtils.assertEquals(q, actualQ, 1);
+        } else {
+            // Sub-normal argument a.
+            // The worst case here is 260 ULP. The relative error is OK.
+            final double relError = 1e-13;
+            Assertions.assertEquals(q, actualQ, q * relError);
+        }
+    }
+
+    /**
+     * Gamma function with Lanczos support.
+     *
+     * <p>This is the original Boost implementation here for reference. For {@code z}
+     * in the range [-20, 20] the function is not as accurate as the NSWC
+     * Library of Mathematics Subroutines.
+     *
+     * <p>This function and the tests that exercise it can be revisited if
+     * improvements are made to the reference implementation.
+     *
+     * @param z Argument z
+     * @return gamma value
+     */
+    static double tgammaOriginal(double z) {
+        double result = 1;
+
+        if (z <= 0) {
+            if (Math.rint(z) == z) {
+                // Pole error
+                return Double.NaN;
+            }
+            if (z <= -20) {
+                result = BoostGamma.tgamma(-z) * BoostGamma.sinpx(z);
+                // Checks for overflow, sub-normal or underflow have been removed.
+                return -Math.PI / result;
+            }
+
+            // shift z to > 1:
+            // Q. Is this comment old? The shift is to > 0.
+            // Spot tests in the Boost resources test z -> 0 due to a bug report.
+            while (z < 0) {
+                result /= z;
+                z += 1;
+            }
+        }
+        //
+        // z is > 0
+        //
+
+        // Updated condition from z < MAX_FACTORIAL
+        if ((Math.rint(z) == z) && (z <= MAX_FACTORIAL + 1)) {
+            // Gamma(n) = (n-1)!
+            result *= FACTORIAL[(int) z - 1];
+        } else if (z < ROOT_EPSILON) {
+            result *= 1 / z - EULER;
+        } else {
+            result *= Lanczos.lanczosSum(z);
+            final double zgh = z + Lanczos.g() - 0.5;
+            final double lzgh = Math.log(zgh);
+            if (z * lzgh > LOG_MAX_VALUE) {
+                // we're going to overflow unless this is done with care:
+                if (lzgh * z / 2 > LOG_MAX_VALUE) {
+                    return Double.POSITIVE_INFINITY;
+                }
+                final double hp = Math.pow(zgh, (z / 2) - 0.25);
+                result *= hp / Math.exp(zgh);
+                // Check for overflow has been removed:
+                // if (Double.MAX_VALUE / hp < result) ... overflow
+                result *= hp;
+            } else {
+                result *= Math.pow(zgh, z - 0.5) / Math.exp(zgh);
+            }
+        }
+        return result;
+    }
+
+    /**
+     * Computes the value of \( \Gamma(x) \).
+     *
+     * <p>Based on the <em>NSWC Library of Mathematics Subroutines</em> double
+     * precision implementation, {@code DGAMMA}.
+     *
+     * <p>This is a partial implementation of the Commons Numbers 1.0 implementation
+     * for testing the {@link LanczosApproximation}.
+     * The Lanczos support is valid for {@code x > 20}.
+     *
+     * @param x Argument ({@code x > 20})
+     * @return \( \Gamma(x) \)
+     */
+    static double gammaOriginal(double x) {
+        Assertions.assertTrue(x > LANCZOS_THRESHOLD, "Unsupported x: " + x);
+
+        final double y = x + LanczosApproximation.g() + 0.5;
+        // Constant 2.506... is sqrt(2 pi)
+        return 2.506628274631000502 / x *
+            Math.pow(y, x + 0.5) *
+            Math.exp(-y) * LanczosApproximation.value(x);
+    }
+
+    /**
+     * Compute incomplete gamma Q assuming large X without the asymptotic approximation.
+     *
+     * @param a Argument a
+     * @param x Argument x
+     * @return incomplete gamma Q
+     */
+    private static double igammaQLargeXNoAsym(double a, double x) {
+        return gammaIncompleteImp(a, x, true, Policy.getDefault(), NO_ASYM_APPROX);
+    }
+
+    /**
+     * Compute incomplete gamma Q assuming large X without the asymptotic approximation.
+     *
+     * @param a Argument a
+     * @param x Argument x
+     * @return incomplete gamma P
+     */
+    private static double igammaPLargeXNoAsym(double a, double x) {
+        return gammaIncompleteImp(a, x, false, Policy.getDefault(), NO_ASYM_APPROX);
+    }
+
+    /**
+     * Compute incomplete gamma Q assuming large X.
+     * Uses the asymptotic approximation for large argument, see: https://dlmf.nist.gov/8.11#E2.
+     *
+     * @param a Argument a
+     * @param x Argument x
+     * @return incomplete gamma Q
+     */
+    private static double igammaQLargeXWithAsym(double a, double x) {
+        // Force use of the asymptotic approximation
+        return gammaIncompleteImp(a, x, true, Policy.getDefault(), ASYM_APPROX);
+    }
+
+    /**
+     * Compute incomplete gamma P assuming large X.
+     * Uses the asymptotic approximation for large argument, see: https://dlmf.nist.gov/8.11#E2.
+     *
+     * @param a Argument a
+     * @param x Argument x
+     * @return incomplete gamma P
+     */
+    private static double igammaPLargeXWithAsym(double a, double x) {
+        // Force use of the asymptotic approximation
+        return gammaIncompleteImp(a, x, false, Policy.getDefault(), ASYM_APPROX);
+    }
+
+    /**
+     * Partial implementation of igamma for normalised and x > small threshold. This
+     * is used to test the switch to the asymptotic approximation for large x. The
+     * predicate to determine the switch is passed as an argument. Adapted from
+     * {@code boost::math::detail::gamma_incomplete_imp}.
+     *
+     * @param a Argument a
+     * @param x Argument x
+     * @param invert true to compute the upper value Q (default is lower value P)
+     * @param pol Function evaluation policy
+     * @param useAsymApprox Predicate to determine when to use the asymptotic approximation
+     * @return gamma value
+     */
+    private static double gammaIncompleteImp(double a, double x,
+            boolean invert, Policy pol, DoubleDoubleBiPredicate useAsymApprox) {
+        if (Double.isNaN(a) || Double.isNaN(x) || a <= 0 || x < 0) {
+            return Double.NaN;
+        }
+
+        // Assumption for testing.
+        // Do not support int or half-int a.
+        // Do not support small x.
+        // These evaluations methods have been removed.
+        Assertions.assertFalse(isIntOrHalfInt(a, x), () -> "Invalid a : " + a);
+        Assertions.assertFalse(x < 1.1, () -> "Invalid x : " + x);
+
+        double result = 0;
+        int evalMethod;
+
+        // Configurable switch to the asymptotic approximation.
+        // The branch is used in Boost when:
+        // ((x > 1000) && ((a < x) || (Math.abs(a - 50) / x < 1)))
+        if (useAsymApprox.test(a, x)) {
+            // This case was added after Boost 1_68_0.
+            // See: https://github.com/boostorg/math/issues/168
+            // It is a source of error when a ~ z as the asymptotic approximation
+            // sums terms t_n+1 = t_n * (a - n - 1) / z starting from t_0 = 1.
+            // These terms are close to 1 when a ~ z and the sum has many terms
+            // with reduced precision.
+
+            // calculate Q via asymptotic approximation:
+            invert = !invert;
+            evalMethod = 7;
+        } else {
+            //
+            // Begin by testing whether we're in the "bad" zone
+            // where the result will be near 0.5 and the usual
+            // series and continued fractions are slow to converge:
+            //
+            boolean useTemme = false;
+            if (a > 20) {
+                final double sigma = Math.abs((x - a) / a);
+                if (a > 200) {
+                    //
+                    // This limit is chosen so that we use Temme's expansion
+                    // only if the result would be larger than about 10^-6.
+                    // Below that the regular series and continued fractions
+                    // converge OK, and if we use Temme's method we get increasing
+                    // errors from the dominant erfc term as it's (inexact) argument
+                    // increases in magnitude.
+                    //
+                    if (20 / a > sigma * sigma) {
+                        useTemme = true;
+                    }
+                } else {
+                    // Note in this zone we can't use Temme's expansion for
+                    // types longer than an 80-bit real:
+                    // it would require too many terms in the polynomials.
+                    if (sigma < 0.4) {
+                        useTemme = true;
+                    }
+                }
+            }
+            if (useTemme) {
+                evalMethod = 5;
+            } else {
+                //
+                // Regular case where the result will not be too close to 0.5.
+                //
+                // Changeover here occurs at P ~ Q ~ 0.5
+                // Note that series computation of P is about x2 faster than continued fraction
+                // calculation of Q, so try and use the CF only when really necessary,
+                // especially for small x.
+                //
+                if (x - (1 / (3 * x)) < a) {
+                    evalMethod = 2;
+                } else {
+                    evalMethod = 4;
+                    invert = !invert;
+                }
+            }
+        }
+
+        switch (evalMethod) {
+        case 2:
+            // Compute P:
+            result = BoostGamma.regularisedGammaPrefix(a, x);
+            if (result != 0) {
+                //
+                // If we're going to be inverting the result then we can
+                // reduce the number of series evaluations by quite
+                // a few iterations if we set an initial value for the
+                // series sum based on what we'll end up subtracting it from
+                // at the end.
+                // Have to be careful though that this optimization doesn't
+                // lead to spurious numeric overflow. Note that the
+                // scary/expensive overflow checks below are more often
+                // than not bypassed in practice for "sensible" input
+                // values:
+                //
+
+                double initValue = 0;
+                boolean optimisedInvert = false;
+                if (invert) {
+                    // Assume normalised=true
+                    initValue = 1;
+                    initValue /= result;
+                    initValue *= -a;
+                    optimisedInvert = true;
+                }
+                result *= BoostGamma.lowerGammaSeries(a, x, initValue, pol) / a;
+                if (optimisedInvert) {
+                    invert = false;
+                    result = -result;
+                }
+            }
+            break;
+        case 4:
+            // Compute Q:
+            result = BoostGamma.regularisedGammaPrefix(a, x);
+            if (result != 0) {
+                result *= BoostGamma.upperGammaFraction(a, x, pol);
+            }
+            break;
+        case 5:
+            // Call 53-bit version
+            result = BoostGamma.igammaTemmeLarge(a, x);
+            if (x >= a) {
+                invert = !invert;
+            }
+            break;
+        case 7:
+            // x is large,
+            // Compute Q:
+            result = BoostGamma.regularisedGammaPrefix(a, x);
+            result /= x;
+            if (result != 0) {
+                result *= BoostGamma.incompleteTgammaLargeX(a, x, pol);
+            }
+            break;
+        default:
+            Assertions.fail(String.format("Unknown evaluation method: %s %s", a, x));
+        }
+
+        if (result > 1) {
+            result = 1;
+        }
+        if (invert) {
+            result = 1 - result;
+        }
+
+        return result;
+    }
+
+    /**
+     * Test if a is small and an integer or half-integer.
+     *
+     * @param a Argument a
+     * @param x Argument x
+     * @return true if an integer or half integer
+     */
+    private static boolean isIntOrHalfInt(double a, double x) {
+        boolean isInt;
+        boolean isHalfInt;
+        final boolean isSmallA = (a < 30) && (a <= x + 1) && (-x < LOG_MIN_VALUE);
+        if (isSmallA) {
+            final double fa = Math.floor(a);
+            isInt = fa == a;
+            isHalfInt = !isInt && (Math.abs(fa - a) == 0.5f);
+        } else {
+            isInt = isHalfInt = false;
+        }
+        return isInt || isHalfInt;
+    }
+
+    /**
+     * Incomplete tgamma for large X.
+     *
+     * <p>Uses the default epsilon and iterations.
+     *
+     * @param a Argument a
+     * @param x Argument x
+     * @return incomplete tgamma
+     */
+    private static double incompleteTgammaLargeX(double a, double x) {
+        return BoostGamma.incompleteTgammaLargeX(a, x, BoostGamma.Policy.getDefault());
+    }
+
+    /**
+     * Natural logarithm of the derivative of the regularised lower incomplete gamma.
+     *
+     * <pre>
+     * a * log(x) - log(x) - x - lgamma(a)
+     * </pre>
+     *
+     * <p>Always computes using logs.
+     *
+     * @param a Argument a
+     * @param x Argument x
+     * @return log p derivative
+     */
+    private static double logGammaPDerivative1(double a, double x) {
+        if (a == 1) {
+            // Special case
+            return -x;
+        }
+        // No argument checks
+        return a * Math.log(x) - x - BoostGamma.lgamma(a) - Math.log(x);
+
+        //// Note:
+        //// High precision. Only marginally lowers the error.
+        //return new BigDecimal(a).subtract(BigDecimal.ONE)
+        //    .multiply(new BigDecimal(Math.log(x)))
+        //    .subtract(new BigDecimal(x))
+        //    .subtract(new BigDecimal(BoostGamma.lgamma(a))).doubleValue();
+    }
+
+    /**
+     * Natural logarithm of the derivative of the regularised lower incomplete gamma.
+     *
+     * <pre>
+     * a * log(x) - log(x) - x - lgamma(a)
+     * </pre>
+     *
+     * <p>Computed using the logarithm of the gamma p derivative if this is finite; else
+     * uses logs.
+     *
+     * @param a Argument a
+     * @param x Argument x
+     * @return log p derivative
+     */
+    private static double logGammaPDerivative2(double a, double x) {
+        //
+        // Usual error checks first:
+        //
+        if (Double.isNaN(a) || Double.isNaN(x) || a <= 0 || x < 0) {
+            return Double.NaN;
+        }
+        //
+        // Now special cases:
+        //
+        if (x == 0) {
+            return (a > 1) ? Double.NEGATIVE_INFINITY : (a == 1) ? 0 : Double.POSITIVE_INFINITY;
+        }
+        if (a == 1) {
+            return -x;
+        }
+        //
+        // Normal case:
+        //
+
+        // Note: This may be computing log(exp(result)) for a round-trip of 'result'.
+        // Variations were created that:
+        // 1. Called BoostGamma.regularisedGammaPrefix(a, x) and processed the result.
+        //    This avoids a log(exp(result)) round-trip.
+        // 2. Repeated the logic of BoostGamma.regularisedGammaPrefix(a, x) and directly
+        //    returned the log result.
+        // The variations may be faster but are no more accurate on the current test data.
+
+        final double v = BoostGamma.gammaPDerivative(a, x);
+        return Double.isFinite(v) && v != 0 ?
+            Math.log(v) :
+            logGammaPDerivative1(a, x);
+    }
+
+    /**
+     * Assert the function is close to the expected value.
+     *
+     * @param fun Function
+     * @param x Input value
+     * @param expected Expected value
+     * @param tolerance the tolerance
+     */
+    private static void assertClose(DoubleUnaryOperator fun, double x, double expected, int tolerance) {
+        final double actual = fun.applyAsDouble(x);
+        TestUtils.assertEquals(expected, actual, tolerance, null, () -> Double.toString(x));
+    }
+
+    /**
+     * Assert the function is close to the expected value.
+     *
+     * @param fun Function
+     * @param x Input value
+     * @param y Input value
+     * @param expected Expected value
+     * @param tolerance the tolerance
+     */
+    private static void assertClose(DoubleBinaryOperator fun, double x, double y, double expected, int tolerance) {
+        final double actual = fun.applyAsDouble(x, y);
+        TestUtils.assertEquals(expected, actual, tolerance, null, () -> x + ", " + y);
+    }
+
+    /**
+     * Assert the function using extended precision.
+     *
+     * @param tc Test case
+     */
+    private static void assertFunction(TestCase tc) {
+        final TestUtils.ErrorStatistics stats = new TestUtils.ErrorStatistics();
+        try (DataReader in = new DataReader(tc.getFilename())) {
+            while (in.next()) {
+                try {
+                    final double x = in.getDouble(0);
+                    final BigDecimal expected = in.getBigDecimal(tc.getExpectedField());
+                    final double actual = tc.getFunction().applyAsDouble(x);
+                    TestUtils.assertEquals(expected, actual, tc.getTolerance(), stats::add,
+                        () -> tc + " x=" + x);
+                } catch (final NumberFormatException ex) {
+                    Assertions.fail("Failed to load data: " + Arrays.toString(in.getFields()), ex);
+                }
+            }
+        } catch (final IOException ex) {
+            Assertions.fail("Failed to load data: " + tc.getFilename(), ex);
+        }
+
+        assertRms(tc, stats);
+    }
+
+    /**
+     * Assert the function using extended precision.
+     *
+     * @param tc Test case
+     */
+    private static void assertFunction(BiTestCase tc) {
+        final TestUtils.ErrorStatistics stats = new TestUtils.ErrorStatistics();
+        try (DataReader in = new DataReader(tc.getFilename())) {
+            while (in.next()) {
+                try {
+                    final double x = in.getDouble(0);
+                    final double y = in.getDouble(1);
+                    final BigDecimal expected = in.getBigDecimal(tc.getExpectedField());
+                    final double actual = tc.getFunction().applyAsDouble(x, y);
+                    TestUtils.assertEquals(expected, actual, tc.getTolerance(), stats::add,
+                        () -> tc + " x=" + x + ", y=" + y);
+                } catch (final NumberFormatException ex) {
+                    Assertions.fail("Failed to load data: " + Arrays.toString(in.getFields()), ex);
+                }
+            }
+        } catch (final IOException ex) {
+            Assertions.fail("Failed to load data: " + tc.getFilename(), ex);
+        }
+
+        assertRms(tc, stats);
+    }
+
+    /**
+     * Class to read data fields from a test resource file.
+     */
+    private static class DataReader implements AutoCloseable {
+        /** Comment character. */
+        private static final char COMMENT = '#';
+        /** Pattern to split data fields. */
+        private static final Pattern FIELD_PATTERN = Pattern.compile("[, ]+");
+
+        /** Input to read. */
+        private final BufferedReader in;
+
+        /** The current set of fields. */
+        private String[] tokens;
+
+        /**
+         * @param filename Resource filename to read
+         */
+        DataReader(String filename) {
+            final InputStream resourceAsStream = this.getClass().getResourceAsStream(filename);
+            Assertions.assertNotNull(resourceAsStream, () -> "Could not find resource " + filename);
+            in = new BufferedReader(new InputStreamReader(resourceAsStream));
+        }
+
+        /**
+         * Read the next line of data fields.
+         *
+         * @return true if data is available
+         * @throws IOException Signals that an I/O exception has occurred.
+         */
+        boolean next() throws IOException {
+            tokens = null;
+            for (String line = in.readLine(); line != null; line = in.readLine()) {
+                if (line.isEmpty() || line.charAt(0) == COMMENT || line.trim().isEmpty()) {
+                    continue;
+                }
+                tokens = FIELD_PATTERN.split(line);
+                return true;
+            }
+            return false;
+        }
+
+        /**
+         * Gets the double from the field.
+         *
+         * @param i Field index
+         * @return the number
+         * @see #next()
+         * @throws NumberFormatException if the field cannot be parsed as a double
+         * @throws NullPointerException if no field data is available
+         * @throws IndexOutOfBoundsException if the field index is invalid
+         */
+        double getDouble(int i) {
+            return Double.parseDouble(tokens[i]);
+        }
+
+        /**
+         * Gets the BigDecimal from the field.
+         *
+         * @param i Field index
+         * @return the number
+         * @see #next()
+         * @throws NumberFormatException if the field cannot be parsed as a BigDecimal
+         * @throws NullPointerException if no field data is available
+         * @throws IndexOutOfBoundsException if the field index is invalid
+         */
+        BigDecimal getBigDecimal(int i) {
+            return new BigDecimal(tokens[i]);
+        }
+
+        /**
+         * Gets the current fields. This is returned as a reference.
+         *
+         * <p>This is null if no fields are available for reading.
+         *
+         * @return the fields
+         * @see #next()
+         */
+        String[] getFields() {
+            return tokens;
+        }
+
+        @Override
+        public void close() throws IOException {
+            in.close();
+        }
+    }
+
+    /**
+     * Assert the Root Mean Square (RMS) error of the function is below the allowed
+     * maximum for the specified TestError.
+     *
+     * @param te Test error
+     * @param stats Error statistics
+     */
+    private static void assertRms(TestError te, TestUtils.ErrorStatistics stats) {
+        final double rms = stats.getRMS();
+        //debugRms(te.toString(), stats.getMaxAbs(), rms, stats.getMean(), stats.size());
+        Assertions.assertTrue(rms <= te.getRmsTolerance(),
+            () -> String.format("%s RMS %s < %s", te, rms, te.getRmsTolerance()));
+    }
+
+    /**
+     * Output the maximum and RMS ulp for the named test. Used for reporting the
+     * errors and setting appropriate test tolerances. This is relevant across
+     * different JDK implementations where the java.util.Math functions used in
+     * BoostGamma may compute to different accuracy.
+     *
+     * @param name Test name
+     * @param maxAbsUlp Maximum |ulp|
+     * @param rmsUlp RMS ulp
+     * @param meanUlp Mean ulp
+     * @param size Number of measurements
+     */
+    private static void debugRms(String name, double maxAbsUlp, double rmsUlp, double meanUlp, int size) {
+        // CHECKSTYLE: stop regexp
+        System.out.printf("%-25s   max %10.6g   RMS %10.6g   mean %14.6g  n %4d%n",
+            name, maxAbsUlp, rmsUlp, meanUlp, size);
+    }
+}
diff --git a/commons-numbers-gamma/src/test/java/org/apache/commons/numbers/gamma/BoostToolsTest.java b/commons-numbers-gamma/src/test/java/org/apache/commons/numbers/gamma/BoostToolsTest.java
new file mode 100644
index 0000000..fe5b744
--- /dev/null
+++ b/commons-numbers-gamma/src/test/java/org/apache/commons/numbers/gamma/BoostToolsTest.java
@@ -0,0 +1,263 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.numbers.gamma;
+
+import java.math.BigDecimal;
+import java.util.function.DoubleSupplier;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.CsvSource;
+import org.junit.jupiter.params.provider.ValueSource;
+
+/**
+ * Tests for {@link BoostTools}.
+ */
+class BoostToolsTest {
+
+    @ParameterizedTest
+    @ValueSource(doubles = {0.5, 0.2})
+    void testSumSeries(double x) {
+        final double expected = Math.log1p(x);
+
+        final int maxTerms = 1000;
+        for (final double eps : new double[] {1e-6, 1e-10, Math.ulp(1.0)}) {
+            final DoubleSupplier fun = new LogApXSeries(1, x);
+            final double actual = BoostTools.sumSeries(fun, eps, maxTerms);
+            Assertions.assertEquals(expected, actual, expected * eps, () -> "eps: " + eps);
+        }
+    }
+
+    @ParameterizedTest
+    @ValueSource(doubles = {0.5, 0.2})
+    void testSumSeriesWithInitialValue(double x) {
+        final double a = 2.5;
+        final double expected = Math.log(a + x);
+
+        final int maxTerms = 1000;
+        for (final double eps : new double[] {1e-6, 1e-10, Math.ulp(1.0)}) {
+            final DoubleSupplier fun = new LogApXSeries(a, x);
+            final double actual = BoostTools.sumSeries(fun, eps, maxTerms, Math.log(a));
+            Assertions.assertEquals(expected, actual, expected * eps, () -> "eps: " + eps);
+        }
+    }
+
+    @Test
+    void testSumSeriesThrows() {
+        final double eps = Math.ulp(1.0);
+        final double x = 0.01;
+
+        // This works when enough terms are used
+        final double expected = Math.log1p(x);
+        Assertions.assertEquals(expected,
+            BoostTools.sumSeries(new LogApXSeries(1, x), eps, 50, 0), expected * eps);
+
+        // 3 terms are not enough to converge
+        final DoubleSupplier fun = new LogApXSeries(1, x);
+        Assertions.assertThrows(ArithmeticException.class, () -> BoostTools.sumSeries(fun, eps, 3));
+    }
+
+    /**
+     * Test sum series with an invalid epsilon. For convergence to work the relative error
+     * epsilon should be above zero. Invalid values are set to the minimum epsilon
+     * and the result computed without an exception.
+     */
+    @ParameterizedTest
+    @ValueSource(doubles = {0, Double.NaN, -0.123})
+    void testSumSeriesWithEps(double eps) {
+        final double x = 0.01;
+
+        final double expected = Math.log1p(x);
+        Assertions.assertEquals(expected,
+            BoostTools.sumSeries(new LogApXSeries(1, x), eps, 50), Math.ulp(expected));
+    }
+
+    @ParameterizedTest
+    @ValueSource(doubles = {0.5, 0.2})
+    void testKahanSumSeries(double x) {
+        final double expected = Math.log1p(x);
+
+        final int maxTerms = 1000;
+        for (final double eps : new double[] {1e-6, 1e-10, Math.ulp(1.0)}) {
+            final DoubleSupplier fun = new LogApXSeries(1, x);
+            final double actual = BoostTools.kahanSumSeries(fun, eps, maxTerms);
+            Assertions.assertEquals(expected, actual, expected * eps, () -> "eps: " + eps);
+        }
+    }
+
+    @ParameterizedTest
+    @ValueSource(doubles = {0.5, 0.2})
+    void testKahanSumSeriesWithInitialValue(double x) {
+        final double a = 2.5;
+        final double expected = Math.log(a + x);
+
+        final int maxTerms = 1000;
+        for (final double eps : new double[] {1e-6, 1e-10, Math.ulp(1.0)}) {
+            final DoubleSupplier fun = new LogApXSeries(a, x);
+            final double actual = BoostTools.kahanSumSeries(fun, eps, maxTerms, Math.log(a));
+            Assertions.assertEquals(expected, actual, expected * eps, () -> "eps: " + eps);
+        }
+    }
+
+    @Test
+    void testKahanSumSeriesThrows() {
+        final double eps = Math.ulp(1.0);
+        final double x = 0.01;
+
+        // This works when enough terms are used
+        final double expected = Math.log1p(x);
+        Assertions.assertEquals(expected,
+            BoostTools.sumSeries(new LogApXSeries(1, x), eps, 50, 0), expected * eps);
+
+        // 3 terms are not enough to converge
+        final DoubleSupplier fun = new LogApXSeries(1, x);
+        Assertions.assertThrows(ArithmeticException.class, () -> BoostTools.kahanSumSeries(fun, eps, 3));
+    }
+
+    /**
+     * Test sum series with an invalid epsilon. For convergence to work the relative error
+     * epsilon should be above zero (unless a generated term is zero).
+     * Invalid values are set to the minimum epsilon
+     * and the result computed without an exception.
+     */
+    @ParameterizedTest
+    @ValueSource(doubles = {0, Double.NaN, -0.123})
+    void testKahanSumSeriesWithEps(double eps) {
+        final double x = 0.01;
+
+        final double expected = Math.log1p(x);
+        Assertions.assertEquals(expected,
+            BoostTools.kahanSumSeries(new LogApXSeries(1, x), eps, 50), Math.ulp(expected));
+    }
+
+    /**
+     * Test the Kahan sum is robust to cancellation using a series with terms
+     * that alternate in sign. Uses the series for log(1+x) - x.
+     */
+    @ParameterizedTest
+    @CsvSource({
+        // Results computed using maxima to 64 digits.
+        // x is machine representable as a double.
+        "0, 0, 0, 0",
+        "9.765625E-4,      -4.765269445411040391750919828133273881656662154637622414017262915e-7, 1.3, 0",
+        "-0.5,             -1.931471805599453094172321214581765680755001343602552541206800095e-1, 3,   0",
+        "-0.84130859375,   -9.994852100796609183345472280222483649740308246655652350831388108e-1, 14,  0",
+        "-0.8414306640625, -1.000132666546189484308487768061225710806999885159575693903185135,    5.5, 0.51",
+    })
+    void testKahanSumSeriesLog1pmx(double x, BigDecimal expected, double maxUlps1, double maxUlps2) {
+        final double eps = Math.ulp(1.0);
+        final int maxTerms = Integer.MAX_VALUE;
+        final double s1 = BoostTools.sumSeries(new Log1pmxSeries(x), eps, maxTerms);
+        final double s2 = BoostTools.kahanSumSeries(new Log1pmxSeries(x), eps, maxTerms);
+
+        // Standard sum is close
+        final double e1 = TestUtils.assertEquals(expected, s1, maxUlps1, "sum series");
+        // Kaham sum is close
+        final double e2 = TestUtils.assertEquals(expected, s2, maxUlps1, "Kaham sum series");
+        // Kaham sum is closer even with the same epsilon
+        Assertions.assertTrue(e1 == 0 || Math.abs(e2) < Math.abs(e1), () -> e2 + " < " + e1);
+
+        // Use 0 eps to use the minimum allowed by the function.
+        final double s3 = BoostTools.kahanSumSeries(new Log1pmxSeries(x), 0.0, maxTerms);
+        final double e3 = TestUtils.assertEquals(expected, s3, maxUlps2, "Kaham sum series with extra guard digits");
+        Assertions.assertTrue(e2 == 0 || Math.abs(e3) < Math.abs(e2), () -> e3 + " < " + e2);
+    }
+
+    @ParameterizedTest
+    @ValueSource(doubles = {0, -1, 2, -3, 4})
+    void testEvaluatePolynomial(double x) {
+        final double[] c1 = {7, -5, 2, 4};
+        final double expected1 = c1[3] * x * x * x + c1[2] * x * x + c1[1] * x + c1[0];
+        Assertions.assertEquals(expected1, BoostTools.evaluatePolynomial(c1, x), Math.ulp(expected1));
+
+        final double[] c2 = {-9, 3, -6};
+        final double expected2 = c2[2] * x * x + c2[1] * x + c2[0];
+        Assertions.assertEquals(expected2, BoostTools.evaluatePolynomial(c2, x), Math.ulp(expected2));
+
+        final double[] c3 = {-13, 2};
+        final double expected3 = c3[1] * x + c3[0];
+        Assertions.assertEquals(expected3, BoostTools.evaluatePolynomial(c3, x), Math.ulp(expected3));
+
+        final double[] c4 = {-0.12345};
+        final double expected4 = c4[0];
+        Assertions.assertEquals(expected4, BoostTools.evaluatePolynomial(c4, x));
+
+        // Zero length coefficients not supported
+        final double[] c5 = {};
+        Assertions.assertThrows(ArrayIndexOutOfBoundsException.class, () -> BoostTools.evaluatePolynomial(c5, x));
+    }
+
+    /**
+     * Series to compute log(a+x) using:
+     * <pre>
+     * log(a+x) = log(a) + 2 [z + z^3/3 + z^5/5 + ...] ; z = x / (2a + x)
+     * </pre>
+     * <p>The term log(a) must be added to the generated series.
+     */
+    private static class LogApXSeries implements DoubleSupplier {
+        private double next;
+        private final double z2;
+        private int n = 1;
+
+        /**
+         * @param a Argument a
+         * @param x Argument x
+         */
+        LogApXSeries(double a, double x) {
+            final double z = x / (2 * a + x);
+            next = z;
+            z2 = z * z;
+        }
+
+        @Override
+        public double getAsDouble() {
+            final double r = next / n;
+            next *= z2;
+            n += 2;
+            return 2 * r;
+        }
+    }
+
+    /**
+     * Series to compute log(1+x) - x using:
+     * <pre>
+     * log(1+x) = -x^2/2 + x^3/3 - x^4/4 + ...
+     * </pre>
+     * <p>This series is hard to compute as the result {@code -> -1}
+     * (x approximately -0.8414 and 2.146) due to limited precision in the summation.
+     */
+    private static class Log1pmxSeries implements DoubleSupplier {
+        private double next;
+        private final double x;
+        private int n = 1;
+
+        /**
+         * @param x Argument x
+         */
+        Log1pmxSeries(double x) {
+            this.x = x;
+            next = x;
+        }
+
+        @Override
+        public double getAsDouble() {
+            next *= -x;
+            n++;
+            return next / n;
+        }
+    }
+}
diff --git a/commons-numbers-gamma/src/test/java/org/apache/commons/numbers/gamma/TestUtils.java b/commons-numbers-gamma/src/test/java/org/apache/commons/numbers/gamma/TestUtils.java
index 5c4a269..7435301 100644
--- a/commons-numbers-gamma/src/test/java/org/apache/commons/numbers/gamma/TestUtils.java
+++ b/commons-numbers-gamma/src/test/java/org/apache/commons/numbers/gamma/TestUtils.java
@@ -34,6 +34,159 @@ final class TestUtils {
     /** Set this to true to report all deviations to System out when the maximum ULPs is negative. */
     private static boolean reportAllDeviations = false;
 
+    /**
+     * Class to compute the error statistics.
+     *
+     * <p>This class can be used to summary errors if used as the DoubleConsumer
+     * argument to {@link TestUtils#assertEquals(BigDecimal, double, double)}.
+     *
+     * @see <a href="https://en.wikipedia.org/wiki/Root_mean_square">Wikipedia: RMS</a>
+     */
+    static class ErrorStatistics {
+        /** Sum of squared error. */
+        private double ss;
+        /** Maximum absolute error. */
+        private double maxAbs;
+        /** Number of terms. */
+        private int n;
+        /** Positive sum. */
+        private double ps;
+        /** Positive sum round-off compensation. */
+        private double psc;
+        /** Negative sum. */
+        private double ns;
+        /** Negative sum round-off compensation. */
+        private double nsc;
+
+        /**
+         * @param x Value
+         */
+        void add(double x) {
+            // Overflow is not supported.
+            // Assume the expected and actual are quite close when measuring the RMS.
+            ss += x * x;
+            n++;
+            // Summing terms of the same sign avoids cancellation in the working sums.
+            // There may be cancellation in the final sum so the sums are totalled
+            // to 106-bit precision. This is done by adding the term through the lower
+            // then higher bits of the split quad length number.
+            if (x < 0) {
+                final double s = nsc + x;
+                nsc = twoSumLow(nsc, x, s);
+                final double t = ns + s;
+                nsc += twoSumLow(ns, s, t);
+                ns = t;
+
+                maxAbs = maxAbs < -x ? -x : maxAbs;
+            } else {
+                final double s = psc + x;
+                psc = twoSumLow(psc, x, s);
+                final double t = ps + s;
+                psc += twoSumLow(ps, s, t);
+                ps = t;
+
+                maxAbs = maxAbs < x ? x : maxAbs;
+            }
+        }
+
+        /**
+         * Gets the count of recorded values.
+         *
+         * @return the size
+         */
+        int size() {
+            return n;
+        }
+
+        /**
+         * Gets the maximum absolute error.
+         *
+         * <p>This can be used to set maximum ULP thresholds for test data if the
+         * TestUtils.assertEquals method is used with a large maxUlps to measure the ulp
+         * (and effectively ignore failures) and the maximum reported as the end of
+         * testing.
+         *
+         * @return maximum absolute error
+         */
+        double getMaxAbs() {
+            return maxAbs;
+        }
+
+        /**
+         * Gets the root mean squared error (RMS).
+         *
+         * <p> Note: If no data has been added this will return 0/0 = nan.
+         * This prevents using in assertions without adding data.
+         *
+         * @return root mean squared error (RMS)
+         */
+        double getRMS() {
+            return Math.sqrt(ss / n);
+        }
+
+        /**
+         * Gets the mean error.
+         *
+         * <p>The mean can be used to determine if the error is consistently above or
+         * below zero.
+         *
+         * @return mean error
+         */
+        double getMean() {
+            // Sum the negative parts into the positive.
+            // (see Shewchuk (1997) Grow-Expansion and Expansion-Sum [1]).
+            // [1] Shewchuk (1997): Arbitrary Precision Floating-Point Arithmetic
+            //  http://www-2.cs.cmu.edu/afs/cs/project/quake/public/papers/robust-arithmetic.ps
+
+            // This creates a 3 part number (c,b,a) in descending order of magnitude.
+            double s;
+            double t;
+            s = nsc + psc;
+            double a = twoSumLow(nsc, psc, s);
+            t = s + ps;
+            double b = twoSumLow(s, ps, t);
+            double c = t;
+
+            // Sum the remaining part to create a 4 part number (d,c,b,a).
+            // Note: If ns+nsc is a non-overlapping 2 part number we can skip
+            // adding the round-off from nsc and psc (a) as it would be smaller
+            // in magnitude than nsc and hence ns. But nsc is a compensation
+            // term that may overlap ns.
+            s = ns + a;
+            a = twoSumLow(ns, a, s);
+            t = s + b;
+            b = twoSumLow(s, b, t);
+            s = t + c;
+            c = twoSumLow(t, c, s);
+            final double d = s;
+
+            // Sum the parts in order of magnitude for 1 ULP error.
+            // Reducing the error requires a two-sum rebalancing of the terms
+            // iterated through the parts.
+            return (a + b + c + d) / n;
+        }
+
+        /**
+         * Compute the round-off from the sum of two numbers {@code a} and {@code b} using
+         * Knuth's two-sum algorithm. The values are not required to be ordered by magnitude.
+         * The standard precision sum must be provided.
+         *
+         * @param a First part of sum.
+         * @param b Second part of sum.
+         * @param sum Sum of the parts (a + b).
+         * @return <code>(b - (sum - (sum - b))) + (a - (sum - b))</code>
+         * @see <a href="http://www-2.cs.cmu.edu/afs/cs/project/quake/public/papers/robust-arithmetic.ps">
+         * Shewchuk (1997) Theorum 7</a>
+         */
+        static double twoSumLow(double a, double b, double sum) {
+            final double bVirtual = sum - a;
+            // sum - bVirtual == aVirtual.
+            // a - aVirtual == a round-off
+            // b - bVirtual == b round-off
+            return (a - (sum - bVirtual)) + (b - bVirtual);
+        }
+    }
+
     /** Private constructor. */
     private TestUtils() {
         // intentionally empty.
@@ -48,16 +201,43 @@ final class TestUtils {
      * <p>Set {@code maxUlps} to negative to report the ulps to the stdout and ignore
      * failures.
      *
+     * <p>The ulp difference is signed. It may be truncated to +/-Long.MAX_VALUE. Use of
+     * {@link Math#abs(long)} on the value will always be positive. The sign of the error
+     * is the same as that returned from Double.compare(actual, expected).
+     *
      * @param expected expected value
      * @param actual actual value
      * @param maxUlps maximum units of least precision between the two values
-     * @return ulp difference between the values (always positive; may be truncated to Long.MAX_VALUE)
+     * @return ulp difference between the values (signed; may be truncated to +/-Long.MAX_VALUE)
      */
     static long assertEquals(double expected, double actual, long maxUlps) {
         return assertEquals(expected, actual, maxUlps, null, (Supplier<String>) null);
     }
 
     /**
+     * Assert the two numbers are equal within the provided units of least precision.
+     * The maximum count of numbers allowed between the two values is {@code maxUlps - 1}.
+     *
+     * <p>The values -0.0 and 0.0 are considered equal.
+     *
+     * <p>Set {@code maxUlps} to negative to report the ulps to the stdout and ignore
+     * failures.
+     *
+     * <p>The ulp difference is signed. It may be truncated to +/-Long.MAX_VALUE. Use of
+     * {@link Math#abs(long)} on the value will always be positive. The sign of the error
+     * is the same as that returned from Double.compare(actual, expected).
+     *
+     * @param expected expected value
+     * @param actual actual value
+     * @param maxUlps maximum units of least precision between the two values
+     * @param msg failure message
+     * @return ulp difference between the values (signed; may be truncated to +/-Long.MAX_VALUE)
+     */
+    static long assertEquals(double expected, double actual, long maxUlps, String msg) {
+        return assertEquals(expected, actual, maxUlps, null, () -> msg);
+    }
+
+    /**
      * Assert the two numbers are equal within the provided units of least
      * precision. The maximum count of numbers allowed between the two values is
      * {@code maxUlps - 1}.
@@ -67,12 +247,16 @@ final class TestUtils {
      * <p>Set {@code maxUlps} to negative to report the ulps to the stdout and
      * ignore failures.
      *
+     * <p>The ulp difference is signed. It may be truncated to +/-Long.MAX_VALUE. Use of
+     * {@link Math#abs(long)} on the value will always be positive. The sign of the error
+     * is the same as that returned from Double.compare(actual, expected).
+     *
      * @param expected expected value
      * @param actual actual value
      * @param maxUlps maximum units of least precision between the two values
-     * @param error Consumer for the ulp difference between the values (always positive)
+     * @param error Consumer for the ulp difference between the values (signed)
      * @param msg failure message
-     * @return ulp difference between the values (always positive; may be truncated to Long.MAX_VALUE)
+     * @return ulp difference between the values (signed; may be truncated to +/-Long.MAX_VALUE)
      */
     static long assertEquals(double expected, double actual, long maxUlps,
             LongConsumer error, Supplier<String> msg) {
@@ -80,13 +264,16 @@ final class TestUtils {
         final long a = Double.doubleToLongBits(actual);
 
         // Code adapted from Precision#equals(double, double, int) so we maintain the delta
-        // for the message and return it for reporting.
+        // for the message and return it for reporting. The sign is maintained separately
+        // to allow reporting errors above Long.MAX_VALUE.
 
+        int sign;
         long delta;
         boolean equal;
         if (e == a) {
             // Binary equal
             equal = true;
+            sign = 0;
             delta = 0;
         } else if ((a ^ e) < 0L) {
             // The difference is the count of numbers between each and zero.
@@ -94,9 +281,11 @@ final class TestUtils {
             long d1;
             long d2;
             if (a < e) {
+                sign = -1;
                 d1 = e - POSITIVE_ZERO_DOUBLE_BITS;
                 d2 = a - NEGATIVE_ZERO_DOUBLE_BITS;
             } else {
+                sign = 1;
                 d1 = a - POSITIVE_ZERO_DOUBLE_BITS;
                 d2 = e - NEGATIVE_ZERO_DOUBLE_BITS;
             }
@@ -110,26 +299,39 @@ final class TestUtils {
                 equal = delta <= ((maxUlps < 0) ? (-maxUlps - 1) : maxUlps);
             }
         } else {
-            delta = Math.abs(e - a);
+            if (a < e) {
+                sign = -1;
+                delta = e - a;
+            } else {
+                sign = 1;
+                delta = a - e;
+            }
+            // The sign must be negated for negative doubles since the magnitude
+            // comparison (a < e) included the sign bit.
+            sign = a < 0 ? -sign : sign;
+
             // Allow input of a negative maximum ULPs
             equal = delta <= ((maxUlps < 0) ? (-maxUlps - 1) : maxUlps);
         }
 
+        assert sign == Double.compare(actual, expected);
+
         // DEBUG:
         if (maxUlps < 0) {
             // CHECKSTYLE: stop Regex
             if (!equal || reportAllDeviations) {
-                System.out.printf("%sexpected <%s> != actual <%s> (ulps=%s)%n",
-                    prefix(msg), expected, actual, Long.toUnsignedString(delta));
+                System.out.printf("%sexpected <%s> != actual <%s> (ulps=%c%s)%n",
+                    prefix(msg), expected, actual, sign < 0 ? '-' : ' ', Long.toUnsignedString(delta));
             }
             // CHECKSTYLE: resume Regex
         } else if (!equal) {
-            Assertions.fail(String.format("%sexpected <%s> != actual <%s> (ulps=%s)",
-                prefix(msg), expected, actual, Long.toUnsignedString(delta)));
+            Assertions.fail(String.format("%sexpected <%s> != actual <%s> (ulps=%c%s)",
+                prefix(msg), expected, actual, sign < 0 ? '-' : ' ', Long.toUnsignedString(delta)));
         }
 
         // This may have overflowed.
         delta = delta < 0 ? Long.MAX_VALUE : delta;
+        delta *= sign;
         if (error != null) {
             error.accept(delta);
         }
@@ -152,16 +354,50 @@ final class TestUtils {
      * <p>Set {@code maxUlps} to negative to report the ulps to the stdout and ignore
      * failures.
      *
+     * <p>The ulp difference is signed. The sign of the error
+     * is the same as that returned from Double.compare(actual, expected); it is
+     * computed using {@code actual - expected}.
+     *
      * @param expected expected value
      * @param actual actual value
      * @param maxUlps maximum units of least precision between the two values
-     * @return ulp difference between the values (always positive)
+     * @return ulp difference between the values (signed)
      */
     static double assertEquals(BigDecimal expected, double actual, double maxUlps) {
         return assertEquals(expected, actual, maxUlps, null, (Supplier<String>) null);
     }
 
     /**
+     * Assert the two numbers are equal within the provided units of least precision.
+     *
+     * <p>This method is for values that can be computed to arbitrary precision.
+     * It raises an exception when the actual value is not finite and the expected value
+     * has a non-infinite representation; or the actual value is finite and the expected
+     * value has a infinite representation. In this case the computed ulp difference
+     * is infinite.
+     *
+     * <p>This method expresses the error relative the units in the last place of the
+     * expected value when converted to a {@code double} type
+     * (see {@link #assertEquals(BigDecimal, double, double, DoubleConsumer, Supplier)} for details).
+     *
+     * <p>Set {@code maxUlps} to negative to report the ulps to the stdout and ignore
+     * failures.
+     *
+     * <p>The ulp difference is signed. The sign of the error
+     * is the same as that returned from Double.compare(actual, expected); it is
+     * computed using {@code actual - expected}.
+     *
+     * @param expected expected value
+     * @param actual actual value
+     * @param maxUlps maximum units of least precision between the two values
+     * @param msg failure message
+     * @return ulp difference between the values (signed)
+     */
+    static double assertEquals(BigDecimal expected, double actual, double maxUlps, String msg) {
+        return assertEquals(expected, actual, maxUlps, null, () -> msg);
+    }
+
+    /**
      * Assert the two numbers are equal within the provided units of least
      * precision.
      *
@@ -175,7 +411,7 @@ final class TestUtils {
      * of the expected value when converted to a {@code double} type. If the actual
      * value equals the expected value the error is 0. Otherwise the error is
      * computed relative to the ulp of the expected value. The minimum non-zero
-     * value for the error is 0.5. A ulp of < 1.0 indicates the value is the closest
+     * value for the error is 0.5. A |ulp| of < 1.0 indicates the value is the closest
      * value to the result that is not exact.
      *
      * <pre>
@@ -187,20 +423,24 @@ final class TestUtils {
      *
      *               a               b               c
      *
-     * a = 0.75 ulp
-     * b = 0    ulp
-     * c = 1.25 ulp
+     * a = -0.75 ulp
+     * b =  0    ulp
+     * c =  1.25 ulp
      * </pre>
      *
      * <p>Set {@code maxUlps} to negative to report the ulps to the stdout and
      * ignore failures.
      *
+     * <p>The ulp difference is signed. The sign of the error
+     * is the same as that returned from Double.compare(actual, expected); it is
+     * computed using {@code actual - expected}.
+     *
      * @param expected expected value
      * @param actual actual value
      * @param maxUlps maximum units of least precision between the two values
      * @param error Consumer for the ulp difference between the values (always positive)
      * @param msg failure message
-     * @return ulp difference between the values (always positive)
+     * @return ulp difference between the values (signed)
      */
     static double assertEquals(BigDecimal expected, double actual, double maxUlps,
             DoubleConsumer error, Supplier<String> msg) {
@@ -215,13 +455,13 @@ final class TestUtils {
         } else if (!Double.isFinite(e) || !Double.isFinite(actual)) {
             // No representable delta between infinite and non-infinite values
             equal = false;
-            delta = Double.POSITIVE_INFINITY;
+            delta = Double.compare(actual, e) * Double.POSITIVE_INFINITY;
         } else {
             // Two finite numbers
-            delta = expected.subtract(new BigDecimal(actual)).abs()
+            delta = new BigDecimal(actual).subtract(expected)
                         .divide(new BigDecimal(Math.ulp(e)), MathContext.DECIMAL64).doubleValue();
             // Allow input of a negative maximum ULPs
-            equal = delta <= Math.abs(maxUlps);
+            equal = Math.abs(delta) <= Math.abs(maxUlps);
         }
 
         if (error != null) {
diff --git a/commons-numbers-gamma/src/test/java/org/apache/commons/numbers/gamma/TestUtilsTest.java b/commons-numbers-gamma/src/test/java/org/apache/commons/numbers/gamma/TestUtilsTest.java
index 105f533..4fdbda3 100644
--- a/commons-numbers-gamma/src/test/java/org/apache/commons/numbers/gamma/TestUtilsTest.java
+++ b/commons-numbers-gamma/src/test/java/org/apache/commons/numbers/gamma/TestUtilsTest.java
@@ -17,6 +17,7 @@
 package org.apache.commons.numbers.gamma;
 
 import java.math.BigDecimal;
+import org.apache.commons.numbers.gamma.TestUtils.ErrorStatistics;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
@@ -34,11 +35,11 @@ class TestUtilsTest {
         Assertions.assertEquals(0, TestUtils.assertEquals(x, x, 30));
         Assertions.assertThrows(AssertionError.class, () -> TestUtils.assertEquals(x, x + ulp, 0));
         Assertions.assertEquals(1, TestUtils.assertEquals(x, x + ulp, 1));
-        Assertions.assertEquals(1, TestUtils.assertEquals(x, x - ulp, 1));
+        Assertions.assertEquals(-1, TestUtils.assertEquals(x, x - ulp, 1));
         Assertions.assertEquals(1, TestUtils.assertEquals(x, x + ulp, 30));
         Assertions.assertThrows(AssertionError.class, () -> TestUtils.assertEquals(x, x + 30 * ulp, 29));
         Assertions.assertEquals(30, TestUtils.assertEquals(x, x + 30 * ulp, 30));
-        Assertions.assertEquals(30, TestUtils.assertEquals(x, x - 30 * ulp, 30));
+        Assertions.assertEquals(-30, TestUtils.assertEquals(x, x - 30 * ulp, 30));
 
         // Check order and sign
         Assertions.assertThrows(AssertionError.class, () -> TestUtils.assertEquals(-x - ulp, x, 0));
@@ -67,8 +68,8 @@ class TestUtilsTest {
         Assertions.assertThrows(AssertionError.class, () -> TestUtils.assertEquals(0.0, x, 0));
         Assertions.assertEquals(1, TestUtils.assertEquals(0.0, x, 1));
         Assertions.assertEquals(1, TestUtils.assertEquals(-0.0, x, 1));
-        Assertions.assertEquals(1, TestUtils.assertEquals(0.0, -x, 1));
-        Assertions.assertEquals(1, TestUtils.assertEquals(-0.0, -x, 1));
+        Assertions.assertEquals(-1, TestUtils.assertEquals(0.0, -x, 1));
+        Assertions.assertEquals(-1, TestUtils.assertEquals(-0.0, -x, 1));
         Assertions.assertEquals(2, TestUtils.assertEquals(0.0, 2 * x, 2));
         Assertions.assertEquals(2, TestUtils.assertEquals(-0.0, 2 * x, 2));
     }
@@ -86,7 +87,7 @@ class TestUtilsTest {
         Assertions.assertThrows(AssertionError.class, () -> TestUtils.assertEquals(nan, max, 0));
         Assertions.assertThrows(AssertionError.class, () -> TestUtils.assertEquals(inf, max, 0));
 
-        Assertions.assertEquals(1, TestUtils.assertEquals(inf, max, 1));
+        Assertions.assertEquals(-1, TestUtils.assertEquals(inf, max, 1));
         Assertions.assertThrows(AssertionError.class, () -> TestUtils.assertEquals(inf, -inf, 0));
     }
 
@@ -102,11 +103,11 @@ class TestUtilsTest {
         Assertions.assertEquals(0, TestUtils.assertEquals(bdx, x, 30));
         Assertions.assertThrows(AssertionError.class, () -> TestUtils.assertEquals(bdx, x + ulp, 0));
         Assertions.assertEquals(1, TestUtils.assertEquals(bdx, x + ulp, 1));
-        Assertions.assertEquals(1, TestUtils.assertEquals(bdx, x - ulp, 1));
+        Assertions.assertEquals(-1, TestUtils.assertEquals(bdx, x - ulp, 1));
         Assertions.assertEquals(1, TestUtils.assertEquals(bdx, x + ulp, 30));
         Assertions.assertThrows(AssertionError.class, () -> TestUtils.assertEquals(bdx, x + 30 * ulp, 29));
         Assertions.assertEquals(30, TestUtils.assertEquals(bdx, x + 30 * ulp, 30));
-        Assertions.assertEquals(30, TestUtils.assertEquals(bdx, x - 30 * ulp, 30));
+        Assertions.assertEquals(-30, TestUtils.assertEquals(bdx, x - 30 * ulp, 30));
 
         // Opposite signs
         Assertions.assertThrows(AssertionError.class, () -> TestUtils.assertEquals(bdx, -x, 500000));
@@ -121,7 +122,7 @@ class TestUtilsTest {
         Assertions.assertEquals(0.75, TestUtils.assertEquals(bdy, x + ulp, 1));
         Assertions.assertThrows(AssertionError.class, () -> TestUtils.assertEquals(bdy, x - ulp, 0));
         Assertions.assertThrows(AssertionError.class, () -> TestUtils.assertEquals(bdy, x - ulp, 1));
-        Assertions.assertEquals(1.25, TestUtils.assertEquals(bdy, x - ulp, 1.5), 1e-16);
+        Assertions.assertEquals(-1.25, TestUtils.assertEquals(bdy, x - ulp, 1.5), 1e-16);
     }
 
     @Test
@@ -139,9 +140,9 @@ class TestUtilsTest {
         final double x = Double.MIN_VALUE;
         Assertions.assertThrows(AssertionError.class, () -> TestUtils.assertEquals(a, x, 0));
         Assertions.assertEquals(1, TestUtils.assertEquals(a, x, 1));
-        Assertions.assertEquals(1, TestUtils.assertEquals(a, -x, 1));
+        Assertions.assertEquals(-1, TestUtils.assertEquals(a, -x, 1));
         Assertions.assertEquals(2, TestUtils.assertEquals(a, 2 * x, 2));
-        Assertions.assertEquals(2, TestUtils.assertEquals(a, -2 * x, 2));
+        Assertions.assertEquals(-2, TestUtils.assertEquals(a, -2 * x, 2));
     }
 
     @Test
@@ -163,6 +164,38 @@ class TestUtilsTest {
 
         final double x = Math.nextDown(max);
         Assertions.assertThrows(AssertionError.class, () -> TestUtils.assertEquals(bdmax, x, 0));
-        Assertions.assertEquals(1, TestUtils.assertEquals(bdmax, x, 1));
+        Assertions.assertEquals(-1, TestUtils.assertEquals(bdmax, x, 1));
+    }
+
+    @Test
+    void testErrorStatistics() {
+        final ErrorStatistics stats = new ErrorStatistics();
+        assertErrorStatistics(stats, 0, Double.NaN, Double.NaN);
+        stats.add(0);
+        assertErrorStatistics(stats, 0, 0, 0);
+        stats.add(0.5);
+        assertErrorStatistics(stats, 0.5, Math.sqrt(0.25 / 2), 0.25);
+        stats.add(-0.75);
+        assertErrorStatistics(stats, 0.75, Math.sqrt((0.25 + 0.75 * 0.75) / 3), -0.25 / 3);
+        stats.add(-0.25);
+        assertErrorStatistics(stats, 0.75, Math.sqrt((0.25 + 0.75 * 0.75 + 0.25 * 0.25) / 4), -0.5 / 4);
+    }
+
+    private static void assertErrorStatistics(ErrorStatistics stats, double max, double rms, double mean) {
+        Assertions.assertEquals(max, stats.getMaxAbs(), "max absolute");
+        Assertions.assertEquals(rms, stats.getRMS(), "rms");
+        Assertions.assertEquals(mean, stats.getMean(), "mean");
+    }
+
+    @Test
+    void testErrorStatisticsMean() {
+        final ErrorStatistics stats = new ErrorStatistics();
+        // https://en.wikipedia.org/wiki/Kahan_summation_algorithm#Further_enhancements
+        // Peters' example
+        stats.add(1);
+        stats.add(1e100);
+        stats.add(1);
+        stats.add(-1e100);
+        Assertions.assertEquals(2.0 / 4, stats.getMean());
     }
 }
diff --git a/commons-numbers-gamma/src/test/resources/org/apache/commons/numbers/gamma/gamma1pm1_data.csv b/commons-numbers-gamma/src/test/resources/org/apache/commons/numbers/gamma/gamma1pm1_data.csv
new file mode 100644
index 0000000..489be42
--- /dev/null
+++ b/commons-numbers-gamma/src/test/resources/org/apache/commons/numbers/gamma/gamma1pm1_data.csv
@@ -0,0 +1,163 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# (C) Copyright John Maddock 2006.
+# Use, modification and distribution are subject to the
+# Boost Software License, Version 1.0. (See accompanying file
+# LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+# Extracted from: boost/libs/math/test/test_gamma_data.ipp
+# x, gamma(1+x)-1
+-0.4952165186405181884765625,0.7559827693907095754807809442951050489732,
+-0.4642883241176605224609375,0.6574328869566978138139138799311066062094,
+-0.4024595916271209716796875,0.4948624198600628575485791492257182331098,
+-0.3901382386684417724609375,0.466994695902624837582482771934607569504,
+-0.3875354826450347900390625,0.4612760821854033810460931227828015343156,
+-0.373013198375701904296875,0.4303940312894863907637421435297095229576,
+-0.364522993564605712890625,0.4131121158463471061555369932726425070959,
+-0.35811364650726318359375,0.4004260060282522370607617707987066040664,
+-0.342386901378631591796875,0.3705491389143732767395411311340356537958,
+-0.311618030071258544921875,0.3168394199636867612664810682360364987851,
+-0.2880756855010986328125,0.2795634828731819295069040561405863199118,
+-0.27896595001220703125,0.2659494215075372040950689557832739194382,
+-0.221501767635345458984375,0.1892800230490205183297725744929501015544,
+-0.202970564365386962890625,0.1675837744862475402389911769714649852773,
+-0.191832959651947021484375,0.1551782986717939911912971517092154248689,
+-0.1387059986591339111328125,0.1019358076187795495751950704491293377337,
+-0.1012614667415618896484375,0.06964849559574637322009665674759450635903,
+-0.0782387256622314453125,0.05168944861403749320872745190411594799105,
+-0.0146243572235107421875,0.008655823217365420051945171708362679166147,
+0.1431564604442703013402649929484277542953e-29,-0.8263215150028947028222714725368343067077e-30,
+0.1791466932348087634896446282571611213266e-29,-0.1034062776504410791508686126702507453693e-29,
+0.6013619202535540063110633226832922483532e-29,-0.3471155206456177563387123499681270341265e-29,
+0.115805324961653822428570241697281798758e-28,-0.6684464764687909153739175517973613571261e-29,
+0.1422457400834001098175711728787848259007e-28,-0.8210646944165041873250036406993552111264e-29,
+0.4970121018327539153628705477876439795096e-28,-0.2868831708235014101261168518349749234889e-28,
+0.9660079415057497591758174164417478444323e-28,-0.5575949162564024099347963251548294827165e-28,
+0.1232929313253182131376331095427391968754e-27,-0.7116661133260258147780879126862696392479e-28,
+0.3296523285617759312781860549364832953326e-27,-0.1902804880171240659658521971091414147824e-27,
+0.528364435768055252017009628713605422886e-27,-0.3049802291021812635024061181080113889506e-27,
+0.886586057273120049620324386849842094685e-27,-0.5117513605413324831805933701656815521236e-27,
+0.2499669674831043259218157022821422146034e-26,-0.1442848493391799075204112945868205575921e-26,
+0.4131050397232622964314362671638736040881e-26,-0.2384507001780369908735157814349257650306e-26,
+0.7679738097881433551381658732998641759182e-26,-0.4432865132438264916724504940164877771849e-26,
+0.199929739820949207249437007767740538737e-25,-0.1154025777043396680338534232061371984153e-25,
+0.5151477415246978459754129800826163591626e-25,-0.2973513461467014566158126478567428007026e-25,
+0.101200734533556026342258477595279955025e-24,-0.5841464927231005972586520769367701801272e-25,
+0.2064292695896540981798546456623054911033e-24,-0.1191542081013299677372796818685763621433e-24,
+0.4063294332896333395257434433879773416284e-24,-0.2345397140053387487331153502526122099635e-24,
+0.8138195767936862452966745688936976428456e-24,-0.4697494081288516881709792363579127898501e-24,
+0.9575550627132253801929510132578249716542e-24,-0.5527157822038433842858279196451987644551e-24,
+0.2855160956298500804375620841706273850616e-23,-0.1648043629790735548426012109835882111878e-23,
+0.65201444297915461398563707001320281266e-23,-0.3763529502296153146061378052316774680657e-23,
+0.1310988374636350038320977491775043421995e-22,-0.7567230263439006455136418784154172627278e-23,
+0.2590288837798696209228010176465529547374e-22,-0.1495155293796993236481538654450094828034e-22,
+0.2937779542193655202274099291941187976629e-22,-0.1695732371781431498672748630538267989951e-22,
+0.7863513178004503049754083414326234074965e-22,-0.4538942987503834952636621253829968594981e-22,
+0.1903818607087388763706780167350761726053e-21,-0.109891392314185724619218859435147914583e-21,
+0.3812242142377350870566942975497647799754e-21,-0.2200485882977986685255989911406099731464e-21,
+0.5493133580141330277178034419485741501887e-21,-0.3170722751854215599980143372792630827825e-21,
+0.9672153634284186955666772243312215295852e-21,-0.5582918591043124472447977064584587087382e-21,
+0.1702169477623814384559878647986894129041e-20,-0.9825188868017248805929057833465618943933e-21,
+0.4817114569977399785676754474621208412799e-20,-0.2780513989416366360400948471972900830387e-20,
+0.7538352992756463183303278501219690799218e-20,-0.4351255434976382024407146526549699565796e-20,
+0.2596305715949999708394617609422128090557e-19,-0.1498628330119729391523576917959646915902e-19,
+0.4444587480324321591032923385589104015025e-19,-0.2565485517668431887674899070788880246089e-19,
+0.9715574921498573937069095571295029856174e-19,-0.5607982038213457280620337061143959968827e-19,
+0.2036598542733453787268262970278076551267e-18,-0.1175556581981383412558675525031327289634e-18,
+0.4248971931658660264162106698360155121463e-18,-0.2452573158680304024128136998709195441154e-18,
+0.6521097487613458963613731825259556273977e-18,-0.3764079622200518159115220576707372289309e-18,
+0.1436126164096190058281493628911107407475e-17,-0.8289545186912702312307596583951073368993e-18,
+0.3118908901459261162419055180006211003274e-17,-0.1800283075323116855097674712567357424907e-17,
+0.3593346613595175715618300349429858897565e-17,-0.2074135954788010816821644850649799519675e-17,
+0.9445874854124767215374919304693435151421e-17,-0.5452306934500297136990208691880314661067e-17,
+0.2566182432094081539023303073498993853718e-16,-0.1481240698799817909729203530750507585117e-16,
+0.3363765695149349330660137891158001366421e-16,-0.1941618252298598450712101459398214835952e-16,
+0.1073581901339262605326457800103412409953e-15,-0.6196882910077942026172170471644452240087e-16,
+0.186668406231853462907965823802669547149e-15,-0.1077479282192287023344331697438668504475e-15,
+0.3727540802657755688795382376099496468669e-15,-0.2151594942853688563255514533064804448857e-15,
+0.6211646767866855090717281839829411183018e-15,-0.3585459819247720488263755672803206966864e-15,
+0.1561186859754253464932505224282976996619e-14,-0.9011415112885851355703262394946230181441e-15,
+0.3092010764722992466335682593125966377556e-14,-0.1784757049442269726369719145429686196432e-14,
+0.6192850577371690132255643845837767003104e-14,-0.3574610363653403859138387348420733335946e-14,
+0.1047879028014987723427253740737796761096e-13,-0.6048521898920322580919537460083385958307e-14,
+0.1978473638988408750405412206418986897916e-13,-0.1142005977018810929368580238123776497134e-13,
+0.4041816252346730475863978426787070930004e-13,-0.2332999655507978182935820166341591465938e-13,
+0.9410302262901834580155480125540634617209e-13,-0.5431773877604405885692410233977439758357e-13,
+0.1334530223958893535574077304772799834609e-12,-0.7703117505534481432167486795079037095016e-13,
+0.266297021326439287136622624529991298914e-12,-0.1537108122261681912683838906901126667239e-12,
+0.5920415525016708979677559909760020673275e-12,-0.3417356583762410657228951913532598329392e-12,
+0.155163989296047688526414276566356420517e-11,-0.8956308525005437046951559037146364454014e-12,
+0.326923297461201300961874949280172586441e-11,-0.1887052485148118271327652592003779278951e-11,
+0.3753785910581841633870681107509881258011e-11,-0.2166744030260566997416579153839836535144e-11,
+0.9579165585749116473834874341264367103577e-11,-0.5529244432689301568675461523208969657637e-11,
+0.1858167439361402273334533674642443656921e-10,-0.1072563353975220567027440177997243696045e-10,
+0.5449485307451595872407779097557067871094e-10,-0.3145528284818088265306644806429650505592e-10,
+0.6089519166696533147842274047434329986572e-10,-0.3514965854368603547185748339618264962e-10,
+0.1337744776064297980155970435589551925659e-9,-0.7721672402075083279577276691763777798079e-10,
+0.2554458866654840676346793770790100097656e-9,-0.1474473672534405166880467009401481006846e-9,
+0.9285605062636648199259070679545402526855e-9,-0.5359796691714968347006887450221011388011e-9,
+0.1698227447555211711005540564656257629395e-8,-0.980243482442200345890191122898173278899e-9,
+0.339355921141759608872234821319580078125e-8,-0.1958815525210918994679361737180445367869e-8,
+0.6313728651008432279922999441623687744141e-8,-0.3644383041872783822741274272616254061398e-8,
+0.8383264749056706932606175541877746582031e-8,-0.4838951666662356901644608730186546413827e-8,
+0.1962631124285962869180366396903991699219e-7,-0.1132861391263510827635198807950784606364e-7,
+0.5256384838503436185419559478759765625e-7,-0.3034067396263077516870264512967026960836e-7,
+0.116242290459922514855861663818359375e-6,-0.6709685761311096545819618213723265238395e-7,
+0.1776920584006802528165280818939208984375e-6,-0.1025666084085592538025029643343934584008e-6,
+0.246631174150024889968335628509521484375e-6,-0.142359317011220184093241753035251343271e-6,
+0.7932688959044753573834896087646484375e-6,-0.4578866108069128537168607745624614794722e-6,
+0.1372093493046122603118419647216796875e-5,-0.791991995861101927407880386227298092424e-6,
+0.214747751670074649155139923095703125e-5,-0.1239553101482841564081262476002391564028e-5,
+0.527022712049074470996856689453125e-5,-0.3042030180348038757030022358659056016131e-5,
+0.9233162927557714283466339111328125e-5,-0.5329441960781667799420300524501852822265e-5,
+0.269396477960981428623199462890625e-4,-0.1554926893050895772896453957379474045684e-4,
+0.3208058114978484809398651123046875e-4,-0.1851639610824637542072201121307897455015e-4,
+0.00010957030463032424449920654296875,-0.6323382317252073303439803607481865268353e-4,
+0.000126518702018074691295623779296875,-0.7301274674392621832822527575061291232133e-4,
+0.00028976381872780621051788330078125,-0.0001671731931845284705043154051351730706298,
+0.000687857042066752910614013671875,-0.0003965741858362509385654340724912705823236,
+0.00145484809763729572296142578125,-0.0008376704829300962209037156359622989708524,
+0.00366270542144775390625,-0.002100946766981816464155333982357752904999,
+0.046881496906280517578125,-0.02497588947336944943591732868959193811385,
+0.04722058773040771484375,-0.02514197077286474061941968460870171431946,
+0.1323592662811279296875,-0.06091072639354085529687250076608036167983,
+0.139763355255126953125,-0.06350237679012056526225278765134891026831,
+0.155740678310394287109375,-0.06883441875617310404657299803607175885806,
+0.17873513698577880859375,-0.07590347542832235360535014668688262042636,
+0.1813595294952392578125,-0.07666619009216679212771233211297326572625,
+0.225838959217071533203125,-0.08828121583826801836069461556215827733624,
+0.292207300662994384765625,-0.1013142147509511845410398110728244632327,
+0.297928631305694580078125,-0.1022125377703106514269725748156778633457,
+0.29810583591461181640625,-0.1022398124529602122123098193784073635017,
+0.30028045177459716796875,-0.1025718475377491669113360177547935208456,
+0.314723670482635498046875,-0.1046527148786850527567817015912636515928,
+0.335008561611175537109375,-0.1072166100764849221291653907100739024018,
+0.34912931919097900390625,-0.1087597918806720999316678995289547437333,
+0.378430664539337158203125,-0.1113472284261879798379642546535625292991,
+0.405791938304901123046875,-0.1130363541503776146472634379575969350382,
+0.4133758544921875,-0.1133834162443148976453781329005327033269,
+0.415735542774200439453125,-0.1134808289122708542397946052703635909288,
+0.43399322032928466796875,-0.1140666251072475325460987089801937766512,
+0.457166969776153564453125,-0.1143882508090213200510081514983929178479,
+0.457506835460662841796875,-0.1143895043011533114503086722896019260013,
+0.4594924449920654296875,-0.1143948425572877686750521180317509748309,
+0.464888513088226318359375,-0.1143922664386800836288584840918904877633,
+0.467694938182830810546875,-0.1143810844126184461958335384166685988825,
+0.468867778778076171875,-0.114374421494214380845931849419009841586,
+0.470592796802520751953125,-0.1143624939837521390307936225841266176506,
+0.481109678745269775390625,-0.1142351916017016455044428590981136786372,
+0.492881298065185546875,-0.1139822218283491394475161618135268104636,
+0.496461331844329833984375,-0.1138823102618022293565213085801050842487
diff --git a/commons-numbers-gamma/src/test/resources/org/apache/commons/numbers/gamma/gamma_0_20_data.csv b/commons-numbers-gamma/src/test/resources/org/apache/commons/numbers/gamma/gamma_0_20_data.csv
new file mode 100644
index 0000000..17744de
--- /dev/null
+++ b/commons-numbers-gamma/src/test/resources/org/apache/commons/numbers/gamma/gamma_0_20_data.csv
@@ -0,0 +1,172 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Reference data for the gamma function in the range -20 to 20. This
+# data was generated with the following <a
+# href="http://maxima.sourceforge.net/">Maxima</a> script.
+#
+# kill(all);
+#
+# fpprec : 64;
+#
+# EPSILON : 10**(-fpprec + 1);
+# isInteger(x) := abs(x - floor(x)) <= EPSILON * abs(x);
+# str(x) := ssubst("e","b",string(x));
+#
+# x : makelist(bfloat(i / 8), i, 0, 160);
+#
+# for i : 1 while i <= length(x) do if not(isInteger(x[i])) then
+#     printf(true, "~f,~a,~a~%", x[i], str(gamma(x[i])), str(log(abs(gamma(x[i])))));
+
+0.125,7.533941598797611904699229841215133624610419588149075940983127898e0,2.019418357553796345320290521167099589948280952134449605131964873e0
+0.25,3.625609908221908311930685155867672002995167682880065467433378e0,1.288022524698077457370610440219717295925377565112860550499987023e0
+0.375,2.370436184416600908646473504176652509887400803358924987775126935e0,8.630739822706474624050890941340154953324706293484271350121415816e-1
+0.5,1.77245385090551602729816748334114518279754945612238712821380779e0,5.723649429247000870717136756765293558236474064576557857568115357e-1
+0.625,1.434518848090556775636019739456423136632207772206667330770679858e0,3.608294954889401811849576858227794878573691202062581717153436927e-1
+0.75,1.225416702465177645129098303362890526851239248108070611230118938e0,2.032809514312953714814329718624296997596673149825786480739760537e-1
+0.875,1.089652357422896951252376755102892971147870067767565120513704043e0,8.585870722533432350236558376948770226971912568187111234881601026e-2
+1.125,9.417426998497014880874037301518917030763024485186344926228909872e-1,-6.00231841260395829314058432074301142782194509463161572300751558e-2
+1.25,9.064024770554770779826712889669180007487919207200163668583444999e-1,-9.827183642181316146385380269663584022562270360764995774137299645e-2
+1.375,8.889135691562253407424275640662446912077753012595968704156726005e-1,-1.177552707410787744513620333179885042465392159095891756152041133e-1
+1.5,8.862269254527580136490837416705725913987747280611935641069038949e-1,-1.207822376352452223455184457816472122518527279025994683638684738e-1
+1.625,8.965742800565979847725123371602644603951298576291670817316749113e-1,-1.091741337567953724659793453255625768435299286059898687340484443e-1
+1.75,9.190625268488832338468237275221678951384294360810529584225892037e-1,-8.440112102048555595778603413139773174384239591518240843268963166e-2
+1.875,9.534458127450348323458296607150313497543863092966194804494910378e-1,-4.767268539918829964397803716186227231969654781703346155383386831e-2
+2.125,1.059460537330914174098329196420878165960840254583463804200752361e0,5.775985153034387160738826626309159079026126161841698387727348298e-2
+2.25,1.133003096319346347478339111208647500935989900900020458572930625e0,1.248717148923965943024412876131986631489783819403572559299148761e-1
+2.375,1.222256157589809843520837900591086450410691039231945696821549826e0,2.006984603774558413588851802726110913486672349470622372413235674e-1
+2.5,1.329340388179137020473625612505858887098162092091790346160355842e0,2.846828704729191596324946696827019243201376955598947292501458504e-1
+2.625,1.456933205091971725255332547885429748142086018647396507813971731e0,3.763336820249054353358117318652263237352376130734514853229570379e-1
+2.75,1.608359421985545659231941523163793816492251513141842677239531107e0,4.752146669149371303131024663954288617422420649461682717853404993e-1
+2.875,1.787710898896940310648430613840683780789474329931161525842795696e0,5.809359740231858381003301686123213676268949611934679497314683284e-1
+3.125,2.251353641828192619958949542394366102666785540989860583926598766e0,8.115316539067240236052265197616884221519638711233960088124711924e-1
+3.25,2.549256966718529281826263000219456877105977277025046031789093906e0,9.358019311087253582584675185418969362929592288653456511579435243e-1
+3.375,2.902858374275798378361990013903830319725391218175871029951180836e0,1.065695897864060373116216247785934924359546093165425293417243775e0
+3.5,3.323350970447842551184064031264647217745405230229475865400889606e0,1.200973602347074224816021881450712995770238915468157197042113732e0
+3.625,3.824449663366425778795247938199253088872975798949415833011675794e0,1.341414578068492503584713347856402053793312497397296363155001493e0
+3.75,4.422988410460250562887839188700432995353691661140067362408710543e0,1.486815578593417055540581801444205025412948650163074938762548189e0
+3.875,5.139668834328703393114238014791965869769738698552089386798037626e0,1.636988648272499600655386636047987781842774872953137929368063677e0
+4.125,7.035480130713101937371717319982394070833704815593314324770621145e0,1.950965937095088844555048821839533996976666176579665690275726947e0
+4.25,8.285085141835220165935354750713234850594426150331399603314555194e0,2.114456927450371475477490717190862404947226904905042259335629016e0
+4.375,9.797147013180819526971716296925427329073195361343564726085235322e0,2.282091222188553519050255594178982334075517363552907886259286748e0
+4.5,1.163172839656744892914422410942626526210891830580316552890311362e1,2.453736570842442220504142503435716157331823510689763131380823873e0
+4.625,1.386363002970329344813277377597229244716453727119163239466732475e1,2.629268866375130602516289015843783955061325008239274679714631816e0
+4.75,1.658620653922593961082939695762662373257634372927525260903266454e1,2.808571418575736502702122128676565233435040293533831604168530396e0
+4.875,1.99162167330237256483176723073188677453577374568893463738423958e1,2.991534311077809918332854596215815288066213400352964138762741721e0
+5.125,2.902135553919154549165833394492737554218903236432242158967881222e1,3.368031956881733151760541272352659297219363185259066554866948961e0
+5.25,3.521161185279968570522525769053124811502631113890844831408685958e1,3.561375910386696936892561092147635804384429648770276538391506735e0
+5.375,4.286251818266608543050125879904874456469522970587809567662290453e1,3.757997741998131270504671306473819999011703044322521034269284761e0
+5.5,5.234277778455352018114900849241819367949013237611424488006401129e1,3.957813967618716293877400855822590998551304491975006780729532531e0
+5.625,6.411928888737773219761407871387185256813598487926129982533637698e1,4.160745237339519118632688322500701414734902192326145080997504469e0
+5.75,7.878448106132321315143963554872646272973763271405744989290515655e1,4.366716036622286343876685317648065634521419286112449914465130613e0
+5.875,9.709155657349066253554865249817948025861897010233556357248167953e1,4.575654415527620417529890910329129893292471499855154944554441537e0
+6.125,1.487344471383566706447489614677527996537187908671524106471039126e2,5.002162481906205027375608281015537181369273251577602426124171843e0
+6.25,1.848609622271983499524326028752890526038881334792693536489560128e2,5.219603986990229314558694829596988102518004667454376670344231199e0
+6.375,2.303860352318302091889442660448870020352368596690947642618481119e2,5.439756316011857765725817455445137330344338826123310687098929997e0
+6.5,2.878852778150443609963195467083000652371957280686283468403520621e2,5.66256205985714152852211231232954373029751121155216870182742023e0
+6.625,3.606709999914997436115791927655291706957649149458448115175171205e2,5.887966185430002947772241765197410759328984259159395944017500999e0
+6.75,4.530107661026084756207779044051771606959913881058303368842046501e2,6.115915891431545415848973906541908616812799332232375148222405972e0
+6.875,5.704128948692576423963483334268044465193864493512214359883298672e2,6.346360475557843076099145215726773897962021598794613215392909856e0
+7.125,9.109984887224346076990873889899858978790275940613085152135114649e2,6.814541238336995709334617403527366936416942307660559040680912114e0
+7.25,1.15538101391998968720270376797055657877430083424543346030597508e3,7.052185450738539444925749253133010245418207107270901605928166964e0
+7.375,1.468710974602917583579519696036154637974634980390479122169281713e3,7.29214040705634760911890094586625986635353199345103916376882204e0
+7.5,1.871254305797788346476077053603950424041772232446084254462288404e3,7.534364236758732955158367632436685767027279021952120564125785731e0
+7.625,2.389445374943685801426712152071630755859442561516221876303550923e3,7.778816557302288853665014539851938825462461608989847784703590441e0
+7.75,3.057822671192607210440250854734945834697941869714354773968381388e3,8.025458396315983871200245374393132594604270736980112995185128953e0
+7.875,3.921588652226146291474894792309280569820781839289647372419767837e3,8.274252119110478066510151762543561133082829403919782350162085428e0
+8.125,6.490864232147346579855997646553649522388071607686823170896269187e3,8.778150964491709932487193707963216474075311723701671548591526656e0
+8.25,8.376512350919925232219602317786535196113681048279392587218319329e3,9.033186919605122853274557042578568714761719752473135176608477296e0
+8.375,1.083174343769651717889895775826664045506293298037978352599845263e4,9.290236309282231131483254955211427786190378379700727930918818709e0
+8.5,1.403440729348341259857057790202962818031329174334563190846716303e4,9.549267257300997711737140081127222543124870799683132483652447947e0
+8.625,1.821952098394560423587868015954618451342824953156119180681457579e4,9.810248879795764174164707278903023867551642948990343085278934059e0
+8.75,2.369812570174270588091194412419583021890904949028624949825495576e4,1.007315123968123949829494545601913666890320939874019445870048701e1
+8.875,3.088251063628090204536479648943558448733865698440597305780567172e4,1.033794530382217482615429861545726256778839484606637667972882422e1
+9.125,5.273827188619719096132998087824840236940308181245543826353218715e4,1.087309669270751111488974411838019301417968061964963062456118003e1
+9.25,6.910622689508938316581171912173891536793786864830498884455113446e4,1.114340011995171246989728161454987058307991689551279129532037932e1
+9.375,9.071585129070833137327877122548311381115206371068068703023704081e4,1.141548738699336126290163058720062083253081087984185750569456281e1
+9.5,1.192924619946090070878499121672518395326629798184378712219708857e5,1.168933342079726848256944257754217251063757367790862201682900568e1
+9.625,1.571433684865308365344536163760858414283186522097152793337757162e5,1.196491384271318762811500898326121598641501341857276251665022374e1
+9.75,2.073585998902486764579795110867135144154541830400046831097308629e5,1.224220494005076255916659328977215090191489521387006286083116503e1
+9.875,2.740822818969930056526125688437408123251305807366030108880253365e5,1.252118363918365431923205678359576696032147096969617702548820999e1
+10.125,4.812367309615493675221360755140166716208031215386558741547312077e5,1.308411459217606631573015661144420588085793306144046252679483886e1
+10.25,6.392325987795767942837584018760849671534252849968211468120979938e5,1.336802367147604629543091304266496461082899421395991695072393198e1
+10.375,8.504611058503906066244884802389041919795505972876314409084722576e5,1.36535339588498357752466981262009921120030037431208766388925129e1
+10.5,1.133278388948785567334574165588892475560298308275159776608723415e6,1.39406252194037636331612378879718494797994528048474955812462859e1
+10.625,1.512504921682859301644116057619826223747567027518509563587591268e6,1.422927772288703554903060894029499531164730459901127511796614157e1
+10.75,2.021746348929924595465300233095456765550678284640045660319875913e6,1.451947222506051836778086172534364207521665344773250892074354486e1
+10.875,2.706562533732805930819549117331940521710664484773954732519250198e6,1.481118994997083988515330596070264817826851179103802088853834108e1
+11.125,4.872521900985687346161627764579418800160631605578890725816653478e6,1.539912220516866915305944119475977899522139488965069457137157616e1
+11.25,6.552134137490662141408523619229870913322609171217416754824004436e6,1.569530137706046348046321217278601906305440441463870807610183487e1
+11.375,8.823533973197802543729067982478630991787837446859176199425399672e6,1.599293302496659777047047398511783286080581639670334724671841633e1
+11.5,1.189942308396224845701302873868337099338313223688917765439159585e7,1.629200047656724132024460374687937834600852795789185096731969038e1
+11.625,1.607036479288038007996873311221065362731789966738416411311815723e7,1.659248743769751607562920652701977978253460856278477186481398717e1
+11.75,2.173377325099668940125197750577616022966979155988049084843866607e7,1.68943779796341901724192399957731359746247893638935538276938701e1
+11.875,2.94338675543442644976625966509848531736034762719167577161468459e7,1.719765652694558767548012686561255578418401485970274865683266574e1
+12.125,5.420680614846577172604810888094603415178702661206515932471026995e7,1.780831703322097306312556037105509851039955487370288817311623371e1
+12.25,7.371150904676994909084589071633604777487935317619593849177004991e7,1.811566950571089261901999773694090497572398661583221419324251141e1
+12.375,1.003676989451250039349181483006944275315866509580231292684639213e8,1.842435098980361188337761780575180149102166866796464978923481197e1
+12.5,1.368433654655658572556498304948587664239060207242255430255033523e8,1.873434751193644570163412445723139789637540813837203145519764574e1
+12.625,1.868179907172344184296365224294488484175705836333409078149985777e8,1.904564538917093608470191972411013299340553764800734752594335955e1
+12.75,2.553718356992111004647107356928698826986200508285957674691543263e8,1.935823122022435814040572642262895654736983959719326735265301843e1
+12.875,3.495271772078381409097433352304451314365412807290114978792437951e8,1.967209187686629258183821726635206725672049507218962943492123384e1
+13.125,6.572575245501474821783333201814706640904176976712900568121120231e8,2.030358647004451995699058562838453051998196937328090376673042805e1
+13.25,9.029659858229318763628621612751165852422720764084002465241831114e8,2.062119544270162861039623898091091129884715580627542606191993169e1
+13.375,1.242050274445921923694612085221093540703384805605536224697241026e9,2.094002929825836588197835549318745249591185623446680010556072831e1
+13.5,1.710542068319573215695622881185734580298825259052819287818791904e9,2.126007615624470114141841100222559660735111071254881164490226152e1
+13.625,2.358577132805084532674161095671791711271828618370928961164357044e9,2.158132436433235960733442162664859244606991983212418651351258488e1
+13.75,3.25599090516494153092506188008409100440740564806459603523171766e9,2.190376249182879329321604203450825565145453289888125108344359048e1
+13.875,4.500162406550916064212945441091981067245468989386023035195263862e9,2.222737932341609242435512321703097837312225577747966683517042477e1
+14.125,8.626505009720685703590624827381802466186732281935681995658970303e9,2.28781052785222073998402465776018938895656456118732663664751204e1
+14.25,1.196429931215384736180792363689529475446010501241130326644542623e10,2.320519299513385982570624387702361593305613329046613315672670115e1
+14.375,1.661242242071420572941543663983212610690777177497404700532559872e10,2.3533416591040436127031057945836199793248502107517441896758805e1
+14.5,2.30923179223142384118909088960074168340341409972130603855536907e10,2.386276584168908490618691459153499715321808225165680474598566451e1
+14.625,3.213561343446927675768544492852816206607866492530390709586436473e10,2.419323070488166737946004171448326439290376831254665190422541841e1
+14.75,4.476987494601794605021960085115625131060182766088819548443611783e10,2.452480131594137359304428070278321945465084083836667547233344606e1
+14.875,6.243975339089396039095461799515123730803088222773106961333428608e10,2.485746798304859063186676776061042153744332351938928668818799175e1
+15.125,1.218493832623046855632175756867679598348875934823415081886829555e11,2.552605155555471204017068170684338585736847559749549439885342841e1
+15.25,1.704912651981923249057629118257579502510564964268610715468473237e11,2.58619499018485193582760523029176420387900028408675009187579957e1
+15.375,2.388035722977667073603469016975868127867992192652519257015554816e11,2.619890717772385026418687374649805384698998337354562959830804825e1
+15.5,3.348386098735564569724181789921075440934950444595893755905285152e11,2.653691449111561362395295450243873219063709503121929357078665485e1
+15.625,4.699833464791131725811496320797243702164004745325696412770163341e11,2.687596309799958757005232326551910470277751696987159216175181256e1
+15.75,6.60355655453764704240739112554554706831376957998100883395432738e11,2.721604439872720242482586683358656394256318735897661949360412274e1
+15.875,9.287913316895476608154499426778746549569593731374996604983475054e11,2.755714993448028408896995875755219809844211085847612690158257961e1
+16.125,1.842971921842358369143665832262365392502674851420415311353829702e12,2.82424005594716172000428724983991147527853889022895629869285238e1
+16.25,2.599991794272432954812884405342808741328611570509631341089421687e12,2.858652940490193998819297716342690364895468431522825147345401932e1
+16.375,3.67160492407816312566533361360039724659703799620324835766141553e12,2.893164999141643183119718599208345743578738399768691492129996546e1
+16.5,5.189998453040125083072481774377666933449173189123635321653191985e12,2.927775451504081456046488670552291283301153382733963028842269291e1
+16.625,7.34348978873614332158046300124569328463125741457140064495338022e12,2.962483529362205276560290490082313791712782062959637956512771621e1
+16.75,1.040060157339679409179164102273423663259418708847008891347806562e13,2.997288476399884449388724580795844194534425293548346907729154154e1
+16.875,1.474456239057156911544526784001126014744173004855780711041126665e13,3.032189547925903943376570320089396078908951957932144690212780479e1
+17.125,2.971792223970802870244161154523064195410563197915419689558050395e13,3.102277142215345338665926388429295778876551524191310209149286337e1
+17.25,4.224986665692703551570937158682064204658993802078150929270310241e13,3.137462231367768648001275969530205675713455334553646580354435271e1
+17.375,6.01225306317799211827698379227065049130264971878281918567056793e13,3.172740577293774744709491363887845362466879359924673013089492089e1
+17.5,8.563497447516206387069594927723150440191135762053998280727766775e13,3.208111489594734948650484339895239126940523110473954166125527495e1
+17.625,1.220855177377383827212751973957096508569946545172495357223499462e14,3.243574288016397060246558871177964147977578421739660380976302656e1
+17.75,1.742100763543963010375099871307984635959526337318739893007575992e14,3.279128302226991993472285356140581155976018556998485390618796565e1
+17.875,2.488144903408952288231388948001900149880791945694129949881901247e14,3.314772871601763295430050188051319583833109220397744721688249566e1
+18.125,5.089194183549999915293125977120747434640589476430156218368161302e14,3.386331080630174237372275764789829347510215001287690164418109738e1
+18.25,7.288101998319913626459866598726560753036764308584810352991285166e14,3.42224344571550552433802935211184254440734239494791404890363224e1
+18.375,1.044628969727176130550625933907025522863835388638514833510261178e15,3.458243816438860327603200219337946770288488985652111828420695936e1
+18.5,1.498612053315336117737179112351551327033448758359449699127359186e15,3.494331577687681785679372335416358207049241705422966531750663298e1
+18.625,2.151757250127638995462475354099382596354530785866523067106417801e15,3.530506122886230295243008825409981118909282487415881153233618922e1
+18.75,3.092228855290534343415802271571672728828159248740763310088447386e15,3.566766853819134473721784385100249252036876182797490950606803143e1
+18.875,4.447559014843502215213607744553396517911915602928257285413898479e15,3.603113180459770430616423653566911403873156659959430574615806885e1
+19.125,9.224164457684374846468790833531354725286068426029658145792292359e15,3.676060300704248084725509264911186301589576387798739768265337559e1
+19.25,1.330078614693384236828925654267597337429209486316727889420909543e16,3.712659953718355575363793813564061487882717652563022764539066124e1
+19.375,1.919505731873686139886775153554159398262297526623271006575104914e16,3.749342920948750364938625655281382316258004947042682435049839397e1
+19.5,2.772432298633371817813781357850369955011880202964981943385614494e16,3.786108650896109699174458690373685266631699450703704622703086565e1
+19.625,4.007647878362727629048860347010100085710313588676399212485703155e16,3.822956599312792616517082016482940197272240924227101291776368928e1
+19.75,5.797929103669751893904629259196886366552798591388931206415838848e16,3.859886229060776455898014351146104036791645482561418389338666153e1
+19.875,8.394767640517110431215684617844535927558740700527085626218733379e16,3.896897009973279270670877647077906062476280258909332985907872286e1
diff --git a/commons-numbers-gamma/src/test/resources/org/apache/commons/numbers/gamma/gamma_150_171_data.csv b/commons-numbers-gamma/src/test/resources/org/apache/commons/numbers/gamma/gamma_150_171_data.csv
new file mode 100644
index 0000000..fea7649
--- /dev/null
+++ b/commons-numbers-gamma/src/test/resources/org/apache/commons/numbers/gamma/gamma_150_171_data.csv
@@ -0,0 +1,75 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Reference data for the gamma function in the range 150 to 171.5. This
+# data was generated with the following <a
+# href="http://maxima.sourceforge.net/">Maxima</a> script.
+#
+# kill(all);
+#
+# fpprec : 64;
+#
+# EPSILON : 10**(-fpprec + 1);
+# isInteger(x) := abs(x - floor(x)) <= EPSILON * abs(x);
+# str(x) := ssubst("e","b",string(x));
+#
+# x : makelist(bfloat(0.25 + i / 2), i, 300, 342);
+#
+# for i : 1 while i <= length(x) do if not(isInteger(x[i])) then
+#     printf(true, "~f,~a,~a~%", x[i], str(gamma(x[i])), str(log(gamma(x[i]))));
+
+150.25,1.332150776195163484301175039370643143242689361732953186180615285e261,6.012615040324997259805352743078495106215565353345767675704886095e2
+150.75,1.631545964075120229335633677020020476993639575544573973177542399e262,6.037668223739874758780708410238230983668392514020599475960803776e2
+151.25,2.001556541233233135162515496654391322722140766003762162236374465e263,6.062738046059150429409738905715123036175214003175876544868479499e2
+151.75,2.459555540843243745723467768107680869067911660133445264565145166e264,6.087824452095947707016969392511155193905501651522068313284461904e2
+152.25,3.027354268615265116933304688689766875617237908580690270382516379e265,6.112927387028259937848640728177523967205394151110104960509563732e2
+152.75,3.73237553322962238413536233810340571881055594425250318897760779e266,6.138046796395343783450124472430458580209242826199196544431824195e2
+153.25,4.609146873966741140530956388530170068127244715814100936657381187e267,6.16318262609416000189713478587563660624167503043617340261830768e2
+153.75,5.701203627008248191766765971452952235483124204845698621163295899e268,6.188334822375860830490524211114669971984746007979795750845606134e2
+154.25,7.063517584354030797863690665422485629405002526985109685427436668e269,6.21350333184232320970318746938223358424703584430578465639057113e2
+154.75,8.765600576525181594841402681108914062055303464950261630038567445e270,6.238688101442727103000807248117367649948731029107496333835858585e2
+155.25,1.089547587386609250570474285141418408335721639787453168977182106e272,6.26388907847017818165481854373917196113267019078496818331521159e2
+155.75,1.356476689217271851801707064901604451103058211201052987248468312e273,6.289106210558374157834742959589701355885990980463701956586287456e2
+156.25,1.69152262941771086151066132768205207894120784577002104483707522e274,6.314339445678314063116398786735786162095008707980849919204825174e2
+156.75,2.112712443455900909181158753584248932593013163945640027639489396e275,6.339588732135049783080630000001668114014898428943645057029534733e2
+157.25,2.643004108465173221110408324503206373345637259015657882557930031e276,6.36485401856447917191208451763567013631452275946438552299891749e2
+157.75,3.311676755117124675141466346243310201839548134484790743324899628e277,6.390135253930180083846947520040259668070454192987032906402033356e2
+158.25,4.156123960561484890196117090281292022086014589802122020322344973e278,6.415432387520284670969916178095552341947895562774714227425925393e2
+158.75,5.224170081197264175035663161198821843401887182149757397595029164e279,6.440745368944393309231390257947752077546741312666188351293898011e2
+159.25,6.57706616758854983873535529537014462495111808836185809716011092e280,6.466074148130527526652943550690156868813272047401553300567736525e2
+159.75,8.293370003900656877869115268403129676400495901662739868682108797e281,6.491418675322121319519527616928013346529226414760929281059683542e2
+160.25,1.047397787188476561818605330787695531523465555571625901972747664e283,6.516778901075050253927240837545510118092556418753587490418701182e2
+160.75,1.32486585812312993623959116412739996580497922029062269402196688e284,6.542154776254697761372382424562430670228261988497284826093178086e2
+161.25,1.678454953969533690314315042587282089266353552803530507911328132e285,6.567546252033058048137230260496362588589728754360331968091403845e2
+161.75,2.12972186693293137250514279633479544503150409661717598064031176e286,6.592953279885875049056683467168747469735501698184154673645142375e2
+162.25,2.706508613275873075631833006171992368941995103895692944007016612e287,6.618375811589816866843574088902144661025541032642855088897380519e2
+162.75,3.444825119764016495027068473071531632338457876278282148685704272e288,6.643813799219685148514889516896159342492126105480809165532106133e2
+163.25,4.391310225040104065212649052514057618608387056070761801651384454e289,6.669267195145658860602009385989829398902881566388328700862272963e2
+163.75,5.606452882415936845656553939923917731630840193642904196985983703e290,6.694735952030571934750842497516076437577961244972456086569200558e2
+164.25,7.16881394237796988645964957822919906237819186903551864119588512e291,6.72022002282722426502779425427264811835941449926556717439403343e2
+164.75,9.180566594956096584762607076625415285545500817090255622564548313e292,6.745719360775725547749999688530870041542786355874341968425483391e2
+165.25,1.177477690035581553850997443224145945995618014489083936816424131e294,6.771233919400871463958275605156320526799901836183533034992270706e2
+165.75,1.512498346519016912339639515874037168293621259615619613817509335e295,6.796763652509551713753693784609904751191706557404530701949255339e2
+166.25,1.945781882783798517738773274927901175757758768943211205589140877e296,6.822308514188189420628337858611944068202564507003523532556294685e2
+166.75,2.506966009355270532202952497561216606446677237812889509902521722e297,6.847868458800211432642331815144350928280606169869012610421351514e2
+167.25,3.234862380128065035740710569567635704697273953368088629291946707e298,6.873443440983549055837144611268352745905055157767813504762981068e2
+167.75,4.180365820599913612448423289683328691249834294052993257762454972e299,6.899033415648168763633887421356908474158465099469439303548140972e2
+168.25,5.410307330764188772276338427601870716106190687008128232490780868e300,6.924638337973632434149113473305645871857006343403545762429018135e2
+168.75,7.012563664056355084882230068443783879571597028273896189896518215e301,6.950258163406686675373676105741652383258328982752420980847286885e2
+169.25,9.10284208401074760935493940444014747984866583089117575116573881e302,6.975892847658880806006557942520045722550184968684070367352176099e2
+169.75,1.183370118309509920573876324049888529677706998521219982045037449e304,7.001542346704213067419204007084688375826755723885268713755167073e2
+170.25,1.540656022718819032883323494201494960964386691878331495884801294e305,7.027206616776804649750620219444087311463584731429820602996470499e2
+170.75,2.008770775830393090174155060074685779127907629989770919521451069e306,7.052885614368601122503080108306996258899705717520470034117109718e2
+171.25,2.622966878678789403483858248878045171041868342922859371743874202e307,7.078579296227100867226361845152484007600098633510032727512804386e2
diff --git a/commons-numbers-gamma/src/test/resources/org/apache/commons/numbers/gamma/gamma_20_150_data.csv b/commons-numbers-gamma/src/test/resources/org/apache/commons/numbers/gamma/gamma_20_150_data.csv
new file mode 100644
index 0000000..9524897
--- /dev/null
+++ b/commons-numbers-gamma/src/test/resources/org/apache/commons/numbers/gamma/gamma_20_150_data.csv
@@ -0,0 +1,292 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Reference data for the gamma function in the range 20 to 150. This
+# data was generated with the following <a
+# href="http://maxima.sourceforge.net/">Maxima</a> script.
+#
+# kill(all);
+#
+# fpprec : 64;
+#
+# EPSILON : 10**(-fpprec + 1);
+# isInteger(x) := abs(x - floor(x)) <= EPSILON * abs(x);
+# str(x) := ssubst("e","b",string(x));
+#
+# x : makelist(bfloat(0.25 + i / 2), i, 40, 299);
+#
+# for i : 1 while i <= length(x) do if not(isInteger(x[i])) then
+#     printf(true, "~f,~a,~a~%", x[i], str(gamma(x[i])), str(log(gamma(x[i]))));
+
+20.25,2.56040133328476465589568188446512487455122826115970118713525087e17,4.008411059791734898397077021413257077213496784042899550082725908e1
+20.75,1.145090997974775999046164278691385057394177721799313913267128172e18,4.158201578195489543431862481002609815393899578131628301055747263e1
+21.25,5.184812699901648428188755816041877870966237228848394903948883011e18,4.309226539146989713071728691890632045457392980299948279952467639e1
+21.75,2.376063820797660198020790878284623994092918772733576370029290958e19,4.461456202863160273895963279040111547081730856925900887250405607e1
+22.25,1.10177269872910029099011061090889904758032541113028391708913764e20,4.6148622286840322966733116627089281493536733901133234800493202e1
+22.75,5.167938810234910930695220160269057187152098330695528604813707833e20,4.769417578616629583870368581676919964480831177228399189491906074e1
+23.25,2.451444254672248147452996109272300380866224039764881715523331249e21,4.925096429545257218621646792484277757679039401954568365635853956e1
+23.75,1.175706079328442236733162586461210510077102370233232757595118532e22,5.081874093156325526102806175886134484309966417790554969155613638e1
+24.25,5.699607892112976942828215954058098385513970892453349988591745153e22,5.239726942748593750470641324339130735573682323912851457160859195e1
+24.75,2.792301938405050312241261142845374961433118129303927799288406514e23,5.398632346204390547680338428105903288371164452475268572376538449e1
+25.25,1.3821549138373969086358423688590888584871379414199373722334982e24,5.55856860448694297079886706221789159333947378730667854193434663e1
+25.75,6.910947297552499522797121328542303029546967370027221303238806122e24,5.719514895105860478482135408995286045667733222561509129421198085e1
+26.25,3.489941157439427194305501981369199367680023302085341864889582954e25,5.881451220059079854003840464617555195413462019154387966103337164e1
+26.75,1.779568929119768627120258742099643030108344097782009485583992576e26,6.044358357816834993675549216208994814115459306526538394858185179e1
+27.25,9.161095538278496385051942701094148340160061167974022395335155255e26,6.2082178189628431292305297716851091891793796564496497514898744e1
+27.75,4.760346885395381077546692135116545105539820461566875373937180142e27,6.373011805151036549122542673619687200656673907267628099390060849e1
+28.25,2.496398534180890264926654386048155422693616668272921102728829807e28,6.538723171073768437384814992614394040670314517927921815973225753e1
+28.75,1.320996260697218249019207067494841266787300178084807916267567489e29,6.705335389170280900815430340123449173896330694894615610103885549e1
+29.25,7.052325859061014998417798640586039069109467087871002115208944204e29,6.872832516833013432359581717684360894258147529926170144623124555e1
+29.75,3.797864249504502465930220319047668642013488011993822759269256532e30,7.041199165894616845472735132335452236078028834933459905670877874e1
+30.25,2.06280531377534688703720610237141642771451912320226811869861618e31,7.210420474200799982360533084933762582053072409094689695787831971e1
+30.75,1.129864614227589483614240544916681420999012683568162270882603818e32,7.38048207909378072212477744417544754898545758227816945242240466e1
+31.25,6.239986074170424333287548459673534693836420347686861059063313944e32,7.551370092648485029289475376235153128402313753010122080007409511e1
+31.75,3.474333688749837662113789675618795369571964001972098982964006741e33,7.723071078519033409767531880879805564672747658128323510133664383e1
+32.25,1.949995648178257604152358893647979591823881358652144080957285607e34,7.895572030266726079786256751911374106644894132418626345757067876e1
+32.75,1.10310094617807345772112822200896752983909857062614142709107214e35,8.068860351052903475188829537359799490545038543648881035600254902e1
+33.25,6.288735965374880773391357432014734183632017381653164661087246084e35,8.242923834590904229389619102646576067050456779817005781625569834e1
+33.75,3.612655598733190574036694927079368660223047818800613173723261259e36,8.417750647261029567720325514185116766240729517240888081971818445e1
+34.25,2.091004708487147857152626346144899116057645779399677249811509323e37,8.593329311301090544017610695888044080122803152033053731501168871e1
+34.75,1.219271264572451818737384537889286922825278638845206946131600675e38,8.769648688992883450715528594292857927972436793142513638859355533e1
+35.25,7.161691126568481410747745235546279472497436794443894580604419431e38,8.946697967771913973665683284394395305564016642565459212182060273e1
+35.75,4.236967644389270070112411269165272056817843269987094137807312346e39,9.124466646193963564550960661888776992601596432305977979602627381e1
+36.25,2.524496122115389697288580195530063514055346470041472839663057849e40,9.302944520697741739603856450772229933303270721677705509851444539e1
+36.75,1.514715932869164050065187028726584760312378969020386154266114164e41,9.482121673107965230679057339550186469449193885303689357942252701e1
+37.25,9.151298442668287652671103208796480238450630953900339043778584704e41,9.661988458827810117898813163039404544190182121624780639110740362e1
+37.75,5.566581053294177883989562330570198994147992711149919116927969551e42,9.842535495673849798956205987639439672226259860130285489983464163e1
+38.25,3.408858669893937150619985945276688888822860030327876293807522802e43,1.002375365331036697011460956625818127936069057187202630306555837e2
+38.75,2.101384347618552151206059779790250120290867248459094466640308506e44,1.020563404324335316995238319329625198763693347251621342668759757e2
+39.25,1.303888441234430960112144624068333499974743961600412682381377472e45,1.038816800933762145453516565113836376023390895782309962131808501e2
+39.75,8.142864347021889585923481646687219216127110587778991058231195459e45,1.057134711882328877012192913478147115901938747411907334523039816e2
+40.25,5.117762131845141518440167649468208987400870049281619778346906577e46,1.075516315376046319839416375048707597149303329403741360608676761e2
+40.75,3.236788577941201110404583954558169638410526458642148945646900195e47,1.093960810293332286079245414808499419290503427832041899988454454e2
+41.25,2.059899258067669461172167478910954117428850194835851960784629897e48,1.112467415414692043610192788372077824268587977160759224830843416e2
+41.75,1.318991345511039452489867961482454127652289531896675695351111829e49,1.131035368690201003231550096040543386695312295372138980265299109e2
+42.25,8.497084439529136527335190850507685734394007053697889338236598326e49,1.149663926542498943522427627424052719347025962133840963237088915e2
+42.75,5.506788867508589714145198739189245982948308795668621028090891888e50,1.168352363203169648115802961378827648991775518711043791181482357e2
+43.25,3.590018175701060182799118134339497222781467980187358245404962793e51,1.187099970080530772055152733826195560081621318341840000483056225e2
+43.75,2.354152240859922102797072461003402657710402010148335489508856282e52,1.205906055156997340355453498006993167095589119793284963319142245e2
+44.25,1.552682860990708529060618593101832548852984901431032441137646408e53,1.224769942414309655336143095281441943411969844731775638264811972e2
+44.75,1.029941605376215919973719201688988662748300879439896776660124623e54,1.243690971285033574710177569676785185820961991487268824559575505e2
+45.25,6.870621659883885241093237274475609028674458188832318552034085355e54,1.262668496128849040567911408958700645337568215516102572994865682e2
+45.75,4.60898868405856624188239342755822426579864643549353807555405769e55,1.281701885732242218483610971547835676215481322981875195002426684e2
+46.25,3.108956301097458071594689866700213085475192330446624144795423623e56,1.300790522830308391847957636915867203248461537243922256048279363e2
+46.75,2.108612322956794055661194993107887601602880744238293669565981393e57,1.319933803649457521696732672522153549363603043303710195066733864e2
+47.25,1.437892289257574358112544063348848552032276452831563666967883426e58,1.339131137469892733849301544529280019921208323971078689821441369e2
+47.75,9.857762609823012210216086592779374537493467479314022905220963013e58,1.358381946206804481751502812051372576356192139281736709609478318e2
+48.25,6.794041066742038842081770699323309408352506239629138326423249187e59,1.3776856640092902514538677866422240569954938853143746801756625e2
+48.75,4.707081646190488330378181348052151341653130721372445937243009839e60,1.397041736876071874291657669144232716460766551359207074841871837e2
+49.25,3.278124814703033741304454362423496789530084260621059242499217733e61,1.416449622287140200784072454746891113275884557552959430834943105e2
+49.75,2.294702302517863061059363407175423779055901226669067394405967296e62,1.435908788850510436123807946832209504589040147240516712660122114e2
+50.25,1.614476471241244117592443773493572168843566498355871676930864733e63,1.455418715963321179663525785609355891664460995489334722810515549e2
+50.75,1.14161439550263687287703329506977333008031086026786102871696873e64,1.474978893486556453889564517321731345246441197359006332566773124e2
+51.25,8.112744267987251690902029961805200148438921654238255176577595285e64,1.494588821432713030985834315513054844855095227412576065616826733e2
+51.75,5.793693057175882129850943972479099650157577615859394720738616304e65,1.514248009665775421024106122650618727236247171106847280158170129e2
+52.25,4.157781437343466491587290355425165076074947347797105777996017583e66,1.533955977612898206582164900146527265772605342962049154089732241e2
+52.75,2.998236157088519002197863505757934068956546416207236767982233937e67,1.553712253987230205571733913278007671152110782724501521530436769e2
+53.25,2.172440801011961241854359210709648752249159989223987769002919187e68,1.57351637652134741043452996781589356278168620142720950894488392e2
+53.75,1.581569572864193773659372999287310221374578234549317395110628402e69,1.593367891710791964340808833503386940971012361773113100154900957e2
+54.25,1.156824726538869361287446279702887960572677694261773486994054467e70,1.613266354567242755373432323081085629434246869585337559461031521e2
+54.75,8.500936454145041533419129871169292439888358010702580998719627661e70,1.633211328380869686133200209539943756360349734477408726443530688e2
+55.25,6.275774141473366284984396067388167186106776491370121166942745485e71,1.653202384491448444695432851331777467473607103498756985980779003e2
+55.75,4.654262708644410239546973604465187610838876010859663096798996144e72,1.67323910206783578814972910805439090775436216581714709252442102e2
+56.25,3.46736521316403487245387882723196237032399401148199194473586688e73,1.693321067895427066670118429496998387516031810385011399935528236e2
+56.75,2.59475146006925870854743778448934209304267337605426217646544035e74,1.713447876171238069547745517722458776659838445874651855673111143e2
+57.25,1.95039293240476961575530684031797883330724663145862046891392512e75,1.73361912830627236180169387847080912303798364593963163832606148e2
+57.75,1.472521453589304317100670942697701637801717140910793785144137399e76,1.753834432734853190109534691061630215749877442376636485672098087e2
+58.25,1.116599953801730605019913166082042882068398696510060218453222131e77,1.774093404730615852097761592080971674848858342682385991714135041e2
+58.75,8.503811394478232431256374694079226958304916488759834109207393478e77,1.794395666228872219326815464215775031729430261102851658743811008e2
+59.25,6.504194730895080774240994192427899788048422407171100772490018915e78,1.814740845655073951562439198398497018273238098499790045709153162e2
+59.75,4.995989194255961553363120132771545838004138437146402539159343669e79,1.835128577759114902752687921816595113852136776978533971212528971e2
+60.25,3.853735378055335358737789059013530624418690276248877207700336207e80,1.855558503455226357229776463753372853179938413635038531398208216e2
+60.75,2.985103543567937028134464279330998638207472716194975517147707842e81,1.876030269667231103233974915330050673455004817849358562837805199e2
+61.25,2.321875565278339553639517908055652201212260891439948517639452565e82,1.896543529178934000996095934511317479168601008587995904692508638e2
+61.75,1.813450402717521744591687049693581672711039675088447626667232514e83,1.917097940489437681615392534747013427325869343053290930342126315e2
+62.25,1.422148783732982976604204718684086973242509796006968467054164696e84,1.93769316767318236465586594028327941879508871403511320059840932e2
+62.75,1.119805623678069677285366753185786682899066999367116409467016077e85,1.958328880244518547387673041052381617384785812426679184609282772e2
+63.25,8.852876178737819029361174373808441408434623480143378707412175232e85,1.979004753026630534616228472456254849010346747492767953735222098e2
+63.75,7.026780288579887224965676376240811435191645421028655469405525886e86,1.999720466024637480061514251013300618436069265895311458883226107e2
+64.25,5.599444183051670536070942791433839190834899351190687032438200834e87,2.020475704302706830776570794124844571831477616493341377824980529e2
+64.75,4.479572433969678105915618689853517289934673955905767861746022752e88,2.041270157865022835335625000464355485872172212454876473410258306e2
+65.25,3.597642887610698319425580743496241680111422833140016418341544036e89,2.062103521540460122571744094843293594986114862096005721122998127e2
+65.75,2.900523150995366573580363101680152445232701386448984690480549732e90,2.082975494870819306642014842179938223446033832935166341848887734e2
+66.25,2.347461984165980653425191435131297696272703398623860712967857484e91,2.103885782002488150483137077476199693772499799704483045864495117e2
+66.75,1.907093971779453522129088739354700232740501161590207433990961449e92,2.124834091581398045964529462392825412988378668648606889554752463e2
+67.25,1.555193564509962182894189325774484723780666001588307722341205583e93,2.14582013665115146638224471976958861650984558808907529403168929e2
+67.75,1.272985226162785226021166733519262405354284525361463462188966767e94,2.166843634554201635073315427739585630867390175410958872630752782e2
+68.25,1.045867672132949567996342321583340976742497886068136943274460754e95,2.187904306835970951256099609145377456327046066513500565091251701e2
+68.75,8.624474907252869906293404619593002796275277659323914956330249847e95,2.209001879151799737885939486042480719894935492017919004153631325e2
+69.25,7.138046862307380801575036344806302166267548072415034637848194649e96,2.230136081176621642393295820935524165356434496147943637574969401e2
+69.75,5.92932649873634806057671567597018942243925339078519153247704677e97,2.25130664651726654463022946605749223432215458495545842526165636e2
+70.25,4.943097452147861205090712668778364250140277040147411486709874795e98,2.272513312627296121203645154001606742386554692938461241675890241e2
+70.75,4.135705232868602772252259183989207122151379240072671093902740122e99,2.293755820724281294729081371612202789158093782729514228931503827e2
+71.25,3.472525960133872496576225649816800885723544620703556569413687043e100,2.315033915709434672666366894819374930433243547911345431869653015e2
+71.75,2.926011452254536461368473372672364038922100812351414798936188636e101,2.336347346089514764787196600650990659844588115071323689954457756e2
+72.25,2.474174746595384153810560775494470631078025542251284055707252018e102,2.357695863900922271738072572410577067885838256958044286709092439e2
+72.75,2.099413216992629911031879644892421197926607332862140118236715347e103,2.379079224635912069688573119386633001663213064373930213092830686e2
+73.25,1.787591254415165051128130160294755030953873454276552730248489583e104,2.400497187170847687154718622338876067236092314522554077372623594e2
+73.75,1.527323115362138260275692441659236421491606834657206936017210415e105,2.421949513696428088635348145543734344486267116291540416087526373e2
+74.25,1.30941059385910839995135534241590806017371230525757487490701862e106,2.443435969649819454025772382537837517776880058414266061765682478e2
+74.75,1.126400797579576966953323175723686860850060040559690115312692681e107,2.464956323648627380699171600184029665760646595040325033519359619e2
+75.25,9.722373659403879869638813417438117346789813866537493446184613251e107,2.486510347426647544019904532996001050553011841001117611987495385e2
+75.75,8.419845961907337827976090738534559284854198803183683611962377789e108,2.508097815771335338779429360488621281631613074949126357021122828e2
+76.25,7.316086178701419601903207096622183303459334934569463818253921471e109,2.529718506462937395117341843134727786843464047458546672941592539e2
+76.75,6.378033316144808404691888734439928658277055593411640336061501175e110,2.551372200215230124013879153097812898885486803712124793955368824e2
+77.25,5.578515711259832446451195411174414768887742887609216161418615122e111,2.573058680617812605162518685072082279340366875744839355707679254e2
+77.75,4.895140570141140450601024603682645245227640167943433957927202152e112,2.594777734079903189361519136341474290362433882872202315779807987e2
+78.25,4.309403386948220564883548455132235408965781380678119484695880182e113,2.616529149775591153595812518162678413231614389719569776768724907e2
+78.75,3.805971793284736700342296629363256678164490230576019902288399673e114,2.638312719590496624515134449566637581762123124309976079499426801e2
+79.25,3.372108150286982592021376666140974207515723930380628496774526242e115,2.660128238069793779574255528826086985405835379715737370967794943e2
+79.75,2.997202787211730151519558595623564634054536056578615673052114742e116,2.681975502367554048951755832642618238185189793617729752555427467e2
+80.25,2.672395709102433704176941007916722059456211214826648083693812047e117,2.703854312197367679527908508089909567138101208675402999882752941e2
+80.75,2.390269222801354795836847980009792795658492505121445999259061507e118,2.725764469784203588475863346316725115876841988609126260014416248e2
+81.25,2.144597556554703047601995158853169452713609499898385087164284168e119,2.747705779817468931986560306200204062838697574327739464853287451e2
+81.75,1.930142397412093997638254743857907682494232697885567644401692167e120,2.769678049405231247690104324385171385243587808660769890990354627e2
+82.25,1.742485514700696226176621066568200180329807718667437883320980886e121,2.791681088029567400650765724851217470315752278173506785373317264e2
+82.75,1.577891409884386843069273253103839530439035230521451549298383347e122,2.813714707503004875419485298847325127439156200386824591956036706e2
+83.25,1.433194335841322646030270827252344648321266848603967659031506779e123,2.835778721926022213381684116554207473339573627802322532507502648e2
+83.75,1.305705141679330112639823616943427211438301653256501157044412219e124,2.857872947645576598238986824813927964144616768656775713141262141e2
+84.25,1.193134284587901102820200463687576919727454651462803076143729393e125,2.879997203214627745464925335573808927710014212143248778096232062e2
+84.75,1.093528056156438969335852279190120289579577634602319719024695234e126,2.902151309352628356393350495680663536684032108544474738649352861e2
+85.25,1.005215634765306679126018890656783554870380543857411591651092014e127,2.924335088906952456521629358691129708477477767148092640112559928e2
+85.75,9.267650275925820265121348066136269454186920453254659618734292105e127,2.946548366815233952804779620556885479089290315322527066031689684e2
+86.25,8.569463286374239439549311042849079805269994136384433818825559419e128,2.968790970068588718233195795287041042218684222305067626499899185e2
+86.75,7.94701011160639087734155596671185105696528428866587062306465548e129,2.991062727675694445769595560431017339616892854522777796603057789e2
+87.25,7.391162084497781516611280774457331332045369942631574168737044999e130,3.013363470627703409612878726877466605483328941887179550573945361e2
+87.75,6.894031271818544086093799801122530791917384120417642765508588629e131,3.035693031863964131504787686465712403601324634599711857269642868e2
+88.25,6.448788918724314373243342475714021587209585274946048462223071762e132,3.058051246238528775056528899673289471213307792574578069383795647e2
+88.75,6.049512441020772435547309325485020769907504565666481526733786522e133,3.080437950487423883418835275559877829427292028094791306903460553e2
+89.25,5.69105622077420743438724973481762405071245900513988776791186083e134,3.10285298319666283654214145841600563987671048946535722213609334e2
+89.75,5.368942291405935536548237026367955933292910302029002354976235538e135,3.125296184770979135189792771788106515428633804217377040121387689e2
+90.25,5.079267677040980135190620388324729465260869662087349832861335791e136,3.147767397403260321121298141969230428213928269778055671328592962e2
+90.75,4.818625706536827144052042731165240450130386996071029613591171395e137,3.170266465044663017731929058214989783844273260197187951399662715e2
+91.25,4.584039078529484572009534900463068342397934870033833224157355551e138,3.192793233375390224133134048177823967597165852316833142616938567e2
+91.75,4.372902828682170633227228778532455708493326198934459374333988041e139,3.215347549776112619338775739714354095525672300166958684338967412e2
+92.25,4.18293565915815467195870059667254986243811556890587281704358694e140,3.237929263300016232981718087655307738339959391621029191399608434e2
+92.75,4.012138345315891555985982404303528112542626787522366475951434028e141,3.2605382246454594158666254166767748558194589618298848618964064e2
+93.25,3.858758145573397684881901300430427248099161612315667673722708952e142,3.283174286129222598659945983694968796955163304784272091688081349e2
+93.75,3.721258315280489418176998679991522324383286345426994906444955061e143,3.305837301660334861070778993072333699457919583967610544729067996e2
+94.25,3.598291970747193341152372962651373408852468203484360105746426098e144,3.328527126714461847884958687316821906972841478323333603941965296e2
+94.75,3.48867967057545882954093626249205217910933094883780772479214537e145,3.351243618308840063034409583009181054328652527486688465821380776e2
+95.25,3.391390182429229724036111517298919437843451281784009399666006597e146,3.373986634977743049328981639626930677714329284222958010812958854e2
+95.75,3.305523987870247240990037108711219439706091074023822819240557738e147,3.396756036748465420324237306416553802048030532893197114711662331e2
+96.25,3.230299148763841312144396220227220764545887345899268953181871284e148,3.419551685117811152785063857644155327348033278353241257876964849e2
+96.75,3.165039218385761733247960531590992613518582203377810349422834034e149,3.442373443029072974035823209358914973208333981588109786289843531e2
+97.25,3.109162930685197262938981361968699985875416570428046367437551111e150,3.465221174849490088834399771761336762676367205043914113650457307e2
+97.75,3.062175443788224476917401814314285353579228281768031513066591928e151,3.48809474634817188591011189680166042629536515190617522439404067e2
+98.25,3.023660950091354338208159374514560736263842614741275092333018455e152,3.510994024674475645574541331668494957826045106538793546498821614e2
+98.75,2.993276496302989426186760273492213933123695645428250804022593609e153,3.533918878336826637432330128869330121474160982493231924604585801e2
+99.25,2.970746883464755637289516585460555923379225368983302778217190632e154,3.556869177181969351741643381720251942442089109476221745653324912e2
+99.75,2.955860540099202058359425770073561258959649449860397668972311189e155,3.579844792374638949931722535187242575729642405592938092995420391e2
+100.25,2.948466281838769970009845211069601753953881178715928007380561703e156,3.602845596377642349684133059592857003915401984300271081995352306e2
+100.75,2.948470888748954053213527205648377355812250326235746674799880411e157,3.625871462932338678308474146880614634083351948392770382500327238e2
+101.25,2.955837447543366894934869824097275758338765881662717827399013107e158,3.64892226703950913535429520803718696986267135482246379496383147e2
+101.75,2.970584420414571208612628659690740185980842203682514774860879514e159,3.671997884940606601939956022112527860874394014457973268299671274e2
+102.25,2.992785415637658981121555696898491705318000455183501800241500771e160,3.695098194099375620567767968417186343082316987990853845169932122e2
+102.75,3.022569647771826204763349661235328139235506942246958783420944906e161,3.718223073183833645635911772173330094150101856181818696605892478e2
+103.25,3.060123087489506308196790700078707768687655465425130590746934538e162,3.741372402048604731836558548079306672593934891927738324540052683e2
+103.75,3.105690313085551425394341776919299663064483383158750149965020891e163,3.764546061717597085514671483393190473740698110813286739191328561e2
+104.25,3.159577087832915263213186397831265771170004268051447334946209911e164,3.787743934367016153205427936821771914769429204429656376637353351e2
+104.75,3.222153699826259603846629593553773400429401510027203280588709174e165,3.810965903308705162307089156529202523304737252235399175029920874e2
+105.25,3.293859114065814161899746819739094566444729449443633846681423832e166,3.83421185297380526150292359595058907827882007392423030522902748e2
+105.75,3.37520600056800693502934449924757763694979808175349543641667286e167,3.857481668896727633429073853316893895842549128273132274135540818e2
+106.25,3.466786717554269405399483527775397031183077745539424623632198583e168,3.880775237699430169490466115805396521652525491856771829739377631e2
+106.75,3.569280345600667333793531807954313351074411471454321424010631549e169,3.904092447075991506936843622323902615662949441762584398419826188e2
+107.25,3.683460887401411243236951248261359345632020104635638662609210994e170,3.927433185777475431596632006219488008437409546380794526968189366e2
+107.75,3.810206768928712378824595204991229502271934245777488120131349179e171,3.950797343597078846287066398363427029060967103802010515851380325e2
+108.25,3.950511801738013558371630213760307898190341562221722465648378792e172,3.974184811355556695123394126354854213168644197258793159319498841e2
+108.75,4.10549779352068758818350133337804978869800914982524344944152874e173,3.997595480886917417976198423997514000237381853210073252806100989e2
+109.25,4.276429025381399676937289706395533299791044741105014569064370042e174,4.021029245024382687402252329665416121502404307608597985816394847e2
+109.75,4.464728850453747752149557700048629145209084950434952251267662505e175,4.044485997586605352719646547593456718372547898783008260249377514e2
+110.25,4.671998710229179147053989004237120130021716379657228416702824271e176,4.067965633364139682722065489873233086697691900682788526339347203e2
+110.75,4.900039913372988157984139575803370486866970733102360095766259599e177,4.091468048106158160031234026461720724014599401756344200029641019e2
+111.25,5.150878578027670009627022877171424943348942308572094329414863758e178,4.114993138507409236463732807051383664021873403743675634060815293e2
+111.75,5.426794204060584384967434580202232814205170086910863806061132506e179,4.138540802195410610223749456611009949684786774040887464593203743e2
+112.25,5.730352418055782885710062950853210249475698318286454941474035931e180,4.162110937717872732404573913361180501249666018470485299838595147e2
+112.75,6.064442523037703050201108143375995169874277572122890303273315576e181,4.185703444530347392359281549302112880248312524643839525506032487e2
+113.25,6.432320589267616289209545662332728505036471362276545671804605333e182,4.20931822298409636914876448884027806990234175572867183215165472e2
+113.75,6.837658944725010189101749431656434554033247962568558816940663312e183,4.232955174314175269650223976382974717768783695190001608511997193e2
+114.25,7.284603067345575447529810462591815031953803817778187973318715539e184,4.256614200627727803162334661775184558489884022545492120339415004e2
+114.75,7.777837049624699090103239978509194305212819557421735654270004517e185,4.280295204892485867619475329136158046146953232788902363697494429e2
+115.25,8.322659004442319948802808453511148674007220861811579759516632504e186,4.303998090925470943965921333157555862472557237167037752598720879e2
+115.75,8.925068014444342205893467875339300465231710442141441663274830183e187,4.327722763381892412975483389993401551280749976962237190040094036e2
+116.25,9.591864502619773740995236742671598846793322043237845672842918961e188,4.351469127744238522961303942661137596507593473311006929862099243e2
+116.75,1.033076622671932610332168906570524028850570483677871872524061594e190,4.37523709031155584752793721937682511933488816229894637306958544e2
+117.25,1.115054248429548697390696271335573365939723687526399559467989329e191,4.399026558188913179892210989178884770692313779049520416233726246e2
+117.75,1.206116956969481322562807198421086803683041039693915411171841911e192,4.422837439277045914454887889835004277834886579517346983573312716e2
+118.25,1.307401106283645847690591378140959771564326023624703483476217488e193,4.446669642262177067351620594147790264132843952690352876407284388e2
+118.75,1.42020271683156425731770547614082971133678082423958539665484385e194,4.470523076606011185754740152139100756007273918717005876567527919e2
+119.25,1.54600180818041121489412430465168492987481552293621186921062718e195,4.494397652535897490838623812631736496125142380391337497228973318e2
+119.75,1.686490726237482555564775252917235282212427228784507658527627072e196,4.518293281035158691658500970693339512808649735728162414108746879e2
+120.25,1.843607156255140373761243233297134278875717511101432654033672912e197,4.542209873833581996819628766331314056560181966389699557211734899e2
+120.75,2.019572644669385360288818365368389250449381606469447921086833418e198,4.566147343398068937821323106578172147586011884698288976082661439e2
+121.25,2.216937605396806299447894988039803970348050307099472766475491677e199,4.590105602923440702435499955028118182885725419021772884929960881e2
+121.75,2.438633968438282822548748176182330019917628289811858364712351353e200,4.614084566323395758506051972270767631751771438033534334822175038e2
+122.25,2.688036846543627638080572672998262314047010997358110729351533658e201,4.638084148221616628214330122148256145057560578903840770626436103e2
+122.75,2.969036856573609336453100904501986799249712442845937559037287772e202,4.662104263943022750225006438154109555441066363367708718129585085e2
+123.25,3.286125044899584787553500092740375678922470944270290366632249897e203,4.686144829505166442280587255749525369508844352022165345420627702e2
+123.75,3.64449274144410546049618136027618879607902202359338835371827074e204,4.710205761609769049824003698975096870609591805363937996802073132e2
+124.25,4.050149117838738250659688864302513024271945438813132876874247999e205,4.734286977634394437166570679822712219558161508600045129000403183e2
+124.75,4.510059767537080507364024433341783635147789754196818087726360041e206,4.758388395624257046650190990396297022734504695915247229725665574e2
+125.25,5.032310278914632276444663413895872432657892207725317599516253138e207,4.782509934284161818242574110153110826460618118475764296883797742e2
+125.75,5.626299560002507932936620480593875084846867718360530564438634151e208,4.80665151297057332711469725934697742160307924245801998204902028e2
+126.25,6.302968624340576926246940925904580221904009990175960293394107055e209,4.830813051683811560040779427860620345803556247392896602317327932e2
+126.75,7.075071696703153725667800254346797919194936155838367184781582445e210,4.854994471060371812990540228074169990559826362177467872568849863e2
+127.25,7.957497888229978369386762918954532530153812612597149870410060158e211,4.879195692365366252107284361432848582406211084120352721953353465e2
+127.75,8.967653375571247347283936822384566362579581577525130406710655748e212,4.903416637485084738437217786845538088340896623963694404332164116e2
+128.25,1.012591606277264747504465581436964264462072654952987321009680155e214,4.927657228919672573347288357564282637529966330667464580841312303e2
+128.75,1.145617718729226848615522929059628352819541546528835409457286272e215,4.951917389775922876590847760425191779984804997021023887780301406e2
+129.25,1.298648735050592038674477108192906669172608179977206239194914799e216,4.976197043760181362500891346561673412680254837327933247496319135e2
+129.75,1.474982812863879567592485771164271504255159741155875589676256075e217,5.000496115171361331856196734478824533224833618960211991543126594e2
+130.25,1.678503490052890209986761662339331869905596072620539064159427377e218,5.024814528894066747621375646609882911405922408200304554498096295e2
+130.75,1.913790199690883738951250288085642276771069764149748577604942257e219,5.049152210391821312051139548303296173601657050928375123842229285e2
+131.25,2.186250795793889498507757065196979760552038884588252131067654159e220,5.073509085700401510613919961245897744679624464132714413631874317e2
+131.75,2.502280686095830488678759751671977276878173716625796265218462001e221,5.097885081421271634870896337643263595177330458606219641151877112e2
+132.25,2.869454169479479966791431148071035935724551036022080922026296084e222,5.12228012471511884188259648528491502045147224140492576938965452e2
+132.75,3.296754803931256668834265972827830062286993871654486579425323687e223,5.14669414329548635194433868463825490127620187534967790366000307e2
+133.25,3.794853139136612256081667693323945024995718745139202019379776571e224,5.171127065422502929510386899491955411458809845014529379147213627e2
+133.75,4.376442002218743227877488078928944407685984364621330934187117194e225,5.195578819896706834090059450684738860248275151712232332907403723e2
+134.25,5.056641807899535831228822201354156745806795227897986690823552281e226,5.220049336052962468721244765208819142029116626468919361565183111e2
+134.75,5.853491177967569067286140305567463145280004087681030124475269247e227,5.244538543754467993380766389758069975297652625329026480579717769e2
+135.25,6.788541627105126853424693805317955431245622593453047132430618937e228,5.269046373386852209408630619449094889470110863541753226525381234e2
+135.75,7.887579362311299318168074061752156588264805508150188092730425311e229,5.293572755852359058735148237977421331527101385772832771018677649e2
+136.25,9.181502550659684069256898371692534720759704557645246246612412112e230,5.318117622564118118435987833145777859476667733131737632536205625e2
+136.75,1.070738898433758882441316053882855256856947347731388033588155236e232,5.342680905440499506929146918303813146484469613078879948589438273e2
+137.25,1.25097972252738195443625240314310785570350974597916480110094115e233,5.367262536899551652997423948570968221021017232822250016203667239e2
+137.75,1.464235443608165271738499703684804563751875498022673135931802285e234,5.3918624498535204127971296020906262226508585525371657578535983e2
+138.25,1.716969669168831732463756423313915531953067126356403689511041729e235,5.416480577703448053124498101914511351215613858722312510785321362e2
+138.75,2.016984323570247661819783341825818286568208498526232244746057648e236,5.441116854333850651480707954303960342716667471602179381745781006e2
+139.25,2.37371056762590987013114325523148822292511530218772810074901519e237,5.465771214107472494928936442334593726372210115575152113841623374e2
+139.75,2.798565748953718630774949386783322872613389291705147239585154986e238,5.490443591860116090396004314286598416435889163907563310036289955e2
+140.25,3.305391965419079494157616982909847350423223058296411380293003652e239,5.515133922895546428959706069273878012653207580185964897323366696e2
+140.75,3.910995634162821786507991768029693714477211535157943267320254093e240,5.539842142980468175802922971406546541478023202516775830269983662e2
+141.25,4.635812231500258990556057818531060908968570339260716960860937622e241,5.564568188339574485928428661172322296692271581742218906383458093e2
+141.75,5.504726355084171664509998413501793903126675235734805148753257637e242,5.589311995650666173434586698863560419941832949402026677878883953e2
+142.25,6.548084776994115824160431668675123533918105604205762707216074391e243,5.614073502039839989171912927011580858446310896484728916467574453e2
+142.75,7.8029496083318133344429227511387928576820621466540862983577427e244,5.638852645076744787953105393345729714062593416323550162750452028e2
+143.25,9.314650595274129759868214048690363226998505221982697451014865822e245,5.663649362769904392193390132676258711865735208549523984664674038e2
+143.75,1.11387105658936635349172722272506268043411437143487081909056777e247,5.688463593562105983932060412875962474342862995576788416064651625e2
+144.25,1.334323697773019088101121662474894532267535873049021409857879529e248,5.7132952763258528816474974421383441090167845262052218444144145e2
+144.75,1.60118964384721413314435788266727760312403940893762680244269117e249,5.738144350358880582143798485429424656956288823123358022840477337e2
+145.25,1.924761934037580034585867998120035362795920496873213383719991221e250,5.763010755379734971073918552781887461725295431815574811787104445e2
+145.75,2.317722009468842457726458035160884330522047044437214796535795469e251,5.787894431523411628387955605903316970283154400940170268017104885e2
+146.25,2.795716709189585000235973267269351364461074521708342439853287248e252,5.812795319337055177171382160020069432190449406990820682291164181e2
+146.75,3.378079828800837882136312586246988911735883567267240565950921895e253,5.837713359775717645981675090644095309623461244321451510717358257e2
+147.25,4.0887356871897680628451109033814263705243214879984508182854326e254,5.862648494198174835917484890077271477365197908450357814626761402e2
+147.75,4.957332148765229592035038720317456227972409134964675530532977881e255,5.88760066436279970427633345319062850503961718441731886942162737e2
+148.25,6.020663299386933472539425805229150330597063391077718829925299503e256,5.912569812423491796788522165212410053480561087680949917447294585e2
+148.75,7.32445824980062672223176970926904157682923449691030809636247482e257,5.937555880925661780069739236422318540474668527931921655914546757e2
+149.25,8.925633341341128873039698756252215365110146477272718165364256514e258,5.962558812802270145125643720219748008511689397649050561280888141e2
+149.75,1.089513164657843224931975744253769934553348631415408329333918129e260,5.987578551369919171480951060938579948160667416209077787808825914e2
diff --git a/commons-numbers-gamma/src/test/resources/org/apache/commons/numbers/gamma/gamma_factorials_data.csv b/commons-numbers-gamma/src/test/resources/org/apache/commons/numbers/gamma/gamma_factorials_data.csv
new file mode 100644
index 0000000..18a2131
--- /dev/null
+++ b/commons-numbers-gamma/src/test/resources/org/apache/commons/numbers/gamma/gamma_factorials_data.csv
@@ -0,0 +1,220 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# (C) Copyright John Maddock 2006.
+# Use, modification and distribution are subject to the
+# Boost Software License, Version 1.0. (See accompanying file
+# LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+# Extracted from: boost/libs/math/test/test_gamma_data.ipp
+# x, tgamma(x), lgamma(x)
+1.0,1.0,0.0
+2.0,1.0,0.0
+3.0,2.0,0.6931471805599453094172321214581765680755
+4.0,6.0,1.791759469228055000812477358380702272723
+5.0,24.0,3.178053830347945619646941601297055408874
+6.0,120.0,4.7874917427820459942477009345232430484
+7.0,720.0,6.579251212010100995060178292903945321123
+8.0,5040.0,8.52516136106541430016553103634712505076
+9.0,40320.0,10.60460290274525022841722740072165475499
+10.0,362880.0,12.80182748008146961120771787456670616428
+11.0,3628800.0,15.10441257307551529522570932925107037188
+12.0,39916800.0,17.5023078458738858392876529072161996717
+13.0,479001600.0,19.9872144956618861495173623870550785125
+14.0,6227020800.0,22.55216385312342288557084982862039711731
+15.0,87178291200.0,25.19122118273868150009343469352175341502
+16.0,1307674368000.0,27.89927138384089156608943926367046675919
+17.0,20922789888000.0,30.6718601060806728037583677495031730315
+18.0,355687428096000.0,33.50507345013688888400790236737629956708
+19.0,6402373705728000.0,36.39544520803305357621562496267952754445
+20.0,121645100408832000.0,39.33988418719949403622465239456738108169
+21.0,0.243290200817664e19,42.33561646075348502965987597070992185737
+22.0,0.5109094217170944e20,45.38013889847690802616047395107562729165
+23.0,0.112400072777760768e22,48.47118135183522387963964965049893315955
+24.0,0.2585201673888497664e23,51.60667556776437357044640248230912927799
+25.0,0.62044840173323943936e24,54.78472939811231919009334408360618468687
+26.0,0.15511210043330985984e26,58.00360522298051993929486275005855996592
+27.0,0.403291461126605635584e27,61.2617017610020019847655823130820551388
+28.0,0.10888869450418352160768e29,64.55753862700633105895131802384963225274
+29.0,0.304888344611713860501504e30,67.88974313718153498289113501020916511853
+30.0,0.8841761993739701954543616e31,71.25703896716800901007440704257107672402
+31.0,0.26525285981219105863630848e33,74.65823634883016438548764373417796663627
+32.0,0.822283865417792281772556288e34,78.09222355331531063141680805872032384672
+33.0,0.26313083693369353016721801216e36,81.5579594561150371785029686660112066871
+34.0,0.868331761881188649551819440128e37,85.05446701758151741396015748089886169157
+35.0,0.29523279903960414084761860964352e39,88.58082754219767880362692422023016479523
+36.0,0.103331479663861449296666513375232e41,92.13617560368709248333303629689953216439
+37.0,0.3719933267899012174679994481508352e42,95.71969454214320248495799101366093670984
+38.0,0.137637530912263450463159795815809024e44,99.33061245478742692932608668469238387374
+39.0,0.5230226174666011117600072241000742912e45,102.9681986145138126987523462380384139791
+40.0,0.203978820811974433586402817399028973568e47,106.6317602606434591262010789165262582885
+41.0,0.815915283247897734345611269596115894272e48,110.3206397147573954290535346141269756323
+42.0,0.3345252661316380710817006205344075166515e50,114.0342117814617032329202979871643832206
+43.0,0.1405006117752879898543142606244511569936e52,117.771881399745071538838128088988265223
+44.0,0.6041526306337383563735513206851399750726e53,121.5330815154386339623109706023341122586
+45.0,0.265827157478844876804362581101461589032e55,125.3172711493568951252073784232155946945
+46.0,0.1196222208654801945619631614956577150644e57,129.1239336391272148825986282302868337433
+47.0,0.5502622159812088949850305428800254892962e58,132.9525750356163098828226131835552064299
+48.0,0.2586232415111681806429643551536119799692e60,136.8027226373263684696435638533273801388
+49.0,0.1241391559253607267086228904737337503852e62,140.6739236482342593987077375760826121157
+50.0,0.6082818640342675608722521633212953768876e63,144.565743946344886008918443062968971575
+51.0,0.3041409320171337804361260816606476884438e65,148.4777669517730320675371938508795234221
+52.0,0.1551118753287382280224243016469303211063e67,152.4095925844973578391819737056751756623
+53.0,0.8065817517094387857166063685640376697529e68,156.3608363030787851940699253901568474033
+54.0,0.427488328406002556429801375338939964969e70,160.3311282166309070282143945291859051737
+55.0,0.2308436973392413804720927426830275810833e72,164.3201122631951814118173623614116588557
+56.0,0.1269640335365827592596510084756651695958e74,168.327445448427652330480065272602975795
+57.0,0.7109985878048634518540456474637249497365e75,172.3527971391628015638371143804206852289
+58.0,0.4052691950487721675568060190543232213498e77,176.3958484069973517152413870492310644708
+59.0,0.2350561331282878571829474910515074683829e79,180.4562914175437710518418912030511526443
+60.0,0.1386831185456898357379390197203894063459e81,184.5338288614494905024579415767708502684
+61.0,0.8320987112741390144276341183223364380754e82,188.6281734236715911872884103898359167487
+62.0,0.507580213877224798800856812176625227226e84,192.7390472878449024360397994932615314951
+63.0,0.3146997326038793752565312235495076408801e86,196.8661816728899939913861959392620652736
+64.0,0.1982608315404440064116146708361898137545e88,201.0093163992815266792820391565502964125
+65.0,0.1268869321858841641034333893351614808029e90,205.168199482641198535785431885299355821
+66.0,0.8247650592082470666723170306785496252186e91,209.3425867525368356464396786600908620653
+67.0,0.5443449390774430640037292402478427526443e93,213.5322414945632611913140995964366936378
+68.0,0.3647111091818868528824985909660546442717e95,217.7369341139542272509841715928004163884
+69.0,0.2480035542436830599600990418569171581047e97,221.9564418191303339500681704535898960601
+70.0,0.1711224524281413113724683388812728390923e99,226.1905483237275933322701685223226178832
+71.0,0.1197857166996989179607278372168909873646e101,230.4390435657769523213935127204501618205
+72.0,0.8504785885678623175211676442399260102886e102,234.7017234428182677427229672529631959172
+73.0,0.6123445837688608686152407038527467274078e104,238.9783895618343230537651540911827770308
+74.0,0.4470115461512684340891257138125051110077e106,243.2688490029827141828572629486213196017
+75.0,0.3307885441519386412259530282212537821457e108,247.5729140961868839366425907411109433336
+76.0,0.2480914081139539809194647711659403366093e110,251.8904022097231943772393546444858443173
+77.0,0.188549470166605025498793226086114655823e112,256.2211355500095254560828463192900509907
+78.0,0.1451830920282858696340707840863082849837e114,260.5649409718632093052501426406983600202
+79.0,0.1132428117820629783145752115873204622873e116,264.9216497985528010421161074406443808977
+80.0,0.8946182130782975286851441715398316520698e117,269.2910976510198225362890529821257918199
+81.0,0.7156945704626380229481153372318653216558e119,273.6731242856937041485587408011846857317
+82.0,0.5797126020747367985879734231578109105412e121,278.0675734403661429141397217488747885503
+83.0,0.4753643337012841748421382069894049466438e123,282.4742926876303960274237172433703727067
+84.0,0.3945523969720658651189747118012061057144e125,286.8931332954269939508991894666617431598
+85.0,0.3314240134565353266999387579130131288001e127,291.3239500942703075662342516899438017302
+86.0,0.2817104114380550276949479442260611594801e129,295.7666013507606240210845456410431159053
+87.0,0.2422709538367273238176552320344125971528e131,300.220948647014131753974620275847139509
+88.0,0.210775729837952771721360051869938959523e133,304.6868567656687154725531375451315768191
+89.0,0.1854826422573984391147968456455462843802e135,309.1641935801469219448667774874712358232
+90.0,0.1650795516090846108121691926245361930984e137,313.6528299498790617831845930281410850426
+91.0,0.1485715964481761497309522733620825737886e139,318.1526396202093268499930749566705006595
+92.0,0.1352001527678402962551665687594951421476e141,322.6634991267261768911519151416789989939
+93.0,0.1243841405464130725547532432587355307758e143,327.1852877037752172007931322164055482485
+94.0,0.1156772507081641574759205162306240436215e145,331.7178871969284731381175417778704311636
+95.0,0.1087366156656743080273652852567866010042e147,336.2611819791984770343557245691007814406
+96.0,0.103299784882390592625997020993947270954e149,340.8150588707990178689655113342148226173
+97.0,0.9916779348709496892095714015418938011582e150,345.3794070622668541074469171784282311623
+98.0,0.9619275968248211985332842594956369871234e152,349.9541180407702369295636388001321928762
+99.0,0.942689044888324774562618574305724247381e154,354.5390855194408088491915764084767289035
+1.5,0.8862269254527580136490837416705725913988,-0.1207822376352452223455184457816472122519
+2.5,1.329340388179137020473625612505858887098,0.2846828704729191596324946696827019243201
+3.5,3.323350970447842551184064031264647217745,1.20097360234707422481602188145071299577
+4.5,11.63172839656744892914422410942626526211,2.453736570842442220504142503435716157332
+5.5,52.34277778455352018114900849241819367949,3.957813967618716293877400855822590998551
+6.5,287.8852778150443609963195467083000652372,5.662562059857141528522112312329543730298
+7.5,1871.254305797788346476077053603950424042,7.534364236758732955158367632436685767027
+8.5,14034.40729348341259857057790202962818031,9.549267257300997711737140081127222543125
+9.5,119292.4619946090070878499121672518395327,11.68933342079726848256944257754217251064
+10.5,1133278.38894878556733457416558889247556,13.9406252194037636331612378879718494798
+11.5,11899423.08396224845701302873868337099338,16.29200047656724132024460374687937834601
+12.5,136843365.4655658572556498304948587664239,18.73434751193644570163412445723139789638
+13.5,1710542068.319573215695622881185734580299,21.26007615624470114141841100222559660735
+14.5,23092317922.31423841189090889600741683403,23.86276584168908490618691459153499715322
+15.5,334838609873.5564569724181789921075440935,26.53691449111561362395295450243873219064
+16.5,5189998453040.125083072481774377666933449,29.27775451504081456046488670552291283301
+17.5,85634974475162.06387069594927723150440191,32.08111489594734948650484339895239126941
+18.5,1498612053315336.117737179112351551327033,34.94331577687681785679372335416358207049
+19.5,27724322986333718.17813781357850369955012,37.86108650896109699174458690373685266632
+20.5,540624298233507504.4736873647808221412273,40.83150097453079810977608746076652040769
+21.5,11082798113786903841.71059097800685389516,43.851925860675160604225618712345751428
+22.5,238280159446418432596.7777060271473587459,46.91997879580877771828122910423342189548
+23.5,5361303587544414733427.498385610815571784,50.03349410501915216625524678984648437622
+24.5,125990634307293746235546.2120618541659369,53.19049452616926544365896533816048151704
+25.5,3086770540528696782770882.195515427065454,56.38916764371994674445243870358866440824
+26.5,78712648783481767960657495.98564339016909,59.6278460958843272066799864369261400804
+27.5,2085885192762266850957423643.619549839481,62.90499082887650373140722345449702128269
+28.5,57361842800962338401329150199.53762058572,66.21917683354902934065269424423016165396
+29.5,1634812519827426644437880780686.822186693,69.56908092082363418263973479158236432777
+30.5,48226969334909086010917483030261.25450745,72.95347118416940832383855304384388538376
+31.5,1470922564714727123332983232422968.262477,76.371197867782774263172710025811323562
+32.5,46334060788513904384988971821323500.26803,79.82118541361436164165132112164137813285
+33.5,1505856975626701892512141584193013758.711,83.30242550295005344288833577497470780911
+34.5,50446208683494513399156743070465960916.82,86.8139709417810741931411756498802539916
+35.5,1740394199580560712270907635931075651630.0,90.35493026581838826592594159715479924661
+36.5,61783994085109905285617221075553185632870.0,93.9244629622997583778381640082096567753
+37.5,0.22551157841065115429250285692576912756e43,97.52177522288820419751304074419002277813
+38.5,0.8456684190399418285968857134716342283499e44,101.1461161558645693286925725261067471938
+39.5,0.3255823413303776040098009996865791779147e46,104.7967743971583078684426367260568796551
+40.5,0.1286050248254991535838713948761987752763e48,108.4730750690653840531983501460801140092
+41.5,0.5208503505432715720146791492486050398691e49,112.1743770431778775093620989723120402597
+42.5,0.2161528954754577023860918469381710915457e51,115.9000704704145301234203390741452341447
+43.5,0.9186498057706952351408903494872271390691e52,119.6495745463449012688534009037863717517
+44.5,0.3996126655102524272862873020269438054951e54,123.4223354844395396780146860516126324938
+45.5,0.1778276361520623301423978494019899934453e56,127.2178246736117342069152694708243051451
+46.5,0.8091157444918836021479102147790544701761e57,131.0355369995686389386568775343746269115
+47.5,0.3762388211887258749987782498722603286319e59,134.8749893121619495665640549743813332585
+48.5,0.1787134400646447906244196686893236561001e61,138.7357190232025450917566096180371978672
+49.5,0.8667601843135272345284353931432197320857e62,142.6172828211459826044560991182829830129
+50.5,0.4290462912351959810915755196058937673824e64,146.519255490720627221891301048634987154
+51.5,0.2166683770737739704512456374009763525281e66,150.4412288270019413633582671940897997428
+52.5,0.111584214192993594782391503261502821552e68,154.3828106346716318247096373876850639954
+53.5,0.5858171245132163726075553921228898131479e69,158.3436238042692098863937625798187805011
+54.5,0.3134121616145707593450421347857460500341e71,162.3233054581711707502809292753838809346
+55.5,0.1708096280799410638430479634582315972686e73,166.3215061598403691412410136061349060176
+56.5,0.9479934358436729043289161971931853648408e74,170.337889180592757967587122392630702318
+57.5,0.535616291251675190945837651414149731135e76,174.372129818745153226752021764788547422
+58.5,0.3079793674697132347938566495631360954026e78,178.4239147665484579827423018083667546119
+59.5,0.1801679299697822423544061399944346158105e80,182.4929415207862687921690476023189480579
+60.5,0.1071999183320204342008716532966885964073e82,186.5789178333378528681067028421770777551
+61.5,0.648559505908723626915273502444966008264e83,190.6815611983746486468133578766491597866
+62.5,0.3988640961338650305528932040036540950824e85,194.8005983731871208326581343651509165116
+63.5,0.2492900600836656440955582525022838094265e87,198.9357649299294766470431802433713028621
+64.5,0.1582991881531276840006794903389502189858e89,203.0868048358281226106733889296294186889
+65.5,0.1021029763587673561804382712686228912459e91,207.253470059629849416124244558439614861
+66.5,0.6687744951499261829818706768094799376603e92,211.435520202271055650856436448150964186
+67.5,0.4447350392747009116829440000783041585441e94,215.6327221499328641065535845020238208848
+68.5,0.3001961515104231153859872000528553070173e96,219.8448497478113482459228474245594090702
+69.5,0.2056343637846398340394012320362058853068e98,224.0716834930795278518208054310810978927
+70.5,0.1429158828303246846573838562651630902882e100,228.3130102456502742995923582284984651071
+71.5,0.1007556973953789026834556186669399786532e102,232.5686229554684972683913220137349879525
+72.5,0.7204032363769591541867076734686208473705e103,236.8383204051684592390895209118072592891
+73.5,0.5222923463732953867853630632647501143436e105,241.121906967029088331456320155937181966
+74.5,0.3838848745843721092872418514995913340426e107,245.4191923732478793236450387582878905619
+75.5,0.2859942315653572214189951793671955438617e109,249.7299914986333931552202349119338344817
+76.5,0.2159256448318447021713413604222326356156e111,254.0541241548883721745992390899601342039
+77.5,0.1651831182963611971610761407230079662459e113,258.3914148957208623282220320602201355807
+78.5,0.1280169166796799277998340090603311738406e115,262.7416928320801636393347235965305038626
+79.5,0.1004932795935487433228696971123599714649e117,267.1047914568685263873419367114758025432
+80.5,0.7989215727687125094168140920432617731457e118,271.4805484785288126034644189659692094502
+81.5,0.6431318660788135700805353440948257273823e120,275.8688056629533302899592924197644087302
+82.5,0.5241524708542330596156363054372829678165e122,280.2694086832001473146069926644269820387
+83.5,0.4324257884547422741828999519857584484486e124,284.6822069765407826152477086910826481146
+84.5,0.3610755333597097989427214599081083044546e126,289.1070536083975924130902273463692509124
+85.5,0.3051088256889547801065996336223515172642e128,293.5438051427607205757799701080417115539
+86.5,0.2608680459640563369911426867471105472609e130,297.9923215187034351091622558923164399324
+87.5,0.2256508597589087314973384240362506233806e132,302.4524659326412687466785241592992548335
+88.5,0.1974445022890451400601711210317192954581e134,306.9241047260048374915681634477366332741
+89.5,0.1747383845258049489532514421130715764804e136,311.4071072780187213241622269369206800347
+90.5,0.1563908541505954293131600406911990609499e138,315.9013459032995310109227992454839056422
+91.5,0.1415337230062888635284098368255351501597e140,320.4066957540054114483446541626587380014
+92.5,0.1295033565507543101284950006953646623961e142,324.9230347262868870790740563815487018843
+93.5,0.1197906048094477368688578756432123127164e144,329.4502433708052665886256792643481601196
+94.5,0.1120042154968336339723821137264035123898e146,333.988204807099907903519925338728239387
+95.5,0.1058439836445077841039010974714513192084e148,338.5368046415996049733937816714808196625
+96.5,0.101081004380504933819225548085236009844e150,343.095930889086289536826499502225010241
+97.5,0.9754316922718726113555265390225274949948e151,347.6654738974312297792641984341498924371
+98.5,0.95104589996507579607163837554696430762e153,352.245326275435031271896458324405747818
+99.5,0.9367802114655996591305637999137598430057e155,356.835382823613074469259023532110402225
diff --git a/commons-numbers-gamma/src/test/resources/org/apache/commons/numbers/gamma/gamma_m20_0_data.csv b/commons-numbers-gamma/src/test/resources/org/apache/commons/numbers/gamma/gamma_m20_0_data.csv
new file mode 100644
index 0000000..ede26b5
--- /dev/null
+++ b/commons-numbers-gamma/src/test/resources/org/apache/commons/numbers/gamma/gamma_m20_0_data.csv
@@ -0,0 +1,172 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Reference data for the gamma function in the range -20 to 20. This
+# data was generated with the following <a
+# href="http://maxima.sourceforge.net/">Maxima</a> script.
+#
+# kill(all);
+#
+# fpprec : 64;
+#
+# EPSILON : 10**(-fpprec + 1);
+# isInteger(x) := abs(x - floor(x)) <= EPSILON * abs(x);
+# str(x) := ssubst("e","b",string(x));
+#
+# x : makelist(bfloat(i / 8), i, -160, 0);
+#
+# for i : 1 while i <= length(x) do if not(isInteger(x[i])) then
+#     printf(true, "~f,~a,~a~%", x[i], str(gamma(x[i])), str(log(abs(gamma(x[i])))));
+
+-19.875,4.920331854832504888286451182476914112449773092212419146057494918e-18,-3.985315569549405763517413837741952710332577041893021043401872575e1
+-19.75,3.879938752480031133568706540455109631550650247558246848011193671e-18,-4.009071230582552260546658139794395115825395090122084381198350955e1
+-19.625,4.323498423815026735383419371897611538916557492973267102468243987e-18,-3.998246677903681065075352225690155253404831272049921220460234998e1
+-19.5,5.811045977502236486370867724532204572259486038947125091804554633e-18,-3.968677108868139793563266010941346169604695806234443596955030242e1
+-19.375,9.143309109421249933418481419232598025106975486483323677541285395e-18,-3.923350930696732669807443706625104332513924960254048297507823463e1
+-19.25,1.735229114436738314783221682273948644168790246120098178207881612e-17,-3.8592807121787976155118726802050423776449922960333556302253296e1
+-19.125,4.653521565668222230214860769454383912142189970370412005651696678e-17,-3.760632232197594971322076527151892396433444752532155489357718109e1
+-18.875,-9.779159561479603465469321725172866798493924020772183052789271149e-17,-3.686369303495366203788612036584247333254480251127700914159794198e1
+-18.75,-7.662879036148061488798195417398841522312534238927537524822107501e-17,-3.710755881447839173012810009937889337223140994551874469481269846e1
+-18.625,-8.484865656736989968189960517349062645123744079960036688593928824e-17,-3.700566251536833852158077338487260698953256949271632761103620401e1
+-18.5,-1.133153965612936114842319206283779891590599777594689392901888154e-16,-3.671635662311169681760115955238379395466969969412173465551724258e1
+-18.375,-1.771516139950367174599830774976315867364476500506143962523624045e-16,-3.626952573172791600579620977285702817939020972087213904377090869e1
+-18.25,-3.340316045290721255957701738377351140024921223781188993050172103e-16,-3.563529606105418292478589472355846788314213164553478844681669816e1
+-18.125,-8.899859994340475015285921221581509231971938318333412960808869898e-16,-3.465532594226335017843243654417527572367776380017107696517259471e1
+-17.875,1.845816367229275154107334475626378608215728158920749551213974929e-15,-3.392585473981857363734158043073252674651356652177798502867728796e1
+-17.75,1.436789819277761529149661640762282785433600169798913285904145156e-15,-3.417636506206197190836580043892034552468371694787947030749406836e1
+-17.625,1.580306228567264381575380146356262917654297334892556833250619243e-15,-3.408115775110271530884004147414301620590298512460412622560870394e1
+-17.5,2.096334836383931812458290531624992799442609588550175376868493084e-15,-3.379858589102741768265029600281052335884512224131435374599300991e1
+-17.375,3.255160907158799683327189049018980406282225569680039531137159183e-15,-3.335853468662901563244195541342267271969505010696643297747947409e1
+-17.25,6.096076782655566292122805672538665830545481233400669912316564088e-15,-3.273113098102568241452825010903627844838837906938370129046235932e1
+-17.125,1.613099623974211096520573221411648548294913820197931099146607669e-14,-3.17580337415226117049001015429617061828841499350605809267003165e1
+-16.875,-3.299396756422329337966860375182151762185614084070839822794980186e-14,-3.104245165123850228547784577557660854611309212616112649940171477e1
+-16.75,-2.550301929218026714240649412353051944144640301393071082479857653e-14,-3.129997954614054710587081014932366456407514068988941470761400258e1
+-16.625,-2.785289727849803472526607507952913392365699052748131418604216417e-14,-3.121183940240438295887554193182284649658594446784191850303554129e1
+-16.5,-3.668585963671880671802008430343737399024566779962806909519862897e-14,-3.093638501009794931236141604759933255775793629182423008974165188e1
+-16.375,-5.655842076188414449780990972670478455915366927319068685350814081e-14,-3.050350229517815980350486685892165864147895384969204482416743561e1
+-16.25,-1.051573245008085185391183978512919855769095512761615559874607305e-13,-2.988331883754831365116071628321990976144950846544102660497038963e1
+-16.125,-2.762433106055836502791481641667448138955039917088957007288565633e-13,-2.891749435737432271783660777935637049654751516409678137401208248e1
+-15.875,5.567732026462680757819076883119881098688223766869542200966529064e-13,-2.821661841447990876494304709595737349687151950150512618464702391e1
+-15.75,4.271755731440194746353087765691362006442272504833394063153761568e-13,-2.848158128786947166503520239587629494965920805538802987871757846e1
+-15.625,4.630544172550298273075484981971718514807974675193768483429509793e-13,-2.840093181586246512201285812086634293393798088004169425840023093e1
+-15.5,6.05316684005860310847331391006716670839053518693863140070777378e-13,-2.813302462919141438632145935416985412136423901442431871690906984e1
+-15.375,9.261441399758528661516372717747908471561413343484974972261958058e-13,-2.770774651365684418760713921212666245259754424813222961457248019e1
+-15.25,1.708806523138138426260673965083494765624780208237625284796236871e-12,-2.709522592877256715934093375134475665326963943513281227488005625e1
+-15.125,4.454423383515036360751264147188760124065001866305943174252812083e-12,-2.613712349469248653122021639346252746056738882447324226944774291e1
+-14.875,-8.83877459200950570303778455195281124416755522990539824403436489e-12,-2.545187286970115342014730265261561080622411078065980618410179873e1
+-14.75,-6.72801527701830672550611323096389516014657919511259564946717447e-12,-2.572474092259782959597382342150441694687814247888118029503015966e1
+-14.625,-7.235225269609841051680445284330810179387460429990263255358609051e-12,-2.565205962023999992646227648556230971958767722031690685502432729e1
+-14.5,-9.382408602090834818133636560604108398005329539754878671097049359e-12,-2.539218460526621344980952715108567347898980021830398199927303178e1
+-14.375,-1.423946615212873781708142305353740927502567301560814901985276051e-11,-2.497500369996426262059682696654125886380014362399094429158056297e1
+-14.25,-2.605929947785661100047527796752329517577789817562378559314261228e-11,-2.437064642571914652942400889083549504310495796077206172018403262e1
+-14.125,-6.737315367566492495636287022622999687648315322787739051057378276e-11,-2.342077449077558137134802560190679856515047551967917368137264752e1
+-13.875,1.314767720561413973326870452102980672569923840448427988800111777e-10,-2.275219091826945996304411165567383424522532344157296597070721087e1
+-13.75,9.923822533602002420121517015671745361216204312791078582964082343e-11,-2.303349783981200076419223729070107245896579595827123627375948299e1
+-13.625,1.058151695680439253808265122833380988735416087886076001096196574e-10,-2.296932722712207973586999493452646940971392856299196659749793314e1
+-13.5,1.360449247303171048629377301287595717710772783264457407309072157e-10,-2.271803595583968473204348724018193844157078743874149317447204144e1
+-13.375,2.046923259368506061205454563946002583284940495993671421603834324e-10,-2.230951311328084848344101116587940481005866235796275659003131973e1
+-13.25,3.71345017559456706756772711037206956254835049002638944702282225e-10,-2.171388951900448699685420046494146893737108841037069395815273807e1
+-13.125,9.516457956687670650086255419454987058803245393437681409618546815e-10,-2.077282821374307673101759047266530659734764553405694564899433952e1
+-12.875,-1.824240212278961887991032752292885683190769328622193834460155091e-9,-2.012210225863696175553246711209439108090425569966334611768964388e1
+-12.75,-1.364525598370275332766708589654864987167228093008773305157561322e-9,-2.04124590156994204643639986224261086557694880187858118848696274e1
+-12.625,-1.441731685364598483313761229860481597152004419744778551493567832e-9,-2.035742088657277196374437484669179746288008008256950120678509961e1
+-12.5,-1.836606483859280915649659356738254218909543257407017499867247412e-9,-2.011534627039530096727498365087253789570381589963350007338863845e1
+-12.375,-2.737759859405376856862295479277778455143607913391535526395128408e-9,-1.971612582049877823838830871323065751272201648491211479883324304e1
+-12.25,-4.920321482662801364527238421242992170376564399284966017305239482e-9,-1.912989196657225578154419556882876430316211092617998686334596862e1
+-12.125,-1.249035106815256772823821023803467051467925957888695685012434269e-8,-1.819830940526538928816792952344794322776396929546458304924964717e1
+-11.875,2.34870927330916343078845466857709031710811551060107456186744968e-8,-1.756681481208716191301556116141547996450249499437330871744045295e1
+-11.75,1.739770137922101049277553451809952858638215818586185964075890686e-8,-1.786692774409498531155368301054680955168479471709782815407905535e1
+-11.625,1.820186252772805585183623552698858016404405579927782921260629387e-8,-1.782174191141134844111187294415333801021569789845266221921587428e1
+-11.5,2.295758104824101144562074195922817773636929071758771874834059265e-8,-1.758961762608704552749069710587833918472811332545671988368402267e1
+-11.375,3.387977826014153860367090655606250838240214792822025213913971405e-8,-1.720044751204402423978757102579500650783182891840996448250732669e1
+-11.25,6.027393816261931671545867066022665408711291389124083371198918365e-8,-1.662436602958151979016795432485875798003894173573677499466854834e1
+-11.125,1.514455067013498837048882991361703799904860223940043518077576552e-7,-1.570303996844184239430290426611851121818155479588656745563545283e1
+-10.875,-2.789092262054631574061289918935294751565887168838776042217596495e-7,-1.509237946216645700665747076067596849196601478188642793935188485e1
+-10.75,-2.044229912058468732901125305876694608899903586838768507789171556e-7,-1.540307450350481734356719658369098897893974448379811462911990702e1
+-10.625,-2.115966518848386492775962380012422444070121486666047645965481663e-7,-1.53685839599379284320391597470629847993447688132300865580865019e1
+-10.5,-2.640121820547716316246385325311240439682468432522587656059168155e-7,-1.514727059071784114610117639552631963436123314497653939580606731e1
+-10.375,-3.853824777091100016167565620752110328498244326835053680827142473e-7,-1.476902954720701012688042720516103787761597664714866193999093106e1
+-10.25,-6.78081804329467313048910044927549858480020281276459379259878316e-7,-1.42039979009310906516111687607038720673693595345432688775278718e1
+-10.125,-1.684831262052517456216882327889895477394156999133298413861303914e-6,-1.329384514038953848423678508982319170300339481183437385389079528e1
+-9.875,3.033137834984411836791652786842133042327902296112168945911636188e-6,-1.27059128851917092163306498557660608860505117132217001710575602e1
+-9.75,2.197547155462853887868709703817446704567396355851676145873359422e-6,-1.302816874893114553892881831326149507953160856763706972216958178e1
+-9.625,2.248214426276410648574460028763198846824504079582675623838324267e-6,-1.30053742451274479054405621603382003284574648494565898112386563e1
+-9.5,2.772127911575102132058704591576802461666591854148717038862126563e-6,-1.279589533355436345901781053661879076815215799193218400973266283e1
+-9.375,3.998343206232016266773849331530314465816928489091368193858160316e-6,-1.242963048109024813165665134624419712881316399356619133216502763e1
+-9.25,6.95033849437703995875132796050738604942020788308370863741375274e-6,-1.187672019534667346657886963058281761514394933386447775214996891e1
+-9.125,1.705891652828173924419593356988519170861583961622464644034570213e-5,-1.097883752739693564690750050650761858863993298362414180931405798e1
+-8.875,-2.995223612047106688831757127006606379298803517410766834087740736e-5,-1.041590657440452365040940067865917966810347089187985630800742911e1
+-8.75,-2.142608476576282540671991961222010536953211446955384242226525437e-5,-1.075090146392138973031454987769000390622985033377462366225720195e1
+-8.625,-2.163906385291045249252917777684578890068585176598325287944387107e-5,-1.074101036495359998452496220330442100322517366901807720992273847e1
+-8.5,-2.633521515996347025455769361997962338583262261441281186919020234e-5,-1.05446035349478683084260152261891137989902788649933104453153826e1
+-8.375,-3.748446755842515250100483748309669811703370458523157681742025296e-5,-1.019158390923377361931158380724382584934097113028717219896707754e1
+-8.25,-6.429063107298761961844978363469332095713692291852430489607721284e-5,-9.652096643822339641045238202467723587394872015417352096746416244e0
+-8.125,-1.556626133205708706032878938252023743411195364980498987681545319e-4,-8.767819627928380446067088013443605721961680541833309907080399147e0
+-7.875,2.658260955691807186338184450218363161627688121702055565252869903e-4,-8.232668239043044157331642510520675275570394768250055962248043334e0
+-7.75,1.874782417004247223087992966069259219834060016085961211948209757e-4,-8.581847763551866669442902043936989673218164518644755260126523931e0
+-7.625,1.86636925731352652748064158325294929268415471481605556085203388e-4,-8.586345402036176530574660498946228884361803199435657778551448784e0
+-7.5,2.238493288596894971637403957698267987795772922225089008881167199e-4,-8.404537371451597537593712729774163831477575986767820912138824876e0
+-7.375,3.139324158018106521959155139209348467301572759013144558458946186e-4,-8.066332831522643487893208175254632803000538630146042624191333434e0
+-7.25,5.303977063521478618522107149862198978963796140778255153926370059e-4,-7.54188344347575002442251363049642171907667487237769597803451422e0
+-7.125,1.264758733229638323651714137329769291521596234046655427491255572e-3,-6.672873899712579263664537603026629181857311645885350831110745773e0
+-6.875,-2.093380502607298159241320254546960989781804395840368757636635048e-3,-6.168975054331347397687495657606973840864829326103461632681304545e0
+-6.75,-1.452956373178291597893194548703675895371396512466619939259862562e-3,-6.534154920186611042348201962310985598919225856884673796611165877e0
+-6.625,-1.423106558701563977203989207230373835671667970047242365149675833e-3,-6.554913079542701210074967759895143842272621859435162477976105166e0
+-6.5,-1.678869966447671228728052968273700990846829691668816756660875399e-3,-6.38963435090933278101494028108362705537998420903680899261216266e0
+-6.375,-2.315251566538353559944876915166894494634909909772194111863472812e-3,-6.068236929296759965528854165909464883163692243896353857041336766e0
+-6.25,-3.845383371053071998428527683650094259748752202064234986596618293e-3,-5.560881974609166616073705841050863249733162227175462407354203887e0
+-6.125,-9.011405974261173056018463228474606202091373167582419920875195948e-3,-4.709264173557865040511961298590779644198942229844238323200131231e0
+-5.875,1.439199095542517484478407675001035680474990522140253520875186596e-2,-4.241083410778712407276489110790186605744021520978292497912128973e0
+-5.75,9.807455518953468285779063203749812293756926459149684590004072293e-3,-4.624612415302172586996930494459761621127754452136935949648442895e0
+-5.625,9.428080951397861348976428497901226661324800301562980669116602395e-3,-4.664062707670415304182194985240615776139144509604710637290015725e0
+-5.5,1.09126547819098629867323442937790564405043929958473089182956901e-2,-4.517832174007741354378684960976485018650216398636857130313797159e0
+-5.375,1.475972873668200394464859033418895240329755067479773746312963918e-2,-4.215852838252270122135770675488342347154499076568625380371444723e0
+-5.25,2.403364606908169999017829802281308912342970126290146866622886433e-2,-3.728300510860856485706651417514841106832959787358937471770268123e0
+-5.125,5.519486159234968496811308727440696298780966065144232201536057519e-2,-2.89688541712707435855295217607894988915127317376128170864339096e0
+-4.875,-8.455294686312290221310645090631084622790569317573989435141721251e-2,-2.470377350748489748707234805392542601074471422038834227073660654e0
+-4.75,-5.639286923398244264322961342156142068910232714011068639252341568e-2,-2.875412560492913515024641905565918638836374406017010715891167537e0
+-4.625,-5.303295535161297008799241030069439996995200169629176626378088847e-2,-2.936841759579931475042641542543906431545062442771459774270019195e0
+-4.5,-6.001960130050424642702789361578481042277416147716019905062629553e-2,-2.813084081769316119733973504469532286904009679059695209215909459e0
+-4.375,-7.933354195966577120248617304626561916772433487703783886432181057e-2,-2.534094264238543626914624526517025015821863294767835727541799486e0
+-4.25,-1.261766418626789249484360646197687178980059316302327104977015377e-1,-2.070072434257324108040517680065488808699384768674837339817543659e0
+-4.125,-2.828736656607921354615795722813356853125245108386419003287229478e-1,-1.262754892102602482937885167416072005001363107442745837386168078e0
+-3.875,4.12195615957724148288893948168265375361040254231731984963158911e-1,-8.862572462986792495101984912792279958482133225366434212819608384e-1
+-3.75,2.678661288614166025553406637524167482732360539155257603644862245e-1,-1.317267942446363673850078716594418237749995413438392405594567319e0
+-3.625,2.452774185012099866569648976407115998610280078453494189699866092e-1,-1.405365388615542958926242235886988971871485258684589372987146542e0
+-3.5,2.700882058522691089216255212710316469024837266472208957278183299e-1,-1.309006684993042046360715152082657445684528697774451559867200801e0
+-3.375,3.470842460735377490108770070774120838587939650870405450314079212e-1,-1.058187744428965875460208814222187350885677613998222579531801474e0
+-3.25,5.362507279163854310308532746340170510665252094284890196152315354e-1,-6.231534513209986466254473051087154092621820248096030607616659398e-1
+-3.125,1.16685387085076755877901573566050970191416360720939783885598216e0,1.543111276840418242676072830970532952413339012366550272050539361e-1
+-2.875,-1.59725801183618107461946404915202832952403098514796144173224078e0,4.682884165066310681672694688885995103752252048631827881127172056e-1
+-2.75,-1.004497983230312259582527489071562806024635202183221601366823342e0,4.487897535955773311461610637941970272096229932364259811414886774e-3
+-2.625,-8.891306420668862016314977539475795494962265284393916437662014583e-1,-1.175111003089048599946665678996070706034727478426110564275162187e-1
+-2.5,-9.453087204829418812256893244486107641586930432652731350473641546e-1,-5.624371649767405067259453009765428412294410255284562552849066089e-2
+-2.375,-1.171409330498189902911709898886265783023429632168761839481001734e0,1.58207579895527270473830532170860058830293656389260013310241499e-1
+-2.25,-1.74281486572825265085027314256055541596620693064258931374950249e0,5.555015450206474705935758935402500593920856512300935474160195519e-1
+-2.125,-3.646418346408648621184424173939092818481761272529368246424944249e0,1.293745410872406645217429585174898870066036206692924708668309691e0
+-1.875,4.592116784029020589530959141312081447381589082300389144980192242e0,1.524341090755944830722325936324265924591105116622852767749312555e0
+-1.75,2.76236945388335871385195059494679771656774680600385940375876419e0,1.016088809214435698538940945686718133942802815149270926788622577e0
+-1.625,2.333967935425576279282681604112396317427594637153403064886278828e0,8.475697957346822082542350480915686594546021364812338214045282364e-1
+-1.5,2.363271801207354703064223311121526910396732608163182837618410387e0,8.600470153764810145109326816703567873271571173554168422634772211e-1
+-1.375,2.782097159933201019415311009854881234680645376400809368767379119e0,1.023205017382131802231161599684183891841172514607623069486161707e0
+-1.25,3.921333447888568464413114570761249685923965593945825955936380603e0,1.3664317612369762345496021244689483325360664981550819426440482e0
+-1.125,7.74863898611837832001690136962057223927374270412490752365300653e0,2.0475172132487867972152678386734957014277388161979037336035074e0
+-0.875,-8.610218970054413605370548389960152713840479529313229646837860455e0,2.152949750178318968466634142098449564537696625633354179034614751e0
+-0.75,-4.834146544295877749240913541156896003993556910506753956577837333e0,1.575704597149858384809829446213544727428887276010621607006652708e0
+-0.625,-3.792697895066561453834357606682644015819841285374279980440203096e0,1.333077611516383016056026125282357560033369678160675175461533719e0
+-0.5,-3.54490770181103205459633496668229036559509891224477425642761558e0,1.265512123484645396488945797134705923899147540817911039877491545e0
+-0.375,-3.825383594908151401696052638550461697685887392551112882055146288e0,1.341658748500666418041408813274783487436378965464274482342689388e0
+-0.25,-4.901666809860710580516393213451562107404956992432282444920475753e0,1.589575312551185990315897214778782835910667583703089156315336073e0
+-0.125,-8.717218859383175610019014040823143769182960542140520964109632346e0,2.165300248905170251754061948144017406496219528762636874710856039e0
diff --git a/commons-numbers-gamma/src/test/resources/org/apache/commons/numbers/gamma/gamma_near_0_data.csv b/commons-numbers-gamma/src/test/resources/org/apache/commons/numbers/gamma/gamma_near_0_data.csv
new file mode 100644
index 0000000..59881c5
--- /dev/null
+++ b/commons-numbers-gamma/src/test/resources/org/apache/commons/numbers/gamma/gamma_near_0_data.csv
@@ -0,0 +1,60 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# (C) Copyright John Maddock 2006.
+# Use, modification and distribution are subject to the
+# Boost Software License, Version 1.0. (See accompanying file
+# LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+# Extracted from: boost/libs/math/test/test_gamma_data.ipp
+# x, tgamma(x), lgamma(x)
+-0.5,-3.544907701811032054596334966682290365595,1.265512123484645396488945797134705923899
+-0.375,-3.825383594908151401696052638550461697686,1.341658748500666418041408813274783487436
+-0.25,-4.901666809860710580516393213451562107405,1.589575312551185990315897214778782835911
+-0.125,-8.717218859383175610019014040823143769183,2.165300248905170251754061948144017406496
+-0.0625,-16.64283217898827474335620507779073805782,2.811979623974363538327156032173660116805
+-0.03125,-32.60904080181356641807136153370035279623,3.484589575134139437621752672995683649279
+-0.015625,-64.59289502180392340168731059118495613226,4.168104420557250637548438174776914213865
+-0.0078125,-128.5849985248040153013528424941759712791,4.856590152781421724785721449662278434972
+-0.00390625,-256.581093070660182546052773550952658656,5.54744476696747159520708182472107347055
+-0.001953125,-512.5791508839791203712761106952360633215,6.239455139837046046486535948675082223324
+-0.0009765625,-1024.578182406251657399893334832135395808,6.932036277511308217556578672109549476158
+-0.00048828125,-2048.577698818873467519520786912493783878,7.624901025883858905611203245365810170653
+-0.000244140625,-4096.57745718775464971331294488248972087,8.317907137541219635377299172741804106947
+-0.0001220703125,-8192.577336412800240508542313129020709561,9.010983820432326192510172569412912814588
+-0.6103515625e-4,-16384.5772760354695939336148831283410381,9.704095761351551114080487592308688534482
+-0.30517578125e-4,-32768.57724584934032393443149086321342054,10.39722532438932175111825798174135071555
+-0.152587890625e-4,-65536.57723075690962899636361017901925666,11.09036369676269620616269440700453555078
+-0.762939453125e-5,-131072.577223210852757386190636818435916,11.78350647337298147181546230662592344689
+-0.3814697265625e-5,-262144.5772194378639394013199042046138782,12.47665145199400263809495861913874999345
+0.3814697265625e-5,262143.4227881080344625629331726731855155,12.47664704818796544202254047206534711638
+0.762939453125e-5,131071.4227918809440471962777925401520979,11.78349766576090681276037584294890342818
+0.152587890625e-4,65535.42279942668398540027145451732421438,11.09034608153854475277051988217319318753
+0.30517578125e-4,32767.42281451784694671242432333092929765,10.39719009394100176207788843272141977354
+0.6103515625e-4,16383.4228446989052821887834066513143242,9.704025300454774477951337474167744232248
+0.0001220703125,8191.422905055952190365785412912966413445,9.010842898637679655856679364462219607288
+0.000244140625,4095.423025749771641072803050389269325868,8.317625293943180446655815151656334697388
+0.00048828125,2047.42326705635054639115944072028773408,7.62433733861781159675772941549355054159
+0.0009765625,1023.423749345567830369498718239930270889,6.930908902419461889540619064660080535727
+0.001953125,511.4247126306315744461730129635313924869,6.23720038517533141916200085812091506718
+0.00390625,255.4266340463362315585318413027952788355,5.542935221819601325193091489756182014674
+0.0078125,127.4304564114296588115383352230100404938,4.84757077588166486683395477128488386733
+0.015625,63.43802046989131098729483943802528254174,4.150063373653938787298503499050432342073
+0.03125,31.45283517707606127304431578414621921504,3.44848912779795847968326934526863660858
+0.0625,15.48128108159239815615962077944690802663,2.739631621946203418585729650082232089145
+0.125,7.53394159879761190469922984121513362461,2.019418357553796345320290521167099589948
+0.25,3.625609908221908311930685155867672002995,1.288022524698077457370610440219717295925
+0.375,2.370436184416600908646473504176652509887,0.8630739822706474624050890941340154953325
+0.5,1.772453850905516027298167483341145182798,0.5723649429247000870717136756765293558236
diff --git a/commons-numbers-gamma/src/test/resources/org/apache/commons/numbers/gamma/gamma_near_1_data.csv b/commons-numbers-gamma/src/test/resources/org/apache/commons/numbers/gamma/gamma_near_1_data.csv
new file mode 100644
index 0000000..f7efe24
--- /dev/null
+++ b/commons-numbers-gamma/src/test/resources/org/apache/commons/numbers/gamma/gamma_near_1_data.csv
@@ -0,0 +1,61 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# (C) Copyright John Maddock 2006.
+# Use, modification and distribution are subject to the
+# Boost Software License, Version 1.0. (See accompanying file
+# LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+# Extracted from: boost/libs/math/test/test_gamma_data.ipp
+# x, tgamma(x), lgamma(x)
+0.5,1.772453850905516027298167483341145182798,0.5723649429247000870717136756765293558236
+0.625,1.434518848090556775636019739456423136632,0.3608294954889401811849576858227794878574
+0.75,1.225416702465177645129098303362890526851,0.2032809514312953714814329718624296997597
+0.875,1.089652357422896951252376755102892971148,0.08585870722533432350236558376948770226972
+0.9375,1.040177011186767171459762817361921128614,0.03939090173458230065822754634095384450336
+0.96875,1.019032525056673950564730047928136024882,0.01885367233441289053559206570480080890174
+0.984375,1.009263984715686303151364227987264939567,0.009221337197578781045045446027854805411837
+0.9921875,1.004570300975031369541819081985749775618,0.004559888861804558865096599455042458443847
+0.99609375,1.002269894807266338070518646683408822875,0.002267322487909119869224853055660925945503
+0.998046875,1.001131154070271719475148653701632936175,0.001130514797538261731446855551493110644591
+0.9990234375,1.000564631256105134179583334797007222469,0.0005644719118551233842574575277837954032273
+0.99951171875,1.000282079501403060312266009234616105409,0.0002820397244605020216499093258679218227703
+0.999755859375,1.000140980758729162527664293184201592009,0.0001409708218759223705137152436852900410971
+0.9998779296875,1.000070475636328154358952919083132410835,0.7047315303717008615499045661742960649129e-4
+0.99993896484375,1.000035234133024267207862236519063784064,0.3523351231678223923789189421658142521323e-4
+0.999969482421875,1.00001761614530457531538182039987833925,0.1761599014210985977615986870219441253152e-4
+0.9999847412109375,1.000008807842360071243230645907272632701,0.8807803571255486980463673710461571970668e-5
+0.99999237060546875,1.000004403863608190592851185888812529877,0.4403853911211722516241836921789602523957e-5
+0.999996185302734375,1.000002201917411285169225005738085227502,0.2201914987068584780432891571768087250967e-5
+1.0,1.0,0.0
+1.000003814697265625,0.9999977981113740328314320876032760067576,-0.2201891050127487637714181831108975522931e-5
+1.00000762939453125,0.9999955962515330814147665236857616584616,-0.4403758163447332570221840098229107074209e-5
+1.0000152587890625,0.9999911926182050168670695717547199129391,-0.8807420580197905194061157631901679899078e-5
+1.000030517578125,0.99998238569695577840308912119540189507,-0.1761445817787918059338915122874759423839e-4
+1.00006103515625,0.9999647732360171681023427372223702590454,-0.352273844598538899122262467277208094941e-4
+1.0001220703125,0.9999295538398379138630109146622273453912,-0.7044864160936656733821449407577769386531e-4
+1.000244140625,0.9998591371459403420587898072239427065107,-0.0001408727761632663509703058417841195184664
+1.00048828125,0.9997183921173586652300583206642029951561,-0.0002816475415868068318239205463917072406589
+1.0009765625,0.999437255220281084345213592031181905165,-0.0005629031799912046317021499216851450277288
+1.001953125,0.998876391856702293840181665944397250951,-0.001124239864176365593088235002674045499535
+1.00390625,0.9977602892435009045255150050890440579513,-0.002242222659961150144765481909230529929808
+1.0078125,0.995550440714294209465143243929765941358,-0.004459488037952299086670078922352109198758
+1.015625,0.9912190698420517341764818662191450397148,-0.008819709705733069204889229698627066380001
+1.03125,0.98290109928362691478263486825456935047,-0.01724677500176806740289126202224623179737
+1.0625,0.9675800675995248847599762987154317516646,-0.03295710029357781908319883575047418315706
+1.125,0.9417426998497014880874037301518917030763,-0.06002318412603958293140584320743011427822
+1.25,0.9064024770554770779826712889669180007488,-0.09827183642181316146385380269663584022562
+1.375,0.8889135691562253407424275640662446912078,-0.1177552707410787744513620333179885042465
+1.5,0.8862269254527580136490837416705725913988,-0.1207822376352452223455184457816472122519
diff --git a/commons-numbers-gamma/src/test/resources/org/apache/commons/numbers/gamma/gamma_near_2_data.csv b/commons-numbers-gamma/src/test/resources/org/apache/commons/numbers/gamma/gamma_near_2_data.csv
new file mode 100644
index 0000000..848335e
--- /dev/null
+++ b/commons-numbers-gamma/src/test/resources/org/apache/commons/numbers/gamma/gamma_near_2_data.csv
@@ -0,0 +1,61 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# (C) Copyright John Maddock 2006.
+# Use, modification and distribution are subject to the
+# Boost Software License, Version 1.0. (See accompanying file
+# LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+# Extracted from: boost/libs/math/test/test_gamma_data.ipp
+# x, tgamma(x), lgamma(x)
+1.5,0.8862269254527580136490837416705725913988,-0.1207822376352452223455184457816472122519
+1.625,0.8965742800565979847725123371602644603951,-0.1091741337567953724659793453255625768435
+1.75,0.9190625268488832338468237275221678951384,-0.08440112102048555595778603413139773174384
+1.875,0.9534458127450348323458296607150313497544,-0.0476726853991882996439780371618622723197
+1.9375,0.9751659479875942232435276412768010580753,-0.02514761940298887101469636934303908362555
+1.96875,0.9871877586486528896095822339303817741048,-0.01289502598016741062140421704372482102582
+1.984375,0.9934942349545037046646241619249639248858,-0.006527019770560387562504065432973464109098
+1.9921875,0.9967220954986639369672736204077361054958,-0.003283288599221334008087443035901123210745
+1.99609375,0.9983547780306754539374306832198017571606,-0.001646576833227209223092930587911738897203
+1.998046875,0.9991758197849782200230487539873719343464,-0.0008245200382650888261806366903737014930725
+1.9990234375,0.9995875173583940940094860854466195201034,-0.0004125677359714894017106176239696704326377
+1.99951171875,0.9997936605172715158492229105972945155141,-0.0002063607736483724433350542340289891606905
+1.999755859375,0.9998968057145986134157190626438734177924,-0.0001031996102979920861817501746961436019694
+1.9998779296875,0.9999483967208452041447977734631271456482,-0.5160461064981215542788033369454594603258e-4
+1.99993896484375,0.9999741968262534527384281628962293685498,-0.2580350665416168648325053559023655125278e-4
+1.999969482421875,0.9999870980295774847216527132886600812439,-0.1290205365365156795229453393309637521044e-4
+1.9999847412109375,0.9999935489189005625751513729787156979985,-0.6451101907750591399976874019296260011728e-5
+1.99999237060546875,0.9999967744354781276641509840822795646932,-0.3225569724016764801116581064181763189594e-5
+1.999996185302734375,0.9999983872117460118412633921783404380531,-0.1612789554532533173009818453505550062943e-5
+2.0,1.0,0.0
+2.000003814697265625,1.00000161280024011931074434129623713986,0.161279893955840184299760314572495677042e-5
+2.00000762939453125,1.000003225612466396944257297966490462185,0.322560726412023958566345675090317173141e-5
+2.0000152587890625,1.000006451272877535864519325623917830418,0.6451252068164492211696167502987139983584e-5
+2.000030517578125,1.000012902737534909133631207655399313341,0.1290265429530719797568036294024708700466e-4
+2.00006103515625,1.000025806242196124228325546227327679105,0.2580590922078463500093254292124318294867e-4
+2.0001220703125,1.000051615552953128452105520486771074315,0.5161422091631080428484087308642550680092e-4
+2.000244140625,1.000103243380595112650112753954221989398,0.0001032380513640963581901732440393341809948
+2.00048828125,1.000206535863509719265815185078589813025,0.0002065145379145443567131291462537026096587
+2.0009765625,1.000413268164832140091644464679649856244,0.000413182793064254264258674986332041644883
+2.001953125,1.000827322309547415507838270760694901832,0.000826980267085383846585814529167493000815
+2.00390625,1.001657790373358329933817798077673136303,0.001656417755696172869171861186612377080916
+2.0078125,1.003328178532374632976589675522967237775,0.003322652404102649860792821138784654479368
+2.015625,1.00670686780833379252298939537881918096,0.006684476830232184945964816343819769497868
+2.03125,1.013616758636240255869592207887524642672,0.01352488366498562096813694557452593229433
+2.0625,1.028053821824495190057474817385146236144,0.02766752152285702349740729628994608012915
+2.125,1.059460537330914174098329196420878165961,0.05775985153034387160738826626309159079026
+2.25,1.133003096319346347478339111208647500936,0.124871714892396594302441287613198663149
+2.375,1.222256157589809843520837900591086450411,0.2006984603774558413588851802726110913487
+2.5,1.329340388179137020473625612505858887098,0.2846828704729191596324946696827019243201
diff --git a/commons-numbers-gamma/src/test/resources/org/apache/commons/numbers/gamma/gamma_near_m10_data.csv b/commons-numbers-gamma/src/test/resources/org/apache/commons/numbers/gamma/gamma_near_m10_data.csv
new file mode 100644
index 0000000..a182f49
--- /dev/null
+++ b/commons-numbers-gamma/src/test/resources/org/apache/commons/numbers/gamma/gamma_near_m10_data.csv
@@ -0,0 +1,60 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# (C) Copyright John Maddock 2006.
+# Use, modification and distribution are subject to the
+# Boost Software License, Version 1.0. (See accompanying file
+# LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+# Extracted from: boost/libs/math/test/test_gamma_data.ipp
+# x, tgamma(x), lgamma(x)
+-10.5,-0.2640121820547716316246385325311240439682e-6,-15.14727059071784114610117639552631963436
+-10.375,-0.3853824777091100016167565620752110328498e-6,-14.76902954720701012688042720516103787762
+-10.25,-0.67808180432946731304891004492754985848e-6,-14.20399790093109065161116876070387206737
+-10.125,-0.1684831262052517456216882327889895477394e-5,-13.293845140389538484236785089823191703
+-10.0625,-0.3830328107020316635889325503807551568979e-5,-12.47256009081165579039929355805785844157
+-10.03125,-0.820629952953019778657392524711140975814e-5,-11.71060846332720387792243958913415617938
+-10.015625,-0.1700699874643038383461557487368349913225e-4,-10.98188560766303889037266091827081352261
+-10.0078125,-0.3463458256516313677243695342138690766685e-4,-10.27065787896126424410583159193311350064
+-10.00390625,-0.6990332874758209033426446699035926999779e-4,-9.568397288290682386853008683681967849367
+-10.001953125,-0.0001404477363900451708521851118608466504012,-8.870675121382310094805966387146254501189
+-10.0009765625,-0.000281540041401883411812666338203440274148,-8.175235877509399161097817609681419866606
+-10.00048828125,-0.000563726404385624063397951573975953521758,-7.480941522771659111292091779019988346536
+-10.000244140625,-0.001128100008866690679009902807702968873353,-6.787220469493554911614571257238006425123
+-10.0001220703125,-0.002256847657595184957233851276605048793085,-6.093786281167310238545736320487058532071
+-10.00006103515625,-0.004514343175062893955072428860155326550553,-5.400495578872419834979145899538225218653
+-10.000030517578125,-0.009029334320035575647839997474459714791226,-4.707276632982054173483611347195057396393
+-10.0000152587890625,-0.01805931666500754906434806474181437991942,-4.01409356864116185854622778461065066607
+-10.00000762939453125,-0.03611928138246679574769960801636554264536,-3.320928445911808853642423587159533484381
+-10.000003814697265625,-0.07223921083114343778444263107651750106133,-2.627772294197426150094657771000510514181
+-9.999996185302734375,0.07224050699108014022628046448675851453374,-2.627754351749084271591553302449947161499
+-9.99999237060546875,0.03612057754240364069840471083444586728855,-3.320892561015125097640948165422843317137
+-9.9999847412109375,0.01806061282494496405052242015364798732676,-4.014021798847794354581145064057511795502
+-9.999969482421875,0.009030630479975270775894162659645956519741,-4.707133093395319229856390889602684453056
+-9.99993896484375,0.004515639335011709650690623512369371764253,-5.400208499698950462148264857327856480671
+-9.9998779296875,0.002258143817580482923824809786660261248415,-6.093212122820375608272453375481778776963
+-9.999755859375,0.00112939616899791774095825334343857186485,-6.786072152799718574175843462405206935614
+-9.99951171875,0.0005650225651005676902373042742306456894427,-7.478644889384249821277500306107773873963
+-9.9990234375,0.000282836204451696233602080064105049188933,-8.170642610736687659976646968506313698216
+-9.998046875,0.0001417439087793817388175538505551912206884,-8.861488587853743723990903404527520549863
+-9.99609375,0.7119953849576511774290270246050426493188e-4,-9.550024221368402701862865053477154735263
+-9.9921875,0.3593094176075641243360143967272818899195e-4,-10.23391174619552949434163600960412224542
+-9.984375,0.1830395592410737084371847753712605958898e-4,-10.90839335076217169965796414369624068766
+-9.96875,0.9505651717966543211040666528035462899479e-5,-11.56362401857045907442600014919001566007
+-9.9375,0.5139309871979484321498376816774659227047e-5,-12.17859175366355833461560769108992933228
+-9.875,0.3033137834984411836791652786842133042328e-5,-12.70591288519170921633064985576606088605
+-9.75,0.2197547155462853887868709703817446704567e-5,-13.02816874893114553892881831326149507953
+-9.625,0.2248214426276410648574460028763198846825e-5,-13.00537424512744790544056216033820032846
+-9.5,0.2772127911575102132058704591576802461667e-5,-12.79589533355436345901781053661879076815
diff --git a/commons-numbers-gamma/src/test/resources/org/apache/commons/numbers/gamma/gamma_near_m55_data.csv b/commons-numbers-gamma/src/test/resources/org/apache/commons/numbers/gamma/gamma_near_m55_data.csv
new file mode 100644
index 0000000..6a37775
--- /dev/null
+++ b/commons-numbers-gamma/src/test/resources/org/apache/commons/numbers/gamma/gamma_near_m55_data.csv
@@ -0,0 +1,60 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# (C) Copyright John Maddock 2006.
+# Use, modification and distribution are subject to the
+# Boost Software License, Version 1.0. (See accompanying file
+# LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+# Extracted from: boost/libs/math/test/test_gamma_data.ipp
+# x, tgamma(x), lgamma(x)
+-55.5,0.3313939247684676728377268347296671102738e-73,-169.1931592947433577934436950412776436064
+-55.375,0.5931885913251829148011431845907438457576e-73,-168.6109546898941580979033836431457031234
+-55.25,0.128134265213561204650151776242601279892e-72,-167.8408033134133338381597995376176917559
+-55.125,0.3913191103476296924523858848738104144085e-72,-166.7243586084319013982262850893209212539
+-55.0625,0.986732607487198018754292852511389106856e-72,-165.7994828862238820223463651561184383051
+-55.03125,0.2226660343675615375290464186909601183619e-71,-164.9856238363615162450940197678605306484
+-55.015625,0.4736069454740001055763353712089973133951e-71,-164.2309191328226253115354307486462442346
+-55.0078125,0.977114118293834733521912343859491871413e-71,-163.5066934315334134525852432438180103697
+-55.00390625,0.1984981336813056540008261636773673389822e-70,-162.7979320905915813518737104001603528406
+-55.001953125,0.4001152702583918680236220298606474660766e-70,-162.0969591073259992663458061954608696748
+-55.0009765625,0.8033716579133006533597549451686567408424e-70,-161.399894344940666691934457343256688548
+-55.00048828125,0.1609895558223411179719291838965309144853e-69,-160.7047872033597077904481004857770657217
+-55.000244140625,0.3222948938373906907742658942729222148632e-69,-160.0106597497627978468127607946271352327
+-55.0001220703125,0.6449058492709206027088103024110200975353e-69,-159.3170223595527956784727838139907674684
+-55.00006103515625,0.1290127899946570906748117205135768082314e-68,-158.6236300558849309281660984198839415596
+-55.000030517578125,0.2580572071228903781598785159467838581806e-68,-157.9303603092003033255947568117785799832
+-55.0000152587890625,0.5161460448765772204325064962419091742529e-68,-157.2371518444353362397006108889220356827
+-55.00000762939453125,0.1032323722132728230665906965174285853426e-67,-156.5439740214872098856520824742320518588
+-55.000003814697265625,0.2064679077519460715554797358664728667652e-67,-155.8508115196617565149201605014267824236
+-54.999996185302734375,-0.2064742345776389872444192676691131506575e-67,-155.8507808769879053144034254273344043224
+-54.99999237060546875,-0.1032386990389669331883069223703195417382e-67,-156.543912736139507484654652677755511734
+-54.9999847412109375,-0.5162093131335660989607568848213731056733e-68,-157.2370292737399314379940741096346901828
+-54.999969482421875,-0.258120475380070365932807313377307528986e-68,-157.9301151678094937244882657625299630878
+-54.99993896484375,-0.129076058252601515431668371755594450098e-68,-158.6231397731033117444057763960015760334
+-54.9998779296875,-0.6455385318809423304687659289501264852653e-69,-159.3160417939895574585734203633457962732
+-54.999755859375,-0.3229275765697223526481784197301709161285e-69,-160.0086986186363225879842786767213113941
+-54.99951171875,-0.1616222390439127298761439614470246404862e-69,-160.70086494110676672055309472267163668
+-54.9990234375,-0.8096985096986489455731873769112931053315e-70,-161.3920498204348601342401201789602276343
+-54.998046875,-0.4064422003228156070372890110113661523823e-70,-162.0812700583149908077227373306519861132
+-54.99609375,-0.2048253768707794232109022149495560465895e-70,-162.7665539925744016887591545718340828031
+-54.9921875,-0.1040399076590405899054222579682253865197e-70,-163.4439372355377521596244089121137210432
+-54.984375,-0.5369420317824801296090020359957584504561e-71,-164.1054067411408869986598886088213583004
+-54.96875,-0.2862019916619447982849309567142574291595e-71,-164.7345990554747140245090340482576614581
+-54.9375,-0.1630184748946170270451320476784206632433e-71,-165.2974333442636798880161449262335724888
+-54.875,-0.1068084665867092473960298264876009169786e-71,-165.7202596830189416811721153572453840111
+-54.75,-0.9545836185625177195542164628822374598687e-72,-165.8326067306542059861208673933569437798
+-54.625,-0.1206186475649396145903288691554707530168e-71,-165.5986629859610336595561650158366255984
+-54.5,-0.183923628246499558424938393274965246202e-71,-165.1767762739909689670975862547818473059
diff --git a/commons-numbers-gamma/src/test/resources/org/apache/commons/numbers/gamma/gamma_p_derivative.pl b/commons-numbers-gamma/src/test/resources/org/apache/commons/numbers/gamma/gamma_p_derivative.pl
new file mode 100755
index 0000000..b9ef5d6
--- /dev/null
+++ b/commons-numbers-gamma/src/test/resources/org/apache/commons/numbers/gamma/gamma_p_derivative.pl
@@ -0,0 +1,152 @@
+#!/usr/bin/perl -w
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+use Getopt::Long;
+use File::Basename;
+
+my $prog = basename($0);
+
+my $usage = "
+  Program to read a CSV file of (a,x) values and create a maxima
+  batch script to generate the expected gamma_p(a, x) derivative.
+
+  The output maxima script is named '[input]_p_derivative.mac'.
+
+Usage:
+
+  $prog input [...]
+
+Options:
+
+  input     CSV file(s)
+
+  -exec     Execute maxima as a batch process on the script.
+            The output maxima result file is named '[input]_p_derivative.csv'.
+
+  -help     Print this help and exit
+
+";
+
+my ($help, $exec);
+GetOptions(
+  "help" => \$help,
+  "exec" => \$exec,
+);
+
+die $usage if $help;
+
+@ARGV or die $usage;
+
+my @files;
+for (@ARGV) {
+  if (m/\*/) {
+    push @files, glob "$_";
+  } else {
+    push @files, $_;
+  }
+}
+
+# Process each file
+for $input (@files) {
+  open (IN, $input) or die "Failed to open '$input': $!\n";
+  # strip file extension
+  my $out = $input;
+  $out =~ s/\.[^\.]+$//;
+  $out = "${out}_p_derivative";
+  open (OUT, ">$out.mac") or die "Failed to open '$out.mac': $!\n";
+
+  #
+  #  Start the maxima script
+  #
+  print OUT <<__END;
+kill(all);
+fpprec : 128;
+
+/* Function to open a file and add the Apache license header. */
+header(s) :=
+  block(out : openw(s),
+    printf(out, "#~%"),
+    printf(out, "# Licensed to the Apache Software Foundation (ASF) under one or more~%"),
+    printf(out, "# contributor license agreements.  See the NOTICE file distributed with~%"),
+    printf(out, "# this work for additional information regarding copyright ownership.~%"),
+    printf(out, "# The ASF licenses this file to You under the Apache License, Version 2.0~%"),
+    printf(out, "# (the \\"License\\"); you may not use this file except in compliance with~%"),
+    printf(out, "# the License.  You may obtain a copy of the License at~%"),
+    printf(out, "#~%"),
+    printf(out, "#     http://www.apache.org/licenses/LICENSE-2.0~%"),
+    printf(out, "#~%"),
+    printf(out, "# Unless required by applicable law or agreed to in writing, software~%"),
+    printf(out, "# distributed under the License is distributed on an \\"AS IS\\" BASIS,~%"),
+    printf(out, "# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.~%"),
+    printf(out, "# See the License for the specific language governing permissions and~%"),
+    printf(out, "# limitations under the License.~%"),
+    printf(out, "~%"),
+    printf(out, "# Generated using maxima from a script built by $prog~%"),
+    printf(out, "# Input data: $input~%"),
+    printf(out, "# a, x, gamma_p_derivative(a, x), log(gamma_p_derivative(a, x)),~%"),
+    return (out) );
+
+/* Input data. */
+l: [
+__END
+
+  #
+  # Program to read the CSV file and create a list variable in maxima
+  #
+
+  my $i = 0;
+  while (<IN>) {
+    # Skip comments and lines without a comma
+    next if (m/^#/);
+    next unless m/,/;
+    # Get the first two fields
+    my ($a,$x) = split /[, ]+/, $_;
+    # Remove trailing space
+    chomp($x);
+    # Print a trailing comma for the previous field
+    print OUT ",\n" if $i++;
+    # Print the fields for the maxima list data
+    print OUT "[$a,$x]";
+  }
+
+  #
+  #  Finish the maxima script
+  #
+  print OUT <<__END;
+
+];
+
+/* Formatting function to convert big float exponent to e. */
+str(x) := ssubst("e","b",string(x));
+
+xlogy(x, y) := if x = 0 then 0 else x * log(y);
+
+out : header("$out.csv");
+for pair in l do
+ (a : bfloat(pair[1]),
+  x : bfloat(pair[2]),
+  printf(out, "~f,~f,~a,~a~%", a, x, str(exp(-x) * x^(a - 1) / gamma(a)), str(xlogy(a-1, x) - x - log_gamma(a)) )), fpprintprec:30;
+close(out);
+__END
+  close IN;
+  close OUT;
+
+  if ($exec) {
+    $filename = "$out.mac";
+    `maxima -b $filename` or die "Failed to execute 'maxima': $!";
+    unlink($filename) or die "Can't delete $filename: $!\n";
+  }
+}
diff --git a/commons-numbers-gamma/src/test/resources/org/apache/commons/numbers/gamma/gamma_very_near_0_data.csv b/commons-numbers-gamma/src/test/resources/org/apache/commons/numbers/gamma/gamma_very_near_0_data.csv
new file mode 100644
index 0000000..ad5053d
--- /dev/null
+++ b/commons-numbers-gamma/src/test/resources/org/apache/commons/numbers/gamma/gamma_very_near_0_data.csv
@@ -0,0 +1,124 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Reference data for the gamma function very close to 0. This
+# data was generated with the following <a
+# href="http://maxima.sourceforge.net/">Maxima</a> script.
+#
+# kill(all);
+#
+# fpprec : 64;
+#
+# x : makelist(bfloat(2**-i), i, 14, 60);
+# x : append(x, makelist(bfloat(-(2**-i)), i, 14, 60));
+# str(x) := ssubst("e","b",string(x));
+#
+# for i : 1 while i <= length(x) do
+#     printf(true, "~e,~a,~a~%", x[i], str(gamma(x[i])), str(log(abs(gamma(x[i])))));
+
+6.103515625e-5,1.638342284469890528218878340665131432419969255047068156812042208e4,9.704025300454774477951337474167744232247507776099580356837082639e0
+3.0517578125e-5,3.276742281451784694671242432333092929765353386342227256341401685e4,1.039719009394100176207788843272141977353826362128498038608759561e1
+1.52587890625e-5,6.553542279942668398540027145451732421437750704839825989488150989e4,1.109034608153854475277051988217319318752810307168853135128498226e1
+7.62939453125e-6,1.31071422791880944047196277792540152097883047198985630080562e5,1.178349766576090681276037584294890342817642807531764740834389685e1
+3.814697265625e-6,2.621434227881080344625629331726731855154561735557292930101115571e5,1.247664704818796544202254047206534711638347948730994997200821474e1
+1.9073486328125e-6,5.242874227862215697662203737615887838317445912513495133576470956e5,1.316979532969044370588738318501641380215854333796512408895705684e1
+9.5367431640625e-7,1.048575422785278334942024740755654594258147158319522824330318719e6,1.386294306072389957345796333692008901239889287274853989872217466e1
+4.76837158203125e-7,2.097151422784806716910918600720959803094391949317827747126473941e6,1.455609051652116118309654164495172251542234485344760525347884511e1
+2.384185791015625e-7,4.194303422784570907740613170418852284372844864821242588170576963e6,1.524923783469990489802465098889476724019540232479957929981564726e1
+1.1920928955078125e-7,8.388607422784453003116772330271317501197617517316182666708060772e6,1.594238508406928447406162728190258001974062771406770269749485661e1
+5.960464477539063e-8,1.677721542278439405079517987458276457526109872241799206161704408e7,1.663553229903395568275658969628912323687152942167441340785370111e1
+2.980232238769531e-8,3.355443142278436457463196563728908332488931110915760937849814831e7,1.732867949679626613330487424320170066471319626728953938706433788e1
+1.4901161193847656e-8,6.710886342278434983654975401621167793712443472680153539163814367e7,1.802182668595739456116070723803906315402984046317587387867875506e1
+7.450580596923828e-9,1.342177274227843424675084970800568073559280466800734900382572459e8,1.871497387081793156676551194146314558828187796449399135870276392e1
+3.725290298461914e-9,2.684354554227843387829878308305742642563581401815117968259286514e8,1.940812105352817275851859882523753429769270325282082955995265952e1
+1.862645149230957e-9,5.368709114227843369407274882604815825246836322814967069067064175e8,2.010126823516326601766427550006390538718421543275004670009224615e1
+9.313225746154785e-10,1.073741823422784336019597314614097372459667928639461887028278743e9,2.079441541626078530408585919805579809886277899536711472204769261e1
+4.6566128730773926e-10,2.147483647422784335559032227200570798045652192222216240450294398e9,2.148756259708951760254029943359287455974720567369614740897670174e1
+2.3283064365386963e-10,4.294967295422784335328749683346223893233053192933849083274290168e9,2.218070977778385640660989369364971616726494873767566020621387849e1
+1.1641532182693481e-10,8.589934591422784335213608411382154536392829140471578849323255763e9,2.287385695841099846338674640481030460805991144134226855182225576e1
+5.820766091346741e-11,1.71798691834227843351560377753908958818601701297763523306048581e10,2.35670041390045421464921487012221163982130685865744954946503788e1
+2.9103830456733704e-11,3.435973836742278433512725245739296056056519564753004807129663503e10,2.426015131958128664275555588018292532969048236583315524657903202e1
+1.4551915228366852e-11,6.871947673542278433511285979839341640141048363333437580220142657e10,2.495329850014963154559639802289889769642441489297455203724888895e1
+7.275957614183426e-12,1.374389534714227843351056634688935001972063134918624278421991577e11,2.564644568071377665172556577811259530917683839086527160343717415e1
+3.637978807091713e-12,2.748779069434227843351020653041435060639475238948946781278684131e11,2.633959286127582185949879837223018859106626929802494704693108833e1
+1.8189894035458565e-12,5.497558138874227843351002662217684999895289528407730783612063144e11,2.703274004183681711809403889396348761455991987988271130110905312e1
+9.094947017729282e-13,1.099511627775422784335099366680580994700372373234292874630683562e12,2.77258872223972874021002772565455789413025812268668960228664544e1
+4.547473508864641e-13,2.19902325555142278433509891690998724149280725990925917522123959e12,2.841903440295749519881201300881230127224246968021164532999483327e1
+2.2737367544323206e-13,4.398046511103422784335098692024690364748277997366051582818557467e12,2.911218158351757175187649707323639781773177667916422469521538517e1
+1.1368683772161603e-13,8.796093022207422784335098579582041926340826689624244808063216954e12,2.980532876407758268311735519806794614852194726921216860836364866e1
+5.684341886080801e-14,1.759218604441542278433509852336071770712830436663578689004828913e13,3.049847594463756080344640032918541154145826986815371414931310961e1
+2.842170943040401e-14,3.5184372088831422784335098495250055597519844037862168825832579e13,3.119162312519752251831953895746638325784024622910017163008683515e1
+1.4210854715202004e-14,7.036874417766342278433509848119472454271506408165551246159573641e13,3.188477030575747603046472433283424508403802487346631672108384937e1
+7.105427357601002e-15,1.407374883553274227843350984741670590153125366555972224219720536e14,3.257791748631742544124593308137183620216692738052507650617113173e1
+3.552713678800501e-15,2.814749767106554227843350984706532262516112385805793369759975542e14,3.327106466687737280134515351640086302551719485797314423313631087e1
+1.7763568394002505e-15,5.629499534213114227843350984688963098697605809525732097553122803e14,3.396421184743731913610337979465225046629209525022627956449170523e1
+8.881784197001252e-16,1.125899906842623422784335098468017851678835249990945850777783962e15,3.465735902799726495819110899450897890698279966601576004064528127e1
+4.440892098500626e-16,2.251799813685247422784335098467578622583372583973226093304280511e15,3.535050620855721052394358965516691802043227797994826691452543872e1
+2.220446049250313e-16,4.503599627370495422784335098467359008035641250830139705489926087e15,3.604365338911715596152844604622509751346136121390117557397598352e1
+1.1102230246251565e-16,9.007199254740991422784335098467249200761775584225039921270220983e15,3.673680056967710133502949030248330595708030140052090416182182066e1
+5.551115123125783e-17,1.80143985094819834227843350984671942971248427509141010471022463e16,3.742994775023704667648862849134150606619418368662812208718001626e1
+2.7755575615628914e-17,3.602879701896396742278433509846716684530637633425653505822709032e16,3.812309493079699200192681364649969630560554042826634510640590835e1
+1.3877787807814457e-17,7.205759403792793542278433509846715311939714312592723842705358014e16,3.881624211135693731935452228480788018455313524911672846797879667e1
+6.938893903907228e-18,1.441151880758558714227843350984671462564425265217624750973344439e17,3.950938929191688263277699266469106052686572432243483660645473198e1
+3.469446951953614e-18,2.882303761517117434227843350984671428249652182196799987774234015e17,4.020253647247682794419684391536173901176002932520221553562219477e1
+1.734723475976807e-18,5.764607523034234874227843350984671411092265640686389116046143713e17,4.0895683653036773254615385601426166545669996993498082470247893e1
+8.673617379884035e-19,1.152921504606846975422784335098467140251357236993120980908245319e18,4.158883083359671856453327250518746859851899716975915802282172241e1
+-6.103515625e-5,-1.63845772760354695939336148831283410381037202353359487504624092e4,9.704095761351551114080487592308688534482215115512549619073616079e0
+-3.0517578125e-5,-3.276857724584934032393443149086321342053860620425210085646573071e4,1.039722532438932175111825798174135071554503353843033747922975022e1
+-1.52587890625e-5,-6.553657723075690962899636361017901925666303940241631427475774437e4,1.109036369676269620616269440700453555077997281743427363975068453e1
+-7.62939453125e-6,-1.310725772232108527573861906368184359160000042634475041364758954e5,1.178350647337298147181546230662592344688602624116429729228034521e1
+-3.814697265625e-6,-2.621445772194378639394013199042046138782257288907574727212372002e5,1.247665145199400263809495861913874999344625338521472943706726051e1
+-1.9073486328125e-6,-5.24288577217551379434720880134627185393186669510282084957567416e5,1.316979753159346228724170162342864010729943546448923467846452825e1
+-9.5367431640625e-7,-1.048576577216608139658440777112175594556415624269802701073491713e6,1.386294416167540886204988622675036662511200384473267474310006381e1
+-4.76837158203125e-7,-2.09715257721613652038931351957792056904162301920605908596004555e6,1.45560910669969158271318485486953419996659937737131357717329053e1
+-2.384185791015625e-7,-4.19430457721590071090950280990120856148011279888170477602264285e6,1.524923810993778222000972262312015144581465281347135823002715386e1
+-1.1920928955078125e-7,-8.388608577215782806208285649910040504204131914536894289572747837e6,1.594238522168822313505009037180946937982372931635575640134531433e1
+-5.960464477539063e-8,-1.677721657721572385386734911426058037524925206312035549131826455e7,1.663553236784342501325031215034184258811402408332230238483524874e1
+-2.980232238769531e-8,-3.355443257721569437769929885697667239384205089370715330299825968e7,1.73286795312010007985516718338654696746733665592939446362321363e1
+-1.4901161193847656e-8,-6.710886457721567963961587823090171032767576966656136058632146552e7,1.802182670315976189378409807882562382581600363490743015245177063e1
+-7.450580596923828e-9,-1.342177285772156722705743190434974505771513709426514149686265717e8,1.871497387941911523307720636753826044502614782406286982738773363e1
+-3.725290298461914e-9,-2.684354565772156685860535772312025601852664830581702172637591659e8,1.940812105782876459167444591398532104117125010808337293343837636e1
+-1.862645149230957e-9,-5.368709125772156667437932157704067916305142936418862493820122538e8,2.010126823731356193424219902890157742331179076954311942290508261e1
+-9.313225746154785e-10,-1.073741824577215665822663037401346809859729236110172397397986402e9,2.079441541733593326237482096053260644997510441548628365104651482e1
+-4.6566128730773926e-10,-2.147483648577215665362097948807151292519271165376093754505161219e9,2.148756259762709158168478031458852527693443560312972992686527491e1
+-2.3283064365386963e-10,-4.294967296577215665131815404657637151975061582768242520857396004e9,2.218070977805264339618213413411719734356244710482697212753305842e1
+-1.1641532182693481e-10,-8.589934592577215665016674132619775986201934884492334028576262907e9,2.28738569585453919581728666250402521734216460502226386860818606e1
+-5.820766091346741e-11,-1.717986918457721566495910349661006937943605021234471249282420957e10,2.356700413907173889388520881133661605304555906917778230506776001e1
+-2.9103830456733704e-11,-3.435973836857721566493031817860752207008276931473537288847789254e10,2.426015131961488501645208593524011589112568050440518675943573855e1
+-1.4551915228366852e-11,-6.871947673657721566491592551960682491391348069669894574619349313e10,2.49532985001664307324446630504274855688943830744193663193124412e1
+-7.275957614183426e-12,-1.374389534725772156649087291901066204604556664042668093155620725e11,2.564644568072217624514969829187688831938086862060752856055377726e1
+-3.637978807091713e-12,-2.748779069445772156649051310253565542648834657695590124989582998e11,2.633959286128002165621086462911233498041441518027355675251153599e1
+-1.8189894035458565e-12,-5.497558138885772156649033319429815301748865419560024009573094632e11,2.703274004183891701645007202240456079476475916692920130727671471e1
+-9.094947017729282e-13,-1.099511627776577215664902432401794020381835374159663444281556383e12,2.772588722239833735127829382076611552959634666363041417012107217e1
+-4.547473508864641e-13,-2.199023255552577215664901982631200266048296613787165056629632148e12,2.841903440295802017340102129092256956616327062274843854664068216e1
+-2.2737367544323206e-13,-4.398046511104577215664901757745903389022273939482091292141624354e12,2.911218158351783423917100121429153196466391692845200057141000967e1
+-1.1368683772161603e-13,-8.796093022208577215664901645303254950544449278799817974266129069e12,2.98053287640777139267646072685955132219844848661084789549336885e1
+-5.684341886080801e-14,-1.759218604441657721566490158908193073131433361757624342007586908e13,3.049847594463762642527002636444919507818909710063342212363475065e1
+-2.842170943040401e-14,-3.518437208883257721566490156097126862170147495424384619523515202e13,3.119162312519755532923135197509827502620560464959396971733229364e1
+-1.4210854715202004e-14,-7.036874417766457721566490154691593756689559541439749503451736214e13,3.188477030575749243592063084165019096822069718424495877712727903e1
+-7.105427357601002e-15,-1.407374883553285772156649015398882720394927930924292812704746603e14,3.257791748631743364397388633577980914425826267348086541056567546e1
+-3.552713678800501e-15,-2.814749767106565772156649015363744392757914262934339147922002771e14,3.327106466687737690270913014360484949656286239664684716952066902e1
+-1.7763568394002505e-15,-5.629499534213125772156649015346175228939407514844334169086595165e14,3.396421184743732118678536810825424370181492900608760709248823546e1
+-8.881784197001252e-16,-1.125899906842624577215664901533739064703015416227557463646295263e15,3.4657359027997265983532103151309975524744216542261983310681021e1
+-4.440892098500626e-16,-2.251799813685248577215664901533299835607552749136025551125094575e15,3.535050620855721103661408673356741632931298641786082348492185436e1
+-2.220446049250313e-16,-4.503599627370496577215664901533080221059821415724486098642862828e15,3.604365338911715621786369458542534666790171543283113447034423246e1
+-1.1102230246251565e-16,-9.00719925474099257721566490153297041378595574905227294463237634e15,3.673680056967710146319711457208343053430047850998259367489764607e1
+-5.551115123125783e-17,-1.80143985094819845772156649015329155101490229157245553135214581e16,3.742994775023704674057244062614156835480427224135855557882028317e1
+-2.7755575615628914e-17,-3.602879701896396857721566490153288805833055649906279297742957338e16,3.812309493079699203396871971389972744991058470563151039809561927e1
+-1.3877787807814457e-17,-7.20575940379279365772156649015328743324213232907324406275279096e16,3.881624211135693733537547531850789575670565738779930459002091568e1
+-6.938893903907228e-18,-1.441151880758558725772156649015328674694667066865673868404308493e17,3.950938929191688264078746918154106831294198539177612366792758216e1
+-3.469446951953614e-18,-2.882303761517117445772156649015328640379893983844847317953917834e17,4.020253647247682794820208217378674290479815985987285857326935916e1
+-1.734723475976807e-18,-5.764607523034234885772156649015328623222507442334431754981665769e17,4.089568365303677325661800473063866849218906226083340319114384855e1
+-8.673617379884035e-19,-1.1529215046068469765772156649015328614643814171579234297481568e18,4.158883083359671856553458206979371957177852980342681681094580873e1
diff --git a/commons-numbers-gamma/src/test/resources/org/apache/commons/numbers/gamma/igamma_asymptotic_data.csv b/commons-numbers-gamma/src/test/resources/org/apache/commons/numbers/gamma/igamma_asymptotic_data.csv
new file mode 100644
index 0000000..0f5be2c
--- /dev/null
+++ b/commons-numbers-gamma/src/test/resources/org/apache/commons/numbers/gamma/igamma_asymptotic_data.csv
@@ -0,0 +1,83 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# For the gamma P/Q data:
+
+# (C) Copyright John Maddock 2006.
+# Use, modification and distribution are subject to the
+# Boost Software License, Version 1.0. (See accompanying file
+# LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+# Asymptotic approximation for large argument, see: https://dlmf.nist.gov/8.11#E2
+# Computed without the leading z^(a-1) e^-z term using:
+#
+#  static BigDecimal incompleteTgammaLargeX(double a, double x) {
+#      BigDecimal amn = new BigDecimal(a).subtract(BigDecimal.ONE);
+#      BigDecimal z = new BigDecimal(x);
+#      BigDecimal term = BigDecimal.ONE;
+#      BigDecimal r = BigDecimal.ZERO;
+#      // The result will be above 1 thus the double precision result
+#      // will not change when the term is less than epsilon.
+#      BigDecimal min = new BigDecimal(Math.ulp(1.0));
+#      MathContext mc = new MathContext(200);
+#
+#      while (term.compareTo(min) > 0) {
+#          r = r.add(term, mc);
+#          term = term.multiply(amn).divide(z, mc);
+#          amn = amn.subtract(BigDecimal.ONE);
+#      }
+#
+#      return r.round(MathContext.DECIMAL128);
+#  }
+
+# PQ data taken from relevant igamma test resource files.
+# a, x, expected, gamma_q, gamma_p
+
+664.0791015625,1328.158203125,1.994021421981359021527322073061384,0.490100553385585993788823794136328178072277263551970508868100075216984438630852032648844240985526793e-90,0.9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999995098994466
+1169.2916259765625,1167.2916259765625,44.52724742566548299135846109568027,0.5194494986398458229099025998514760815236833039291615271666420090780290283552325279002354379324796388,0.4805505013601541770900974001485239184763166960708384728333579909219709716447674720997645620675203612
+1169.2916259765625,1169.2916259765625,42.52665543386750844869911797692689,0.4961110760455691456152544829180582276831949404486516253736169842404434869834516021522451806309381424,0.5038889239544308543847455170819417723168050595513483746263830157595565130165483978477548193690618576
+1169.2916259765625,1171.2916259765625,40.66824631555838492952491004976866,0.4728125042019031691903140623366099509942791065498616795361308461781345126406997089894375857466236069,0.5271874957980968308096859376633900490057208934501383204638691538218654873593002910105624142533763931
+1169.2916259765625,2338.583251953125,1.996593651806693170600129247608792,0.1742326673445910972431954923648105731106713066341076374902708289141328648814063925289049214586889559e-157,1.0
+2057.796630859375,2055.796630859375,58.52330615417965899140471160531457,0.5146595510563637431071584380665041151517840985243959943271211766126099181752511155269841800877407187,0.4853404489436362568928415619334958848482159014756040056728788233873900818247488844730158199122592813
+2057.796630859375,2057.796630859375,56.52297292896914485697147470769704,0.4970685077093341491049428149069921151108953421435248479241067800168777919786478963838719883781055889,0.5029314922906658508950571850930078848891046578564751520758932199831222080213521036161280116218944111
+2057.796630859375,2059.796630859375,54.63062044788719113179952267611760,0.4794945447320151505244609247943138810471077522080625919866429085483861553259121554634814161108765226,0.5205054552679848494755390752056861189528922477919374080133570914516138446740878445365185838891234774
+2057.796630859375,4115.59326171875,1.998060877677505385740820588921212,0.5158924556454278242195499999686615277394459408484310942606310759251402814732192780093913845058465035e-276,1.0
+5823.5341796875,5821.5341796875,97.31116046258477911597565760957582,0.5087134028022741086387529518673768528172426138087777028759999654326711259860222847941770091355247484,0.4912865971977258913612470481326231471827573861912222971240000345673288740139777152058229908644752516
+5823.5341796875,5823.5341796875,95.31104406705049797705991015159993,0.4982574072178089990585121217647990047541960897876785713029080474657389735630621455528428027141859677,0.5017425927821910009414878782352009952458039102123214286970919525342610264369378544471571972858140323
+5823.5341796875,5825.5341796875,93.37571820245793167278818683310605,0.48780500134556936977004263447238945560454812532198011665953206594566719692149899347013902778973964,0.51219499865443063022995736552761054439545187467801988334046793405433280307850100652986097221026036
+9113.3095703125,9111.3095703125,121.3137809667604869455201711569347,0.5069652225515127761139756648006698185865481908723864989191437142873208577668041858919621519562798842,0.4930347774484872238860243351993301814134518091276135010808562857126791422331958141080378480437201158
+9113.3095703125,9113.3095703125,119.3137068380683452364327388717198,0.4986070003277475086621436243232816155603962044739470943558278267678784076324835549046763593951499622,0.5013929996722524913378563756767183844396037955260529056441721732321215923675164450953236406048500378
+9113.3095703125,9115.3095703125,117.3655685444364897184104068801696,0.4902506119906264500395580518169463900862860214613231920536378253585336247100111218942361723610119757,0.5097493880093735499604419481830536099137139785386768079463621746414663752899888781057638276389880243
+31387.41015625,31385.41015625,223.7105800297656356980353005039968,0.5037530574267574950285346598748481476034239981169588651898103217495670654430574683807499422545184211,0.4962469425732425049714653401251518523965760018830411348101896782504329345569425316192500577454815789
+31387.41015625,31387.41015625,221.7105586382964800060280573553818,0.4992493955295262078624630020406504359970108488437383103275210393051794296194033332729085717661902896,0.5007506044704737921375369979593495640029891511562616896724789606948205703805966667270914282338097104
+31387.41015625,31389.41015625,219.7386654207465496880343377917345,0.4947460205865177317657787953702156470879097009546148598250336067254482340200731084198867465150117276,0.5052539794134822682342212046297843529120902990453851401749663932745517659799268915801132534849882724
+53731.765625,53729.765625,292.1867671824806018860419040897396,0.5028684393748171144639183376370325602727658807295180617202372561848623433680228389050363745414042978,0.4971315606251828855360816623629674397272341192704819382797627438151376566319771610949636254585957022
+53731.765625,53731.765625,290.1867547076525933694571792013506,0.4994263152569184389892349690243164177907483429757537595214928334958766883412534478021012611761406009,0.5005736847430815610107650309756835822092516570242462404785071665041233116587465521978987388238593991
+53731.765625,53733.765625,288.2082708134102619713048185395420,0.4959843192567527400639733542343360232035266718796637178642939191793549740917081309022729249590482264,0.5040156807432472599360266457656639767964733281203362821357060808206450259082918690977270750409517736
+117454.09375,117452.09375,431.1974868720489439363829860276803,0.5019401077095195070323848313576574442812198192986467929838617161888974569553340375704576649153144829,0.4980598922904804929676151686423425557187801807013532070161382838111025430446659624295423350846855171
+117454.09375,117454.09375,429.1974811752248577858262782415585,0.499611979427151974874897833905897697363907477678490396979994271179885705982324624234690235502943969,0.500388020572848025125102166094102302636092522321509603020005728820114294017675375765309764497056031
+117454.09375,117456.09375,427.2120582357833071847761070102210,0.4972838907873131198433312739984807998957012913706772498633297552685545410772772846679655645399634758,0.5027161092126868801566687260015192001042987086293227501366702447314454589227227153320344354600365242
+246209.65625,246207.65625,623.5553131983931920742861631445320,0.501340006181406305362208182086691817029256585472066242900372017261364294652322499081532560989068282,0.498659993818593694637791817913308182970743414527933757099627982738635705347677500918467439010931718
+246209.65625,246209.65625,621.5553104838138984278976053955021,0.4997319990830143882908170503627598371539437356320335970815080360238724867210261514858758596804507521,0.5002680009169856117091829496372401628460562643679664029184919639761275132789738485141241403195492479
+246209.65625,246211.65625,619.5653895482482378158430259153167,0.4981240050466124914099774918899995777543692453345887329244388038491507106647647777524494210424240252,0.5018759949533875085900225081100004222456307546654112670755611961508492893352352222475505789575759748
+513669.1875,513667.1875,899.9260595728714164482277081165966,0.5009277208355985110675899414981370183301000099671155624683102665494895878885434589591042983062216035,0.4990722791644014889324100585018629816698999900328844375316897334505104121114565410408957016937783965
+513669.1875,513669.1875,897.9260582727449575893891681439830,0.4998144559388361978364898291206210101144861575499062946445741052920369397398298507664833795665274182,0.5001855440611638021635101708793789898855138424500937053554258947079630602601701492335166204334725818
+513669.1875,513671.1875,895.9330414507909185371993978141069,0.4987011953766167745079679008028061016888578219761375469627524901736850480086714928528588625770267132,0.5012988046233832254920320991971938983111421780238624530372475098263149519913285071471411374229732868
+788352.3125,788350.3125,1114.474457929727950501077183097744,0.5007488568506734531584407973208886646226494394047062415392632213315407911442369980288546641886893887,0.4992511431493265468415592026791113353773505605952937584607367786684592088557630019711453358113106113
+788352.3125,788352.3125,1112.474457082886661362277475918635,0.4998502286855928443434206403315169955579486533591805378314370596112904256380207126657714482687295139,0.5001497713144071556565793596684830044420513466408194621685629403887095743619792873342285517312704861
+788352.3125,788354.3125,1110.480095724132213653940250782146,0.4989516028002693214791004285569604766689865869988938477436476252444986636812350914588652370815612146,0.5010483971997306785208995714430395233310134130011061522563523747555013363187649085411347629184387854
+1736170.0,1736168.0,1653.081127577064693870409335692464,0.500504618033028326360191641057343755999405997498206839871815176619438983969420893139030447209664989,0.499495381966971673639808358942656244000594002501793160128184823380561016030579106860969552790335011
+1736170.0,1736170.0,1651.081127192712063759544866697543,0.49989907641044580817879562048675209725080620507540160516376663057508236554638837205467803575236936,0.50010092358955419182120437951324790274919379492459839483623336942491763445361162794532196424763064
+1736170.0,1736172.0,1649.084928468515697557265718779858,0.4992935354854227744062593568501916692180042004614849112072827608836331168589189268904245367712978671,0.5007064645145772255937406431498083307819957995385150887927172391163668831410810731095754632287021329
diff --git a/commons-numbers-gamma/src/test/resources/org/apache/commons/numbers/gamma/igamma_big_data.csv b/commons-numbers-gamma/src/test/resources/org/apache/commons/numbers/gamma/igamma_big_data.csv
new file mode 100644
index 0000000..e910eff
--- /dev/null
+++ b/commons-numbers-gamma/src/test/resources/org/apache/commons/numbers/gamma/igamma_big_data.csv
@@ -0,0 +1,340 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# (C) Copyright John Maddock 2006.
+# Use, modification and distribution are subject to the
+# Boost Software License, Version 1.0. (See accompanying file
+# LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+# Extracted from: boost/libs/math/test/igamma_big_data.ipp
+# a, z, tgamma(a, z), gamma_q(a, z), tgamma_lower(a, z), gamma_p(a, z)
+
+# Note:
+# The first entry had tgamma=-1.0.
+# Some data was missing exponents for tgamma and tgamma_lower (noted in the data below).
+# Data extremely far from the computed result must disable the test case in Boost otherwise
+# this incorrect data should trigger build failures.
+#
+# The data and missing exponents have been added back.
+# Many numbers here are infinite or zero as a double but some numbers can be represented.
+# This data thus tests the switchover from computable to infinite / zero.
+#
+# Replaced data was computed by using the Casio online calculator.
+# The digits match, only the exponents have been replaced.
+# https://keisan.casio.com/exec/system/1180573447
+
+0.1730655412757187150418758392333984375e-5,0.1730655441178896580822765827178955078125e-7,17.294690207919531525835352746968406144216680568804,0.2993117912029903240422582053899047098779533956541385552546168739467202263345519375546082579259835689e-4,577797.90391619920649973095027584836128926282155274216943338008435801586707772349755359609709258809,0.9999700688208797009675957741794610095290122046604345861444745383126053279773665448062442806862583006
+0.1730655412757187150418758392333984375e-5,0.8653277063785935752093791961669921875e-6,13.38277582367555562294055416847373915500263659346494217875993623821221196887112446988546507684731302,0.2316099655383339755405731669847576162961123204586203558223557251327214945205980959748823352959805302e-4,577801.8158305834504756449335090514614341009677858339594077124115869397920785194231187741120056354752,0.9999768390034461666024459426833015242383703887679541379644177644274867278505479401904023114002150846
+0.1730655412757187150418758392333984375e-5,0.15575898260067333467304706573486328125e-5,12.79500378214091254793715786456975103024623413471734292810881005720669047076428987935745392946724363,0.2214376467251173939070843604623148303831679646741287024258011317172427658231597089388494422353631048e-4,577802.4036026249851187199369053553654222257241882927070069630627131207976000175299533646400167828553,0.9999778562353274882606092915639537685169616832035325871297574198868282757234176840291059234224082336
+0.1730655412757187150418758392333984375e-5,0.1730655412757187150418758392333984375e-5,12.68964583907062077871829961486723468135682689673266287978904878277523088091119954467857396528045035,0.2196142619591161296471772336172777007255716660501426039935550192381060291894820144394071807910637318e-4,577802.5089605680554104891557636050679385746135955306916870113824743952290596073830436993188967470421,0.9999780385738040883870352822766382722299274428333949857396006444980761893970810517985558692139197711
+0.1730655412757187150418758392333984375e-5,0.19037209995076409541070461273193359375e-5,12.59433798893655043954589862357055470940362305301481664366705173244103638298812628401438143132385277,0.2179648098442542012919725801196235526752581619134538802152189012490537997981862095991665699048812574e-4,577802.6042684181894808283281645963646185465667993744095332475044714455632541053061169599830892809987,0.9999782035190155745798708027419880376447324741838086546119784781098750946200201813790398946910551472
+0.1730655412757187150418758392333984375e-5,0.346131082551437430083751678466796875e-5,11.99651588829393824582180456312241868001302147867883382726363976385247472204566448446731588772998297,0.2076185589653493482621881863527269295135816556729123147246768142978789975019603223353600738511731743e-4,577803.2020905188320930220522586568127545759574009487455160639078834141518157662485787595301548245925,0.9999792381441034650651737811813647273070486418344327087685275323185702121002498039677662842228674524
+0.1730655412757187150418758392333984375e-5,100.0,0.3683627182454331134963955188773865444199332047934531274456895593248745425858894973030111393161584247e-45,0.6375095690349819561521120606914926108297136245134545709768047316328210161282911224399118544097308838e-51,577815.1986064071260312678740632199351732559704224270559871729260900645078949694168616600942877298302,0.9999999999999999999999999999999999999999999999999993624904309650180438478879393085073891702863754865
+0.216575062950141727924346923828125e-5,0.2165750601079707848839461803436279296875e-7,17.07036298743991829639232909707087901526592903518599127734139540188516463205963663609773648657087723,0.3697019560232757110772732624480593336583723516402296244222007952690817919777008967240987096315205331e-4,461716.0286732860299357310725043145832190410385140498351914099753626833373215850444505022444334646984,0.999963029804397672428892272673755194066634162764835977037557779920473091820802229910327270922330567
+0.216575062950141727924346923828125e-5,0.1082875314750708639621734619140625e-5,13.15847397691465595815267467658117236635160976637264298180412548481293452753278961720297628581992752,0.2849800892415757764539734483805658830800200360898241591461531657548830413725265774914562236687744426e-4,461719.9405622965551980693121587350729256899528333186485397055126326004095516895712975211391936654494,0.9999715019910758424223546026551619434116919979963910175840853846834245116958627473422506079043676802
+0.216575062950141727924346923828125e-5,0.1949175612026010639965534210205078125e-5,12.57070526636212517657129379971158284943858132030323149197288591584777613568565108919579056236543589,0.2722504687794664306569369785134358990534116641373655972975320770778744429628254055229370221303254972e-4,461720.5283310071077288508935396119425152068658617647179511953438721693747100814184360491463793889039,0.9999727749531220533569343063021486564100946588335862634402702467922922125557037174594474707528583518
+0.216575062950141727924346923828125e-5,0.216575062950141727924346923828125e-5,12.46534797873423664682712357366176987162472172738379809193584747614716729169916499965524978602165451,0.2699686898069866664183548452276314691424700035617881842498407894456650352425582613848998322249744459e-4,461720.6336882947356173806377098379923281846797213576373845953809106090753189254049221386869201652476,0.9999730031310193013333581645154772368530857529996438211815750159210554334964757441738612764307485453
+0.216575062950141727924346923828125e-5,0.2382325646976823918521404266357421875e-5,12.37004071696991805388122752478307298700621276058091950265758048467078476384585545609003052590305182,0.2679045696050075721547716691574204592244930158617242358470809118887179680331039379286281767451411551e-4,461720.7289955564999359735836058868710250692982303244402631846591776005517014532582316822521394253662,0.9999732095430394992427845228330842579540775506984138275764152919088111282031966896062069053683368566
+0.216575062950141727924346923828125e-5,0.43315012590028345584869384765625e-5,11.77222202288641210205964167726460731035184670773110091246245945382178746024664362553109279728970161,0.2549572912892171401404180030095052432599185661069912133627122154282800848058328121324720391504851142e-4,461721.3268142505834419254051917343894907459525963772900817748542986314006987568574435128110771539796,0.9999745042708710782859859581996990494756740081433893008786637287784571719915194167187865320972916923
+0.216575062950141727924346923828125e-5,100.0,0.3683634579017030862943995949753137846949736979296757741127256914376144677962154307133740093495808363e-45,0.7977843881466350722692047722021738976382706440159930605192038431116437783506465250207545631610617926e-51,461733.0990362734698540274648334116540980563044430846528192294150549989280866221287773176113335726772,0.999999999999999999999999999999999999999999999999999202215611853364927730795227797826102361729355984
+0.72700195232755504548549652099609375e-5,0.7270019608540678746066987514495849609375e-7,15.85873131324027603680994500593701083673995551510827497457378784799406402441597983944788065984676601,0.0001152937700708314574190375921633958573930633611632172214032709001883959995018869165672190219989383104,137534.7765154773198155043727784530103263311602038221971826660153368209797591918890572085146268195923,0.9998847062299291685425809624078366041426069366388367827785967290998116040004981130834317859606150677
+0.72700195232755504548549652099609375e-5,0.363500976163777522742748260498046875e-5,11.94712370377855206849356853972802387128008268591504291389545599044297977188193456270625002844103574,0.868561870495419015631694962376837056380169046553848836742030704855372577688384839675927895023169524e-4,137538.688123086781539472689154919219313296620076651390414726693668678530843444423102485256257450998,0.9999131438129504580984368305037623162943619830953446151163257969295144627422311615160316563336632746
+0.72700195232755504548549652099609375e-5,0.654301766189746558666229248046875e-5,11.35939219617933366143120008086493854405691096926337486689608980095578074772077473924953323650483309,0.8258334958467143799950171794348266133126127344865110178937324906877842427949992341364148713573494716e-4,137539.2758545943807578797515233780823986238432483680420827736930348680180424685842623087129742429342,0.9999174166504153285620004982820565173386687387265513488982106267509312215757205000765856443189256825
+0.72700195232755504548549652099609375e-5,0.72700195232755504548549652099609375e-5,11.25404152411781013189063221030791950069213486896481451201744166449599357258178579846150790743580515,0.8181744492801532375947886460140903722510746521679776491443785314602565395703504194717704954065827439e-4,137539.3812052664422814092920912486394176672080244683406431285716830044778296437232512495009995720032,0.9999181825550719846762405211353985909627748925347832022350855621468539743460429649580521153319173109
+0.72700195232755504548549652099609375e-5,0.7997021384653635323047637939453125e-5,11.15874024755388081703378542276070157549981458020172273054652486564002395885863126609049696032298202,0.8112459987940510325956129320339107435160215638035605125726023380005315176840924661421761839904966304e-4,137539.476506543006210724148938036186635592400344757103734910042599803333799257446405781872010519116,0.9999188754001205948967404387067966089256483978436196439487427397661999468482315907533850807112287131
+0.72700195232755504548549652099609375e-5,0.14540039046551100909709930419921875e-4,10.56095948655061168623605418003161853323578819344933772554926100916849496396397890725434425870422914,0.767787038395159161757367222671493221399764679021626603575413867936745207659445426399210347886488265e-4,137540.0742873040094798549466692789157186346643711438561199150398636598053282523410581407081632207348,0.9999232212961604840838242632777328506778600235320978373396424586132063254792340554573594146049528292
+0.72700195232755504548549652099609375e-5,100.0,0.3683721352040578625035542191213058231001385172015235695102827758219171635643319097964745619715389846e-45,0.2678083852852675296525747931813028293308341797284316939479666731722330013321908997535126058327254522e-50,137550.635246790560091541182723458947337167900159336937085505385066806470268997183732405754158996547,0.9999999999999999999999999999999999999999999999999973219161471473247034742520681869717066916582027157
+0.14000004739500582218170166015625e-4,0.14000005421621608547866344451904296875e-6,15.20267805917854753815628244090214839667049079013284121307207600981527369429051379479050029246563141,0.000212839284799294089771515202962972979787263184811743923962510356993572455648372128284605839985121416,71412.76736757672594226777131614926452425899670482796435759812610549247602601578025739683076592211497,0.9997871607152007059102284847970370270202127368151882560760374896430064275443516278717135571888613995
+0.14000004739500582218170166015625e-4,0.70000023697502911090850830078125e-5,11.29141909326230883966958875900019584358646658107430454213881289111615105204428414548153264983317026,0.0001580811982483630764639288404865989626895654210675549296284020672607670587485524042452843453497320055,71416.67862654264218096625800983116647681208072903702289426905936861117514865802648704613973356474743,0.9998419188017516369235360711595134010373104345789324450703715979327392329412514475957533488014886493
+0.14000004739500582218170166015625e-4,0.126000040836515836417675018310546875e-4,10.70373329082055239449657483518606481142874325545821945131987913327529111609288538115779787067004457,0.0001498535277424495070345925587342959337960485628714949943651616208608914719572016270715187995841055091,71417.26631234508393741143102375498060784423845236263897935987830236901600859397788581046346834391056,0.9998501464722575504929654074412657040662039514371285050056348383791391085280427983729271849847834439
+0.14000004739500582218170166015625e-4,0.14000004739500582218170166015625e-4,10.59839072270521094524351095575880524386997946950893653234037834073484898520661255840222881734977303,0.0001483787193718905056334122230314149572977420671679956361699029601390606768301478556951013052574995591,71417.37165491319927886068408763440786741179721614858826227885780316155645072486415863321903739723083,0.9998516212806281094943665877769685850427022579328320043638300970398609393231698521443036151408736946
+0.14000004739500582218170166015625e-4,0.1540000448585487902164459228515625e-4,10.50309683838772573125941726421973020244283911278816693802809721877148404719015973281760898508378721,0.0001470445937589604281730698265658277177395861433369834394530184624954932090593614476786270573218152004,71417.46694879751676407466818132594694245322435650530903187317008428351981566288061145880365722949682,0.9998529554062410395718269301734341722822604138566630165605469815375045067909406385523201008427606316
+0.14000004739500582218170166015625e-4,0.2800000947900116443634033203125e-4,9.905362625758730832950380165732997088838389659552109844584580076431198316831313148705327140762918642,0.0001386762443259988347965664731737503432671106791399389549124501709095361518293591970133145764479534118,71418.06468301014575897297721842443367556682880595854508896661360142586010139323945804291593907381769,0.9998613237556740011652034335268262496567328893208600610450875498290904638481706408029854851689431666
+0.14000004739500582218170166015625e-4,100.0,0.3683835765509991294862982614804136847801099409567709282365033456679433396999382650467739713261291934e-45,0.515741349384052073532197492849381798262021063178704056359276164773687862416427823871341331934634477e-50,71427.97004563590448980592759859016667265566719561772881523464718237280500144859035812007682196294087,0.999999999999999999999999999999999999999999999999994842586506159479264678025071506182017379789368213
+0.17196454791701398789882659912109375e-4,0.1719645439379746676422655582427978515625e-6,14.99669319731847902681516901432820497411594146304800437538380922933153677323336904126149912001708466,0.0002578925163746625551575993078008476785681224051462033705263730458097938280913594746895087755902741312,58135.94699503091176460657656108692274293661971223570330985275344143300339644004833247949176315386748,0.9997421074836253374448424006921991523214318775948537966294736269541902061719086405253082653069983582
+0.17196454791701398789882659912109375e-4,0.85982273958506993949413299560546875e-5,11.0855947401242460358028130769947720703971405472239617885567410624616105500881617874679656184668242,0.0001906348209851726835515900888048454979817969614369117035420426388904830987287387166029562530382486766,58139.85809348810599759758891702425617584033851315152735243958050959987332266319353973328529665541774,0.9998093651790148273164484099111951545020182030385630882964579573611095169012712612833953952683876202
+0.17196454791701398789882659912109375e-4,0.1547680949443019926548004150390625e-4,10.49792985626979618498343837040865603489875493195003895029183893179584539788755762879245379872454632,0.0001805289680689213239964193315133342527700934346776491379903331398469127758468745331930792183429475664,58140.44575837196044744840829173084229187583689876680127527784541173053908781539414389196080847516002,0.9998194710319310786760035806684866657472299065653223508620096668601530872241531254668053590665666157
+0.17196454791701398789882659912109375e-4,0.17196454791701398789882659912109375e-4,10.39259104243131584787684932172789160220998254074606161008377922421908251753583638818731650795845545,0.0001787174959386796170171417214660036462509920156648633276951343784698577165443165555401638674670448533,58140.55109718579892778551488077952305630852567115800525261805347143811585069574586513256594576592611,0.9998212825040613203829828582785339963537490079843351366723048656215301422834556834444582899697797568
+0.17196454791701398789882659912109375e-4,0.189161000889725983142852783203125e-4,10.29730049288262983915572894419899582622032686300292319384286203571641340667613238799666075647570598,0.0001770788200461682436542865143285542655243668892838192491637975251267220026923230344308867743589514937,58140.64638773534761379423600115705195208451532683574839103429438862661851980660556913275660151740886,0.9998229211799538317563457134856714457344756331107161807508362024748732779973076769655675811316884015
+0.17196454791701398789882659912109375e-4,0.3439290958340279757976531982421875e-4,9.699587680807103601261622470650203003996266491733915126728166383320062295122274381742032062262985566,0.0001668001766714344289542290154568729225088539118597567100029557551304502067213839272724209870582841905,58141.24410054742314003213010763060074490673938720701739910140908427901487091815942713901123021162158,0.9998331998233285655710457709845431270774911460881402432899970442448695497932786160727261351659598326
+0.17196454791701398789882659912109375e-4,100.0,0.3683890108172782336916850566214648572490832360795647799218485822274949449073067860649358834823228436e-45,0.6335047850510686697307408415657771107469595030823606800328451826042509413873890781797682010954556142e-50,58150.94368822823024363339173010125094791073565369838292521731997242864324815666023716275797032750635,0.9999999999999999999999999999999999999999999999999936649521494893133026925915843422288925304049691764
+0.60085076256655156612396240234375e-4,0.6008507398291840218007564544677734375e-6,13.74160058590621974033625312730012610410136537881295930824709044545026889620745748440375184515969386,0.0008256937528942705699607849998658442771868595790970147844407880786142834291538660487838749299250098172,16628.74907799601202594084165196443464948382177535210832602381574808990587957874779370504510783318879,0.9991743062471057294300392150001341557228131404209029852155592119213857165708461339512089946743206323
+0.60085076256655156612396240234375e-4,0.300425381283275783061981201171875e-4,9.832513238723005633097631837924955082193825264175287541690476668759603163349480283667417317916510588,0.0005908077960576523146351736035109017568698260732630412794481689840933306317500101458272154249803039506,16632.65816534319524004808027325380982050572931546674599779037236186659654531160577090578144236043197,0.999409192203942347685364826396489098243130173926736958720551831015906669368249989854167671121737354
+0.60085076256655156612396240234375e-4,0.540765686309896409511566162109375e-4,9.245107859044843211173818163972984215461691665379384177706413383467141179757266030996728587384159573,0.0005555122750312157622728934347320953145866629704717469787356004622299329217492690713533177013194531898,16633.24557072287340247000408692776179137246144906554190115435642515188900729519798515845213109096432,0.9994444877249687842377271065652679046854133370295282530212643995377700670782507309286418719245451614
+0.60085076256655156612396240234375e-4,0.60085076256655156612396240234375e-4,9.139815195325465702058514116998788563501807142701475440765267106771579289880354623906060301361921934,0.0005491855379007642438464238237169830346760645732453909708238330810904250465776863793357928139140845955,16633.35086338659277997911939097473598702442133358821980989129757142858456918507489656554279937698656,0.9994508144620992357561535761762830169653239354267546090291761669189095749534223136206594511390163093
+0.60085076256655156612396240234375e-4,0.660935838823206722736358642578125e-4,9.044566393625459415121859073459850158828436398432103153348140456124938928569654963060372528875497449,0.0005434623079143664209121383555396154554432696531687514968083873931753596021393389520867990065129290215,16633.44611218829278626605604601827492542909470433248918217871469807923120954638559622638848714947299,0.9994565376920856335790878616444603845445567303468312485031916126068246403978606610479084940912271084
+0.60085076256655156612396240234375e-4,0.00012017015251331031322479248046875,8.447118325642176779371141162360900327601474944636635193409056350052051339196526154640029285169099398,0.0005075633502690321533981228019510321159233334164265252246066292012368729961569458832773514890373635888,16634.04356025627606890180676392937387526032166578628465013865378218530409713575872503480883039317939,0.9994924366497309678466018771980489678840766665835734747753933707987631270038430541167182498695001737
+0.60085076256655156612396240234375e-4,100.0,0.3684619332693842740366397112563557679129773136014184841391168077019097073523515211979175459196833086e-45,0.221398311337843792387906651823397378558814310863986769724390019581641709025448504005509468793646639e-49,16642.49067858191824568117790509173477558792314073055282339879345426131950876369889556444397301350545,0.9999999999999999999999999999999999999999999999999778601688662156207612093348176602621441185689136013
+0.000116783194243907928466796875,0.1167831896964344196021556854248046875e-5,13.0723722013825449744898100710193462792359716907703252698597158252004788687927453810442498996448669,0.001526736277332467809695602437123220235263581107362260605721933446410778907540799054028524584634579557,8549.226431769367830517097646440596109822685037794675407325303178003370324075052683729709571259703343,0.9984732637226675321903043975628767797647364188926377393942780665535892210924592009459582847131158751
+0.000116783194243907928466796875,0.583915971219539642333984375e-4,9.165749854253180926409802205477689189204018839063786945225902234841021037759656339096568352787215729,0.001070477691108208140608981919686359311648580961364237183752566991085173562551927909006291655595040755,8553.133054116497194565177654306137766912716990646381945649936991593729781906085772771657252806560994,0.9989295223088917918593910180803136406883514190386357628162474330089148264374480720909844363536076973
+0.000116783194243907928466796875,0.0001051048748195171356201171875,8.578658478262451685615326332573925102449459095256783298304689641438356262261613546923759105099506562,0.001001910663790910279977445274614486871801867310549409211969606741492792215683564431003801905795198654,8553.720145492487923805972130179041530999471550390188949296858204187132446681583815563830062054248703,0.9989980893362090897200225547253855131281981326894505907880303932585072077843164355689875150115471557
+0.000116783194243907928466796875,0.000116783194243907928466796875,8.473421634611367997218891715600607210314226082228594954553317127160311652789916356205949154787229542,0.0009896199406965141471241631575803399976897707371128530024174505270783175141644578049364631228025379822,8553.82538233613900749436856479601484889160678340321713764060957670141049129105551275454787200456098,0.9990103800593034858528758368424196600023102292628871469975825494729216824858355421950549593570405584
+0.000116783194243907928466796875,0.0001284615136682987213134765625,8.3782233269478559990432172622259390592758960016299563191319285312489835544646004154868362947800528,0.0009785016289156447435129559980555660843558508977079827560413401591820682591048119667241341447079291968,8553.920580643802519492544239249389517042645113483815776276030965297321819389380828695266984864568157,0.999021498371084355256487044001944433915644149102292017243958659840817931740895188033267383828035512
+0.000116783194243907928466796875,0.00023356638848781585693359375,7.781095695005977892942787662267736085116650989029568955515214759815343271383915268781534958881021346,0.0009087624565727032356397173210058719962540604705711151881320363859761981242119678619361453332751609037,8554.517708275744397598644668849347720016804358496416163639647679068755459672461513841972286200467188,0.9990912375434272967643602826789941280037459395294288848118679636140238018757880321380559716149212019
+0.000116783194243907928466796875,100.0,0.3685583578191641738102885449268264348666032848345216446320717264577480665695232465450804608746700508e-45,0.4304432328947056962621323115107149816375975950216664061390675433944389059467304308819915958797644574e-49,8562.298803970750375491587456511615456101921009485077174237343729654760514398918602749427713618803923,0.9999999999999999999999999999999999999999999999999569556767105294303737867688489285018362402404978334
+0.000149052008055150508880615234375,0.14905200487191905267536640167236328125e-5,12.82591299746853564780110293902388174831655823815863925015513487528138181275844026445097264307240789,0.001911892535376961605983536062691480293914244401543544143477023382264412065499890086163749263164473714,6695.664632439852437033167401705228498509464571792463308993994675330823833233030981151177831147347796,0.9980881074646230383940164639373085197060857555984564558565229766177355879345001099138197285204982504
+0.000149052008055150508880615234375,0.745260040275752544403076171875e-4,8.92063961729477488038309863232250613118874207958871869969383909765235132049465342609921076122509333,0.001329753624436724272362880267554856885879507745235091597946684888456099795023059019598671447543247654,6699.569905820026197800585406011929874126592387951033229544455971108452863725294767989529593029195111,0.9986702463755632757276371197324451431141204922547649084020533151115439002049769409803898068354501711
+0.000149052008055150508880615234375,0.00013414680142886936664581298828125,8.3337189144549510455177521460598951321921957899653410630788260012547864560952328857614541672987351,0.001242264389881715600481292828695385168054450509254023087812967207616643457676123648814990083256489705,6700.156826522866021635450752498192485125588934240656607181070984204850428589694188529867349623121469,0.9987577356101182843995187071713046148319455494907459769121870327923833565423238763511742397211532327
+0.000149052008055150508880615234375,0.000149052008055150508880615234375,8.228512348380456936136461223589742428679018610277749064505318060775217626194556265242838588467072322,0.001226581791037472050906377105104480090337804907220777113643310236584122671925661721709200437517198241,6700.262033088940515744832043420662637829102111420344199179644492145329997419594865150385965201953132,0.9987734182089625279490936228948955199096621950927792228863566897634158773280743382782801640784253738
+0.000149052008055150508880615234375,0.00016395721468143165111541748046875,8.13334143308931556881479551947183001929658259457265424498945050928880024099500889443920832114991824,0.001212395154767130962760914267280408171755982125560476182798894925488893725331738066083379555809061714,6700.357204004231657112153709124780550238484547436049293999160359696816414804794412521189595469270286,0.9987876048452328690372390857327195918282440178744395238172011050745111062746682619339061068215377929
+0.000149052008055150508880615234375,0.00029810401611030101776123046875,7.536387988654402915813414189164240021039561217650163168049429265432893840755490975832852636611563383,0.001123410391295872653089055777548919613971431092152241499195370394003992076729423439392761956208297706,6700.95415744866656976515509045508814023674156881297178507610038094067232120503393043979595115380864,0.9988765896087041273469109442224510803860285689078477585008046296059960079232705765605974887889583636
+0.000149052008055150508880615234375,100.0,0.3686132475540991527791898043272195985514249652803170791010463586754863934818284125077493762437758491e-45,0.5494727093337053496710913137576219364357407661067643588527523279820194877649056864192383335403874864e-49,6708.490545437320972680968504644252380257781130030253334996595711053326025241462201874703127000145633,0.9999999999999999999999999999999999999999999999999450527290666294650328908686242378063564259233893236
+0.0003985252114944159984588623046875,0.39852520785643719136714935302734375e-5,11.82534165286607861284016769509361004518294908318135101712795122901946412642735323788024248212876687,0.004713780377457679352754002329823002072784290627147123193223268683119837404219601810061188267815974851,2496.849375017734120681094229641806145312755020869613516311155949460665435827634872677060984845276173,0.9952862196225423206472459976701769979272157093728528768067767313168801625957803981898980165379870503
+0.0003985252114944159984588623046875,0.00019926260574720799922943115234375,7.929812627478122406660341211111822337131184007547313038469023759514452459983191955701682556591959385,0.003160956888823837489122898688646882279549658778907627703745334068363254610215450042677662195629649791,2500.744904043122076887274056125787933020806785945247554289814876930170447494079033959239544770812981,0.9968390431111761625108771013113531177204503412210923722962546659316367453897845499572948941151671463
+0.0003985252114944159984588623046875,0.000358672696165740489959716796875,7.34410881241020574238958926442583214740343491562664173285216266962784416146682424379465797129069188,0.002927485482118213924172628917447962850896548713128960074590118601215267929980173386835526831989028036,2501.330607858189993551544808072473923210534535037168225595431738020057055792595401671146569356114248,0.9970725145178817860758273710825520371491034512868710399254098813987847320700198266131390369153743512
+0.0003985252114944159984588623046875,0.0003985252114944159984588623046875,7.239118403480033821563601840293710511746459940926763489256499924585445043085863997188056523312207318,0.002885634536584107194486046522975616601739423417237144172322524987519690841104229473232686216140080694,2501.435598267120165472370795496606044846191510011868103839027400765099454910976361917753170804092733,0.9971143654634158928055139534770243833982605765827628558276774750124803091588957705267422373745103062
+0.0003985252114944159984588623046875,0.0004383777268230915069580078125,7.144143015013571403969513236431739620833436615553467894701051331470534067868827633079037374020859175,0.002847775746907098186160050696011596070720694057886760815244156823319827619119980079296297558945183091,2501.530573655586627889964884100468015737104533337241399433582849358214365886193398281862189953384081,0.997152224253092901813839949303988403929279305942113239184755843176680172380880019920678951549591255
+0.0003985252114944159984588623046875,0.000797050422988831996917724609375,6.548431941579626590096309850874953360834389096936048320349744133280280687230312968061949222223000232,0.002610315278447263086359249361497287320377469666963091227205296128546697951443408056256761969182627094,2502.12628472902057270383808748602480199710358085585881900793415655640461926683191294687927810518194,0.9973896847215527369136407506385027126796225303330369087727947038714533020485565919437205288747175992
+0.0003985252114944159984588623046875,100.0,0.369037881200369694291732341218443782419461060966120489770537804029279942322658075462328388114400921e-45,0.1471047157879998510604919985587903650436826333234689456068351855902051506097277723167553993658512991e-48,2508.67471667060019929393439733689975535793796995242582944708353099539316761284378215409254749657258,0.9999999999999999999999999999999999999999999999998528952842120001489395080014412096349563173666765311
+0.00063875340856611728668212890625,0.63875340856611728668212890625e-5,11.33900744119970074154938058757495806266712693522488946278408447204030265191463930183154316299193179,0.007245498134783457873763633175853087093182466309113106071535298453471078304367228977173631314813688396,1553.633783975933591682506820225378510916043075383315698460597005482261326677785092660636323807320736,0.992754501865216542126236366824146912906817533690886893928464701546528921695632771022763587061785862
+0.00063875340856611728668212890625,0.000319376704283058643341064453125,7.452215932648408787122305750038079639161187565070604238440976491942121256760535147549706194063144187,0.004761882106525434937029618145105976223121874387923607690605731984066139837400203035300951085748853616,1557.520575484484883636933895062915389339549014753469983684940113462359508072939196814918160776249524,0.9952381178934745650629703818548940237768781256120763923093942680159338601625997969646576419064162296
+0.00063875340856611728668212890625,0.000574878067709505558013916015625,6.867587963770300474981909290374802856251529829263364846236198065191668678548248203491919863670523861,0.004388311414380232305597584145250441546231315049827691163830841789050650860426759745835867266437627494,1558.105203453362991949074291522578666122458672489277223077144891889109960651151483758975947106642144,0.9956116885856197676944024158547495584537686849501723088361691582109493491395732402541259407677630615
+0.00063875340856611728668212890625,0.00063875340856611728668212890625,6.762788423834918432298633441926342277122075359218380456582909518543396385211313757248095465488869595,0.004321345687876781288916411414922912587279792102939472551261831986855345208431327195583192233166517682,1558.210002993298373991757567371027126701588126959322207466798180435758232944488418205219771504823799,0.9956786543121232187110835885850770874127202078970605274487381680131446547915686728043791921246863752
+0.00063875340856611728668212890625,0.000702628749422729015350341796875,6.667985693060746123028839467410531762349362614430057379130705432578838031571448663862082422639980508,0.004260767809913596138825870400992498500678885539113946756949297476950579901550678272725026564985441717,1558.304805724072546301027361345542937216360839704110530544250384521722791298128283298605784547672688,0.9957392321900864038611741295990075014993211144608860532430507025230494200984493217272378791411107008
+0.00063875340856611728668212890625,0.0012775068171322345733642578125,6.073373332949844197435641829764176238961560470669251834902939457628333551317855309876682675839362196,0.003880817204144622179424763517390375783349194601184469336432621132901458462850631367079678328687376136,1558.899418084183448226620558983189292739748641847871336088478150496673295778381876652591184294473306,0.9961191827958553778205752364826096242166508053988155306635673788670985415371493686328864973265634669
+0.00063875340856611728668212890625,100.0,0.3694472410323591250558914787939423659848299480013090809584703811951613621686811845631038825666292493e-45,0.2360726289035432642931835256208859435643703367345898079567704817267591466340569110451892593983580926e-48,1564.972791417133292424056200812953468978710202318171140682348730829245737850905789609952246256839724,0.9999999999999999999999999999999999999999999999997639273710964567357068164743791140564356296632654102
+0.0010718167759478092193603515625,0.10718167686718516051769256591796875e-4,10.79753030490348580512959586666263753162166163888995228001371468647879516467928257205932258472971769,0.0115801252444873165343976168637232264497149877446461999994865252863961572630400084677037370875270495,921.621599621486328129410120868570456659090866283142017172949218577636418177047752320923134991289961,0.9884198747555126834656023831362767735502850122553538000005134747136038427369599915321957193754861771
+0.0010718167759478092193603515625,0.00053590838797390460968017578125,6.925604325237507242456803509902997408800829650619206779185877969897006810003486199793342183086458978,0.007427565676161375768740897346652563253993371624296786216034259614693445522217353889373281204089342181,925.4935256011523066920829132253300967819116982714127626737770552942182065317235486931891153929332197,0.9925724343238386242312591026533474367460066283757032137839657403853065544777826461105619734461801008
+0.0010718167759478092193603515625,0.0009646351099945604801177978515625,6.342784984935700829992976879241734287565303087444222671111935506203703316966212883148935900791563806,0.006802504132917601577874216396132373031734379853351279792626734261568927207618936172705182172655394642,926.0763449414541131045467398559913599031472248345877467818509977579115100247608220098335216752281149,0.9931974958670823984221257836038676269682656201466487202073732657384310727923810638272354609783215098
+0.0010718167759478092193603515625,0.0010718167759478092193603515625,6.238306143511707249494326440714779793049143862986205228008813874816947545133284003139086942921297872,0.006690452762379717286790619756823062156410227396726664431656896575511097708499810427226870525102427047,926.1808237828781066850453902945183143976633840590457642249541193892982657965937508898433706330983808,0.9933095472376202827132093802431769378435897726032733355683431034244889022915001895727147385929795436
+0.0010718167759478092193603515625,0.0011789985001087188720703125,6.143793459584995340518564587913168407023113056295507853231542431502654675215884452365672897753080281,0.00658908988715195008184126631354098977003838506810365917095700116412101523338301929853973262544869406,926.2753364668048185940211521473199257836894148657364615997313908326125586665111504406167846782665984,0.9934109101128480499181587336864590102299616149318963408290429988358789847666169807014027503168683122
+0.0010718167759478092193603515625,0.002143633551895618438720703125,5.551028733614631441136079945563908235545435915614176767460896380550216784285428030962514558349729002,0.005953362125949581852682808924678013567301646657883961294154434209933452408736435231681831115962090178,926.8681011927751824934036367896691859551670920064177926855020368835649965574416068620199430176699497,0.9940466378740504181473171910753219864326983533421160387058455657900665475912635647682661322778848798
+0.0010718167759478092193603515625,100.0,0.3701863482966125637807009834686369616110976989170770830279898842911922994633419877963486551793694475e-45,0.3970171100263001544390324287018903201561376017683191023028076445923793733971044582745929822837954262e-48,932.4191299263898139345397167352330941907125279216617831046663207003345123582583979394101800761413619,0.9999999999999999999999999999999999999999999999996029828899736998455609675712981096798438623982316809
+0.00302191521041095256805419921875,0.30219152904464863240718841552734375e-4,9.670884523427657957178827825207640912463524823689696089247963977392906817722815715315768932319175677,0.02927539433052311514314216255008856965429587773324587314292120345867458704448957878192524315602858739,320.6708493655194561420245316058817520065052804372223350980607664213471368056830316577456339997583557,0.970724605669476884856857837449911430345704122266754126857078796541325412955510421217818433559045076
+0.00302191521041095256805419921875,0.001510957605205476284027099609375,5.858928105222976109133588154704940451689511531300336420106738180152772524944561558751766720038131745,0.01773596098878807048086285734381247131070843457470518036825401251096938206489388550259649817325956596,324.4828057837241379900697712763844524672792937296116947672019922185872710984612858143096362120393996,0.9822640390112119295191371426561875286892915654252948196317459874890306179351061144972474139238437218
+0.00302191521041095256805419921875,0.002719723619520664215087890625,5.283238685655406106020684922572791795541801156757024358477546251764271058409234063307784776411764904,0.01599325227078787122196055059176023367066905038451960746992431571969384434194896690688188812841831683,325.0584952032917079931826745085166011234270041041550068288311841469757725649966133097536181556657664,0.9840067477292121287780394494082397663293309496154803925300756842803061556580510330929771617201621888
+0.00302191521041095256805419921875,0.00302191521041095256805419921875,5.180022250992443098456572963282556906941511350140492757862696040032919389731579399244015058727596809,0.01568079875954710903689181324959728123587836662354167121109134448456551526408297367485485997505175671,325.1617116379546710007467864678068360120272939107715384294460343587071242336742679738173878733499345,0.9843192012404528909631081867504027187641216333764583287889086555154344847359170263250069039493536374
+0.00302191521041095256805419921875,0.0033241068013012409210205078125,5.08665155954614832816695020562558519856732388819313760834233943952276587339279488248698220462329858,0.01539814996931679640512162380521019618516324742657983782779919071422804833579404817772218506732349783,325.2550823294009657710364092254638077204014813727188935789663909592172777500130524905744207274542328,0.9846018500306832035948783761947898038148367525734201621722008092857719516642059518221420340391198634
+0.00302191521041095256805419921875,0.0060438304208219051361083984375,4.501174235431703607743793915757073362030162525535349963178890780962259995120753938138193741532333018,0.01362581161768948428002382983633363229931422314729661959844291873166388034825127448149335275571310275,325.8405596535154104914595655153323195569386427353766812241298396177777836282850934349232091905451983,0.9863741883823105157199761701636663677006857768527033804015570812683361196517487255183862614751267574
+0.00302191521041095256805419921875,100.0,0.3735329358894014290597755983828277403109000009585095691185899796962630068955920695468847481341579698e-45,0.1130747034266563940839653378009513670204434622477854366552695647743251468644841772118695732365306121e-47,330.3417338889471140992033594310893929189688052605384982514193289696802680250230196356206315849448808,0.9999999999999999999999999999999999999999999999988692529657334360591603466219904863297955653775221456
+0.00499413348734378814697265625,0.499413363286294043064117431640625e-4,9.09143174186392218206792714789936156812904780177882655511645754144008392955147525520112582681862457,0.0455339659818498517717554159843204991325968723648847552163487246073129995344092074225748777688535861,190.5712057162443534637401226274029819634962592814549820787079322695971581532795795007449751245225544,0.9544660340181501482282445840156795008674031276351152447836512753926870004655907925770231834121139608
+0.00499413348734378814697265625,0.002497066743671894073486328125,5.333963711356164951856899934737899395234655036721267980759368209113746040033645118790511921612526542,0.02671488155852542720348233893967370255631947969822798173340480476036001826163187326127585870850951479,194.3286737467521106939511498405644441363906520465125406530650216019234960427974096371555890297286524,0.9732851184414745727965176610603262974436805203017720182665951952396399817383681267384869280297806661
+0.00499413348734378814697265625,0.004494720138609409332275390625,4.764608103543422396273460767824913797680918211220254147530766736990032763475791527601286078974636713,0.02386329342435485410528915621892655527894975521180483827248315548180341266576066691682837163027671281,194.8980293545648532495345890074774297339443888720135544862936230740472093193552632283448148723665423,0.9761367065756451458947108437810734447210502447881951617275168445181965873342393330829593753788794447
+0.00499413348734378814697265625,0.00499413348734378814697265625,4.662511603034318364168528096863620509671749270448326278452821039711349440063013476125319687531537714,0.02335194837848704542317501479979960785677943859199818879547148696844760256087874240214563959245228623,195.0001258550739572816395216784387230219535578127854823553715687713258926427680412798207812638096413,0.9766480516215129545768249852002003921432205614080018112045285130315523974391212575976465832772595711
+0.00499413348734378814697265625,0.005493546836078166961669921875,4.570153968023475697973028726833585950462441863354771181689858907128424789689959379371679135045553744,0.02288937993710691762717340242447631479229364077362362993790510926817164659201098401309690294652813575,195.0924834900847999478350210484687575811628652198790374521345309039088172931410953765744218162956252,0.9771106200628930823728265975755236852077063592263763700620948907318283534079890159866993688366479582
+0.00499413348734378814697265625,0.0099882669746875762939453125,3.991154013512935049369200187919861138929383257565931837405545879976870092643426316924994579798069139,0.01998948859097551085592371345634047802657512403398820023558724073513120474144401325627472905378199928,195.6714834445953405964388495873824823926959238256678767964188439310603719901876284390211063715431098,0.9800105114090244891440762865436595219734248759660117997644127592648687952585559867435469258036936357
+0.00499413348734378814697265625,100.0,0.3769482555838579136592010864491944174085838190332996002822334124753414275598606857542089750306573573e-45,0.1887925855246434792730496837795316524181267413081017706657594232476888183287282829143324349246616454e-47,199.6626374581082756458080497753023435316253070828568603782405318973780409963818603402858604413590935,0.9999999999999999999999999999999999999999999999981120741447535652072695031622046834758187325869189823
+0.00928423367440700531005859375,0.92842339654453098773956298828125e-4,8.32766758281048418780735292973223209604337085137833520544395327107364742252310003489523494741898463,0.07772597516178416795338408655014516648855152950494450081309343933563117399553230793294010541061578969,98.81370395323916382835676107678233359685726732004611689093914473336659824016357222231446793635237771,0.9222740248382158320466159134498548335114484704950554991869065606643688260044676920663617631519646603
+0.00928423367440700531005859375,0.004642116837203502655029296875,4.677052055182783950361462479187826891351644382410773636499047275642185592328110193550925652380952967,0.04365309112744655672435066251454637088986352549279301888821675817858136467846696401925340767241710544,102.4643194808668640658026515273267388015489937890136784598840507287980600703585620636587772313904094,0.9563469088725534432756493374854536291101364745072069811117832418214186353215330359803517078474026215
+0.00928423367440700531005859375,0.008355810306966304779052734375,4.119868713825767954507639185022242702497989461348359320156153154746091619273779670866706133311348331,0.03845264116709168479462783327141273082956462734885718329377983165867922002567451544279706791885230281,103.021502822223880061656474821492322990402648710076092776226944849694154043412892586342996750460014,0.9615473588329083152053721667285872691704353726511428167062201683413207799743254845568543313445203168
+0.00928423367440700531005859375,0.00928423367440700531005859375,4.019921519306157572967927141052306454797972293850429574819892281139435411660594998072654171327963586,0.0375197877502770480302210199949516089940305508088718070103011894688949231653096730082703479188234313,103.1214500167434904431961868654622592381026658775740225215632057233008102510260772591370487124433988,0.9624802122497229519697789800050483910059694491911281929896988105311050768346903269913893536931239148
+0.00928423367440700531005859375,0.010212657041847705841064453125,3.929508072902123437757774897504080575693994395736268934160771242632819260911881416743229201902800358,0.03667591721634783750587383327156302243799217393479799690498142709119028246928578208069198371104557265,103.211863463147524578406339109010485117206643775688183162222326761807426401774790840466473681868562,0.9633240827836521624941261667284369775620078260652020030950185729088097175307142179189752283062863023
+0.00928423367440700531005859375,0.0185684673488140106201171875,3.362962876825342551025582987367579337130892353710432880232450815972945791421066869679704070831109699,0.03138808873371396968047089077038353233395064458846974896064565363933813332400386490393294692476573265,103.7784086592243054651385310191469863557697458177140192161506471884672998712656053875299988129402526,0.968611911266286030319529109229616467666049355411530251039354346360661866675996135095781326500580384
+0.00928423367440700531005859375,100.0,0.3844857168704707606007207826703247070525704986636359420305976050073019330636593149686501224985731785e-45,0.3588583115543780419206393147274009793743086058135421976561276361251404038603301301046849133096950379e-47,107.1413715360496480161641140065145656929006381710399663795126272438395248800163475511113681489592739,0.999999999999999999999999999999999999999999999996411416884456219580793606852725990206256913941864578
+0.0241700224578380584716796875,0.000241700225160457193851470947265625,6.989567342457767291165813682115083248727717058265847893227551241610436479959394934663352244835979721,0.1712300864900691830809638583306832029813253539450049252077231783514842512094658469882268373944706235,33.83017109096958859719977396603901368488700926845493356384309385747826733839150788430927781670596628,0.8287699135099308169190361416693167970186746460549950747922768216485157487905341530101415161086734135
+0.0241700224578380584716796875,0.01208501122891902923583984375,3.645052082619493510754250102657795647363402619166810163394885759470165706667119548268590046156765514,0.08929631160092280070447033991155493817323429700259338574714854113985110677424714195589810307485385417,37.17468635080786237761133754549630128625132370755397129367575933961853811168378327070404001538518049,0.9107036883990771992955296600884450618267657029974066142528514588601488932257528580432426069697986838
+0.0241700224578380584716796875,0.021753020584583282470703125,3.121681115364872992249370429142630243919758769039445295540102139950204724424648880240696291300224489,0.07647479467454212823112470840782652796143400926368964944287913565960182578074431119624266771320275773,37.69805731806248289611621721901146668969496755768133616153054295913849909392625393873193377024172151,0.9235252053254578717688752915921734720385659907363103505571208643403981742192556888030189055833083723
+0.0241700224578380584716796875,0.0241700224578380584716796875,3.027690225756868892212711633036930400330173071117682435181204227694799527195760005172705581038071537,0.07417221035589703876248814311106669867021141835493692191966636116530191427281757861109726798229924587,37.79204820767048699615287601511716653328455325560309902188944087139390429115514281379992448050387446,0.925827789644102961237511856888933301329788581645063078080333638834698085727182421388186010844846675
+0.0241700224578380584716796875,0.02658702433109283447265625,2.942664605341138937082562074383595860306832724172044272497882818529802086726566077422282020376315413,0.07208925677317387450963942331401971774864863598173722366608932259553293193482061295798446137870319249,37.87707382808621695128302557377050107330789360254873718457276228055890173162433674155034804116563059,0.9279107432268261254903605766859802822513513640182627763339106774044670680651793870413184526090032108
+0.0241700224578380584716796875,0.048340044915676116943359375,2.41074817473566482145221784161961838217114178626157130000716892699054591244755314591797108724580003,0.05905839349429781950594739017608665222518690248510542891560361255106979598651410633025419940717016623,38.40899025869169106691336980653447855144358454045921015706347617209815790590334967305465897429614597,0.940941606505702180494052609823913347774813097514894571084396387448930204013485893669171551255748135
+0.0241700224578380584716796875,100.0,0.4118273612568114120065807345413501643158568873446145015743819726283523844643802566458722417876724156e-45,0.1008892700105018944978675108213807722934186311209931576611431317504181560003000532484582926238701235e-46,40.81973843342735588836558764815409693361472632630895409581383368708212308380955265504227989096454242,0.9999999999999999999999999999999999999999999999899110729989498105502132489178619227706581368879006842
+0.06227754056453704833984375,0.0006227754056453704833984375,5.398853673219018710862483990962030873762547549939303465609769883203068434312148164896365027156798183,0.3474560013087092846111301271350181153322167628923569217302635472598482984210909987319052934013456492,10.13938326292248918091803717140500686234141136932799736792065339615436856422024698064523810115224422,0.6525439986912907153888698728649818846677832371076430782697364527401517015789090012642543091559873733
+0.06227754056453704833984375,0.031138770282268524169921875,2.624621777840601468672742465553647526902424779628133001278346272637876820856672407823865884146425678,0.1689137441157049196929670663951454244447909282434660775658465961050462673597111095768335096934485378,12.91361515830090642310777869681339020920153413963916783225207700671956017767572273771773724416261673,0.8310862558842950803070329336048545755552090717565339224341534038949537326402888904212728334573946703
+0.06227754056453704833984375,0.056049786508083343505859375,2.162313294165328988202510718803524978627655348865636422277632922509021076722403194443007421877550004,0.1391607878713606352032987274631824194122117693300193732474663311578257858007756912177290988729444308,13.3759236419761789035780104435635127574763035704016644112527903568484159218099919510985957064314924,0.8608392121286393647967012725368175805877882306699806267525336688421742141992243087807016564848934745
+0.06227754056453704833984375,0.06227754056453704833984375,2.079041815599814320147626715140559656723511682076184551416263895975773589837334878234708586848491379,0.1338016548559650776876410841887370321781490089503796887164231224142746680182809514557714062729304056,13.45919512054169357163289444722647807938044723719111628211415938338166340869506026730689454146055102,0.8661983451440349223123589158112629678218509910496203112835768775857253319817190485427177825445887742
+0.06227754056453704833984375,0.068505294620990753173828125,2.003712420009585882584341039453708853317621415374573048462234158676614018214682470062007753415859851,0.1289536533806487659647983473729504724818872072493062222239213561417858309354665544217620992042013603,13.53452451613192200919618012291332888278633750389272778506818912068082298031771267547959537489318255,0.8710463466193512340352016526270495275181127927506937777760786438582141690645334455767799499356738501
+0.06227754056453704833984375,0.1245550811290740966796875,1.53441423129112475737524518331096500840725759515087388767695993717246997306190379676601324775586921,0.09875085813127999347876403213381417164850985029241959548600682134325557222950784960495023341689149482,14.00382270485038313440527597905607272769670132411642694585346334218496702547049134877558988055317319,0.9012491418687200065212359678661858283514901497075804045139931786567444277704921503939211327623995619
+0.06227754056453704833984375,100.0,0.491012558925029502038958259186637674187082070198644614704728540139757730717007602661319035304115905e-45,0.3160027491812458572459559308108164731267571181137289219138336973784283559240105100161042789885729545e-46,15.53823693614150789178052116236703773610395891877628827460539377731847873934575747152474911809627915,0.9999999999999999999999999999999999999999999999683997250818754142754044069189183526873242881886271078
+0.12234418094158172607421875,0.001223441795445978641510009765625,4.107633028355164744805499178379042539887472133455579773171056895053209516655909782745786364362480172,0.5330801041122809893124112359299492773161319212862964349749276702570415880581830814691555528860698043,3.597837494119984489847548621434082521137867680861747675331544830881957821265703839306715563836387709,0.4669198958877190106875887640700507226838680787137035650250723297429584119418169185234395265537106464
+0.12234418094158172607421875,0.061172090470790863037109375,1.936485981850182971451375681345119726702234863196777116823460031031266400004195740881376398203023874,0.2513131386593307540991640684543589236443925141145175751221147698677769739319418090600471325094999253,5.768984540624966263201672118468005334323104951120550331679141694903900937917417881171125529995844007,0.7486868613406692459008359315456410763556074858854824248778852301322230260680581909363951205060113066
+0.12234418094158172607421875,0.11010976135730743408203125,1.53816896265897443986409464099250739729409691824235216567496380983889196492551187328576895409782409,0.1996203811529064426596921912381727440618982217331183744501991772754181001205835601426286413225377901,6.167301559816174794788953158820617663731242896074975282827637916096275372996101748766732974101043791,0.8003796188470935573403078087618272559381017782668816255498008227245818998794164398545194112902246047
+0.12234418094158172607421875,0.12234418094158172607421875,1.466088111094671282794200828064019673740085117198127869023649937447605151191232298855822127351016404,0.1902658775759919254783410584245027757110291178093905520960858364206883179566070806285394901876464333,6.239382411380477951858846971749105387285254697119199579478951788487562186730381323196679800847851477,0.8097341224240080745216589415754972242889708821906094479039141635793116820433929193687362864076535596
+0.12234418094158172607421875,0.13457860052585601806640625,1.400881043051031737065670764700271767545156491544346318989223397553252185517998812020194463448278763,0.1818034393830944269473777475699449060079741042819292252135731778565926538411797911185361027107102345,6.304589479424117497587377035112853293480183322772981129513378328381915152403614810032307464750589118,0.8181965606169055730526222524300550939920258957180707747864268221434073461588202088788552178361301191
+0.12234418094158172607421875,0.2446883618831634521484375,0.99729395709067241735766067751443046709332587714511939610752695882967697915408677511463530479783466,0.1294267435300397349603572970957870869630942140868148552925934774957263859825167016525201561153885356,6.708176565384476817295387122298694593932013937172208052395074767105490358767526846937866623401033221,0.870573256469960265039642702904212913036905785913185144707406522504273614017483298345586302346735954
+0.12234418094158172607421875,100.0,0.6478611415197960360753281775792439832263535501609430361693974315110165286653233546268382397444183374e-45,0.840780766898178008869243443837877352348032400258965863581678185676534322639265269047427246718208775e-46,7.705470522475149234653047799813125061025339813669466306982805689859839160342369638932330721638712915,0.9999999999999999999999999999999999999999999999159219233101821991130756556162122647651967599741034136
+0.249557673931121826171875,0.002495576627552509307861328125,2.734855898436444538960197568353345302797643920782849867350472698862801247231931660276599701395230536,0.7529056368605864071477954107757553871130981376578315260167339297055082424891270839650389931798900742,0.8975460448403471907260352889952074418600755755686656141024711031215454179607615030145266344852466741,0.247094363139413592852204589224244612886901862342168473983266070294491757510872916018279343723885963
+0.249557673931121826171875,0.1247788369655609130859375,1.306037037931325273110975961858785853889497163910375544775166642973791438732260951219539444462276157,0.3595519048624747086399495819773797417369647630495458043003775292793755251130963726432952726923473251,2.326364905345466456575256895489766890768222332441139936677777159010555226460432212071586891418201053,0.6404480951375252913600504180226202582630352369504541956996224707206244748869036273485294401209486908
+0.249557673931121826171875,0.22460190951824188232421875,0.9885007575877314066316087571272734600340200679794221131391294101259479058115424831901932604404540439,0.272134189174010942792674792979994779607650072007003386385396071326733875426150437485572609245441222,2.643901185689060323054624100221279284623699428372093368313814391858398759381150680100933075440023166,0.727865810825989057207325207020005220392349927992996613614603928673266124573849562508142534216676462
+0.249557673931121826171875,0.249557673931121826171875,0.9304697144207498511786181051137991461677681312267180398489822962468753694437254969284556768438195259,0.2561582470637521534054660006356217865146657410166091897536349301024895988045117668110852797208631096,2.701932228856041878507614752234753598489951365124797441603961505737471295748967666362670659036657684,0.7438417529362478465945339993643782134853342589833908102463650698975104011954882331829753476099553385
+0.249557673931121826171875,0.2745134532451629638671875,0.8779709241956378784576011912540914136437534750787434695660536599649324901601121739182438383623023227,0.2417053338000419192707989657345748364586452241630348852579539371629114370069908716417725859412519299,2.754431019081153851228631666094461331013966021272772011886890142019414175032580989372882497518174888,0.7582946661999580807292010342654251635413547758369651147420460628370885629930091283526005893666361667
+0.249557673931121826171875,0.49911534786224365234375,0.5574820380397203326014285069632281249087055106561841394270302097686210563673830228776534924132712701,0.1534747659387098248433194606279114074359802765577343833076334934826433282648710371337205904567250712,3.07491990523707139708480435038532461974901398569533134202591359221572560882531014041347284346720594,0.8465252340612901751566805393720885925640197234422656166923665065173566717351289628625605936378764203
+0.249557673931121826171875,100.0,0.1165337414094056672186119633118372326386267415447466476909140907381699722823700492455473836872619049e-44,0.3208173082967809365334248788561654088276764416394031356193657910033720148158538043442309513458402166e-45,3.632401943276791729686232857348552744657719495186178067358887129798227032074320836984863090598461107,0.9999999999999999999999999999999999999999999996791826917032190634665751211438345911723235583605968644
+0.4912221431732177734375,0.0049122213385999202728271484375,1.654360476952788395565091483618429332080299510750906167043467749622058646861070307300335318412492263,0.9172475617092936111196120635221962448847409686540639143040750236326102528158054772151362150352426506,0.1492534502075985265254821470991394670727200544207034025295844784011311472281284530845095489966979154,0.08275243829070638888038793647780375511525903134593608569592497636738974718419452273806179935283266554
+0.4912221431732177734375,0.24561107158660888671875,0.8591102891364148659027227687752104865250632846967394109711640330263828509348316936924987093062755665,0.476327154164860371328269663275900029881429197034646391173478221112698601696158930860391522911504252,0.9445036380239720561878508619423583126279562804748701586018881949968069431543670666923461581029146122,0.5236728458351396286717303367240999701185708029653536088265217788873013983038410691144755392478034605
+0.4912221431732177734375,0.44209992885589599609375,0.6151178843458194174576092293340509371826806145099227504262259297702119124452239873890995638580032157,0.3410474243311383959956637270830648167641642947404114286685244577963240267359788030092208093550646792,1.188496042814567504632964401383517861970338950661686819146826298252977881643974772995745303551186963,0.6589525756688616040043362729169351832358357052595885713314755422036759732640211969722945795273623916
+0.4912221431732177734375,0.4912221431732177734375,0.5696915887013141088174202631037187419431943497165285167734537828276643143969487860883316475196393758,0.3158611608185115269548389922894588565147765052878731444901294260986877976956018409426455682815368615,1.233922338459072813273153367613850057209825215455081052799598445195525479692249974296513219889550803,0.6841388391814884730451610077105411434852234947121268555098705739013122023043981590401076003404885869
+0.4912221431732177734375,0.54034435749053955078125,0.5285934290336277553075270335394255189292301783737569951938668837616709360843073189655358789025981993,0.2930745993217330165245425923025781279614684690077922116097918659269501459755406822478769969035730411,1.275020498126759166783046597178143280223789386797852574379185344261518858004891441419308988506591979,0.7069254006782669834754574076974218720385315309922077883902081340730498540244593177359960180244233096
+0.4912221431732177734375,0.982444286346435546875,0.2840949896471148762646748327771540499572296357001660825805477398020758104810139640515864061811464973,0.1575143024618325882485702491499773354535427586337804671901697458836454362130580896667998615293610026,1.519518937513272045825898797940414749195789929471443486992504488221113983608184796333258461228043681,0.8424856975381674117514297508500226645464572413662195328098302541163545637869419103237352685973826595
+0.4912221431732177734375,100.0,0.3554786780644470172552623900210476078762607526788722652651577627104786882801695535346500111600654028e-44,0.1970924446253934735193962102664889638137156599937937647683125163235828436518801020510525753999891377e-44,1.803613927160386922090573630717568799153019561616822788928582055470565893878722681713985119354332036,0.9999999999999999999999999999999999999999999980290755537460652648060378973351103618628434000620623523
+0.98384749889373779296875,0.00983847491443157196044921875,0.9988627703376965237021282483793283998958511662235079530457860091340880858661589398735141371653418962,0.9893791586391959313589247995867868787348704739765968058480672722518142355189894108676067042917022123,0.01072264655297708483400968644738690067844313845477925107578282358701250620425937737438075951870309101,0.01062084136080406864107520041321312126512952602340319415193272774818576448101058913239329570829778771
+0.98384749889373779296875,0.491923749446868896484375,0.6092841483114124309606554974477512970242795125141354196975395333574148201355701398796169799203828208,0.6034993553966824361696793594754562688154817234268946517170502520522596302645039728904190384003204218,0.4003012685792611775754824373789640035500147921641517844240292993636857719348481773682779167636621665,0.3965006446033175638303206405245437311845182765731053482829497479477403697354960271095809615996795782
+0.98384749889373779296875,0.88546276092529296875,0.4090488446933753077167583163878605357381346851487584297426423518534657760013638063743341546240144908,0.4051651676518526351128802614745574331465937506756696788008839074828702248424459073625363030514551146,0.6005365721972983008193796184388547648361596195295287743789264808676348160690545108735607420600304965,0.5948348323481473648871197385254425668534062493243303211991160925171297751575540926374636969485448854
+0.98384749889373779296875,0.98384749889373779296875,0.370352431136295781883241851603824005715411835471534212594866883768994404183305967159443941476563169,0.3668361536727710626418137759953048564646661886226762568753671876280942811281119959409899282486354536,0.6392329857543778266528960832228912948588824692067529915267019489521061878871123500884509552074818182,0.6331638463272289373581862240046951435353338113773237431246328123719057188718880040590100717513645464
+0.98384749889373779296875,1.0822322368621826171875,0.3353386097516048155638557121765199286100693157994542409937828613902311332455629133376101988149887739,0.3321547678297319321701307848633371126400118606682421587463162459345433014494656069902585162974731598,0.6742468071390687929722822226501953719642249888788329631277859713308694588248554039102846978690562133,0.6678452321702680678298692151366628873599881393317578412536837540654566985505343930097414837025268402
+0.98384749889373779296875,1.9676949977874755859375,0.1374456065246148925738161274489277202177338705969611840951631495244789172170178267868315457496175863,0.1361406417179841828721837185359700588250311762493488349478929164181504739415138270580364665878073599,0.8721398103660587159623218073777875803565604340813260200264056831966216748534004904610633509344274009,0.8638593582820158171278162814640299411749688237506511650521070835818495260584861729419635334121926401
+0.98384749889373779296875,100.0,0.3452847132913471123339782092778794628523602411114956589875948413226849655169889160387754015183450938e-43,0.3420064389942920918464788466469587061537101076570447060697029713782114356144525921674493801168521542e-43,1.009585416890673608536137934826715300574294270149815874986857599323279664282472032205022641488524436,0.999999999999999999999999999999999999999999965799356100570790815352115335304129384628989234295529393
+1.1576130390167236328125,0.011576130054891109466552734375,0.9256421169095858964029301012199937902219788931701720231034368949393485801630195398677134263886026542,0.994711272355762893770783882299118342770777920879617312700765732169002110231728502249141741960716454,0.004921497512314303093748497028932256375056038682779382028278912930555847281468235433106618722412350468,0.005288727644237106229216117700881657229222079120382687299234267830997889768271497750858258039283546044
+1.1576130390167236328125,0.57880651950836181640625,0.5898199377042372764725164622792169813101707344512639726836827769831046554014123519743007640856210835,0.6338308618166365458438457471248494940233093454055343682264493234958418241433155604354114804552093074,0.3407436767176629230241621359697090652868641974016874324480330308867997720430754233265192810253939211,0.3661691381833634541561542528751505059766906545944656317735506765041581758566844395645885195447906926
+1.1576130390167236328125,1.0418517589569091796875,0.3899068736873002418750206980191563744217320493025424515359275118372274765769144292842706093645450701,0.4190007729127949034485352250754240449758795081655081429524194713873364359023428994156614130045024835,0.5406567407345999576216579002297696721753028825504089535957882960326769508675733460165494357464699345,0.5809992270872050965514647749245759550241204918344918570475805286126635640976571005843385869954975165
+1.1576130390167236328125,1.1576130390167236328125,0.350767915499064649485116118680747323698244021478097988905881585794790293404432604891991000560468547,0.3769413611953594115041815918132996991722140466616286497556462452737080861937062742763079967763701127,0.5797956989228355500115624795681787228987909103748534162258342220751141340400551704088290445505464577,0.6230586388046405884958184081867003008277859533383713502443537547262919138062937257236920032236298873
+1.1576130390167236328125,1.2733743190765380859375,0.3153521200099001873943766180507653607009584099715487823224479529882689797923352470224098694307293263,0.3388829254900626423204433612535434055758034744381629523496573224770360495563296638079271945520351657,0.6152114944120000121023019801981606858960765218814026228092678548816354476521525282784101756802856783,0.6611170745099373576795566387464565944241965255618370476503426775229639504436703361920728054479648343
+1.1576130390167236328125,2.315226078033447265625,0.1186902112825402522994923149641941909087538887549201440624759116624595999596336065139636354107987151,0.1275465851480502036698050289887457969069182012601624005433841921900918431336574265313409489417907447,0.8118734031393599471971862832847318556882810430980312610692398962074448274848541687727822253074644156,0.8724534148519497963301949710112542030930817987398375994566158078099081568663425734686590510582092553
+1.1576130390167236328125,115.7613067626953125,0.1125471317451553626979291490952714679039247813920695733726819688247553286279469203175901885989118597e-49,0.1209451240096827928951168363517962662830507405737678256582015888878404748097196285315499859596572706e-49,0.9305636144219001994966785982489260465970349318529401504185412923336346345295782481540296526328757977,0.9999999999999999999999999999999999999999999999999879054875990317207104883163648203733716949259426232
+3.451677799224853515625,0.0345167778432369232177734375,3.152051752007051901166677804203242451762158932058734082278419046998808021620902707379856486480431286,0.9999991955246725226796507081898210659844067334505908025827252502575654996195689165971232425140116816,0.2535749905369569950519775399176363360986595319689620087450384044106920459237659816391116922493578419e-5,0.8044753274773203492918101789340155932665494091974172747497424345003804310834028767574859883184061715e-6
+3.451677799224853515625,1.7258388996124267578125,2.625317365863687824812627271478283212231574859428744298986298851145912049982847565646684436084768396,0.8328909105597599735546579291952392864992718070378324576497708372302859905131261368260237112268348005,0.526736921893269445924001052500358415893945059225309472912207646236940078558514379392988441512585384,0.1671090894402400264453420708047607135007281929621675423502291627697140094868738631739762887731651995
+3.451677799224853515625,3.1065099239349365234375,1.589096467859943405010524166882944076166569421609944233676376552350973263160710964065506274491283582,0.5041462877185294515224518878604444421797451280508405361038884763922328387930556371432063861495038906,1.562957819897013865726104157095697551958950497044109538222129945031878865380650980974166603106070198,0.4958537122814705484775481121395555578202548719491594638961115236077671612069443628567936138504961094
+3.451677799224853515625,3.451677799224853515625,1.350290495171821953838340461553337413581637247730634253229478654476521826150332482913374175912005858,0.4283842763801844892410352502765636860105928311306069364749108915416602584803704173813954261741978146,1.801763792585135316898287862425304214543882670923419518669027842906330302391029462126298701685347922,0.5716157236198155107589647497234363139894071688693930635250891084583397415196295826186045738258021854
+3.451677799224853515625,3.7968456745147705078125,1.134077301013503806882153483536082811051446330041171509406405665769753434166535549993226681832102034,0.3597899012775341280702093141512305124768832773509499020760489759930518624437955917851941007256656217,2.017976986743453463854474840442558817074073588612882262492100831613098694374826395046446195765251746,0.6402100987224658719297906858487694875231167226490500979239510240069481375562044082148058992743343783
+3.451677799224853515625,6.90335559844970703125,0.1643170852637424266478964826850139891761923703977839179733380352749736866481876905951480241402650871,0.05213015711752623288278480275503274357544910148149545174167877455197749799469290173575128397737013009,2.987737202493214844088731841293627638949327548256269853925168462107878441893174234123961372842906391,0.9478698428824737671172151972449672564245508985185045482583212254480225020053070982642487160226298699
+3.451677799224853515625,345.16778564453125,0.2094375381886948717861051084009603807754176504974680675036172416728378934319220506494587623990168143e-143,0.664447750795984359222246924280149097055745898182376868957852076547683340115261880156857453610755197e-144,3.15205428775695727073662832397864162812551991865405377189850649738285212854136194503967287759735378,1.0
+7.88237094879150390625,0.078823707997798919677734375,3979.809715367829047317888278217078172088596385172406763852068810521047011695645283607170253028037074,0.9999999999999402750339496456027526821626813759697286540308097229106466855237479103143755044174425076,0.2376940001372283829873284341281247837900028022641285834769024728477627559837726794234465024502746176e-9,0.5972496605035439724731783731862403027134596919027708935331447625208968562449558255749243794404123413e-13
+7.88237094879150390625,3.941185474395751953125,3770.434705915005921151777453704734300721493282509257897039293817864056202120074644227549385383332761,0.9473906984435568457877010097722005184357730540525580221847386845401637090240954581293899228317354176,209.3750094530608201662480528953311998012312274469388696150391212404677120484184021356046403241277591,0.0526093015564431542122989902277994815642269459474419778152613154598362909759045418706100771682645824
+7.88237094879150390625,7.094133853912353515625,2259.504281494144548802134149761741281397123723859500278361177114338408775457230422494994047506279229,0.5677417874450255416764749800116738757724089360970458845040997629985530966419312906823519377101045892,1720.305433873922192515891356838324219125600786096696488293155824766115138711262623868159978201181292,0.4322582125549744583235250199883261242275910639029541154959002370014469033580687093176480622898954108
+7.88237094879150390625,7.88237094879150390625,1801.305322480575109423269546102081216632945730622638691742482596740773256796125713409226748012793032,0.452610916427692594928188307753651727326624609223935469952605541382505774069746156183685426638227764,2178.504392887491631894755960497984283889778779333558074911850342363750657372367332953927277694667488,0.547389083572307405071811692246348272673375390776064530047394458617494225930253843816314573361772236
+7.88237094879150390625,8.6706085205078125,1385.998701155253760411361595025274476495767659154297495548279381040684682649756307239204160729721891,0.348257529952552454187438695468007855109544707669602258493521119260247991038217264638452234765248311,2593.81101421281298090666391157479102402695685080189927110605355806383923151873673912394986497773863,0.651742470047447545812561304531992144890455292330397741506478880739752008961782735361547765234751689
+7.88237094879150390625,15.7647418975830078125,41.47366868336445816334718833007928434146800188744317338153324233412729802926570404595789858361504874,0.01042101800073846697130314826362052370693681910868382585936936546279717697037315660477697660054912625,3938.336046684702283154678318269986216181256508068753593272799696770396616139227342317196127123845472,0.9895789819992615330286968517363794762930631808913161741406306345372028230296268433952230233994508738
+7.88237094879150390625,788.23712158203125,0.4098628875490468202415390423958744045264154776200644385505738092296587481868298104440405226599425315e-322,0.1029855487729370661385592190663704618584360482910039403681761198832811346210837452413806568209947594e-325,3979.80971536806674131802550660006550052272450995619676665433293910452391416849304636315402570746052,1.0
+15.848876953125,0.15848876535892486572265625,864813714589.5954516938617777150516539613650252952868802895634095543853641605725970667855636579584918,0.9999999999999999999999999868409403435640721040163737321066333492415539198641892936754764753099767295,0.1138013526198844052876462015238569718651803765821078088805884978586352966759084506756285667686605923e-13,0.1315905965643592789598362626789336665075844608013581070632452352469002327048208481608930454553515351e-25
+15.848876953125,7.9244384765625,857455078557.8186559439409480231461991712250523655325946499376377076378415854165763602745671614277657,0.9914910738490440132029194055624275232987632817376600027120470246177703761878889242162637658765959254,7358636031.77679574992084107204071677858050169437443802532295836478518078593690876536078236006039364,0.008508926150955986797080594437572476701236718262339997287952975382229623812111075783736234123404074593
+15.848876953125,14.26398944854736328125,543456207431.5277892524584568291692314107739221756802623465364491034830678876003149719981844930135557,0.6284084054904580890689857435492512109304772890456400367042151473962631724628797458182986586676872755,321357507158.0676624414033322660176845390316318842267703287241469689399544837531701536371650284746037,0.3715915945095419109310142564507487890695227109543599632957848526037368275371202541817013413323127245
+15.848876953125,15.848876953125,403510525688.6992732587835681641257109039155879627590731389572008878851682532404312142105015099805464,0.4665866404306371952836082750838488888638526270616845099302838069048718280475633148830753663725874852,461303188900.8961784350782209310612050458899660971479595363033951845378541181130539114248480115076129,0.5334133595693628047163917249161511111361473729383154900697161930951281719524366851169246336274125148
+15.848876953125,17.433765411376953125,276418089995.5182977583485870106970920893181614522453054100708596769898091436424991903972703788274048,0.3196273201179456360699084292479660831495832765300870907843636160354702907952999370398452431237945279,588395624594.0771539355132020844898238604873926076617272651897363954332132277109859352380791426607546,0.6803726798820543639300915707520339168504167234699129092156363839645297092047000629601547568762054721
+15.848876953125,31.69775390625,600115680.0552881611631351060216683189405541890544644705063642761972412838246249798196614828552764838,0.0006939247955151567565333562468275434183953541839757314991779604903811767298775213262009267488021013578,864213598909.5401635326986539891652476308649998708525682047542317962257810875288601458156880386328829,0.9993060752044848432434666437531724565816046458160242685008220395096188232701224786737990732511978986
+15.848876953125,1584.8876953125,0.163113107886086212173341867174873538338245524954349590570123573389562869154431409212893994879965561e-640,0.1886106859018683526851896176897136734503221273018007213192423142235257246798335688754957508764658987e-652,864813714589.5954516938617890951869159498055540599070326752605960724230223713534851256353495214881594,1.0
+31.314670562744140625,0.31314671039581298828125,778814717265774041244257106576403.8762726779997758454998199471243191703416382620718627158499147494477,0.9999999999999999999999999999999999999999999999999950959137153087603014420451969750429893744095041344,0.3819374573258768108704504016301750815256621981358015693603312864160916003899145582284112517497628668e-17,0.4904086284691239698557954803024957010625590495865573359650157227911125525690354777910557062747862277e-50
+31.314670562744140625,15.6573352813720703125,778566748518545485819764026092029.3967926151533938708061462099726511062555247902358317612307006611185,0.9996816075226478610969989773281892617240254186595266143385804198244875580182844440178678518270519304,247968747228555424493080484374.4794800628463819785130483104104361727906174881377817698758360696872852,0.0003183924773521389030010226718107382759745813404733856614195801755124419817155559821321481729480695913
+31.314670562744140625,29.314670562744140625,482833004676075172025820076340398.5825076976088758458228145385414356908480478542985227797515278585995,0.6199587578046579563535732598122442716901781651755658652796921025962309785151402994672345926666338678,295981712589698869218437030236005.2937649803909000034963799818416515881980944240750907513550088722062,0.3800412421953420436464267401877557283098218348244341347203078974037690214848597005327654073333661322
+31.314670562744140625,31.314670562744140625,370896755851488155472593493346712.4148522225290894677086951560628033554992036606815816518641978652044,0.4762323407980976323633991971154651466476069357868160897744155471908994651638810938674341752996143168,407917961414285885771663613229691.4614204554706863816104993643202839235469386176920318792423388656014,0.5237676592019023676366008028845348533523930642131839102255844528091005348361189061325658247003856832
+31.314670562744140625,33.314670562744140625,265681367758662399528500798549489.3873078049748167004775392929153103324001665415310450711121021919659,0.341135525393515942422391557029251027725203882426279944364470583016243351049186313788982692413516029,513133349507111641715756308026914.4889648730249591488416552274677769466459757368425684599944345388399,0.658864474606484057577608442970748972274796117573720055635529416983756648950813686211017307586483971
+31.314670562744140625,62.62934112548828125,3510010126637801956668819257.072053526730185083745305267217330129045954120627734398876930280129849447,0.4506861579299091675241191860802733381157752245815262181090987037577205034661630859784327486984048456e-5,778811207255647403442300437757146.8042191512695907655738892531657571500001881577458791322296064506759,0.999995493138420700908324758808139197266618842247754184737818909012962422794965338369140215672513016
+31.314670562744140625,3131.467041015625,0.9949734465011292884466475563156032901596853314020868171193367788975411454622042657355174384631237416e-1254,0.1277548336521214074803527819363002291258891900025277489565447091643729687904056223818620236180077516e-1286,778814717265774041244257106576403.8762726779997758493191945203830872790461422783736135311065367308058,1.0
+35.515575408935546875,0.355155766010284423828125,1839496023049279394690396563357488048160.926936902696873121474514229378668678846124147186118781332621,0.9999999999999999999999999999999999999999999999999999999988311705518566854522503357086930487486812418,0.2150057121482511052324363863657911472278809675549019401721908701625163879196312421165006871524811668e-17,0.1168829448143314547749664291306951251318758167273262927421466644472211354971342245927769000593543944e-56
+35.515575408935546875,17.7577877044677734375,1839250295623752849967374524755040772041.511965420859962594232308478793865855168465893679099785396169,0.9998664158973721457296652833638056718266664745466398849509354664513991159042158535832578423891303598,245727425526544723022038602447276119.4149714818369105293922628720673138760020221171649304682152617598,0.000133584102627854270334716636194328173333525453360115049064533548600884095784146416742157610869640248
+35.515575408935546875,33.515575408935546875,1126716761530690811983406818725232577296.140512385245346121416437687863367701603471251111605815700971,0.6125138339048784673611008444529708074044457722184180569761021928679936686124029766660288710214041085,712779261518588582706989744632255470864.7864245174515270022081336629978120295670167597324244379104599,0.3874861660951215326388991555470291925955542277815819430238978071320063313875970233339711289785958915
+35.515575408935546875,35.515575408935546875,878695297016098993751007321739301720829.4727268066609360575474550081846711938082514413961359329625398,0.4776826293755782058145073704574612504921398873157110358604907120033842521624253362408436148039094658,960800726033180400939389241618186327331.4542100960359370660771163426765085373622365694478943206488914,0.5223173706244217941854926295425387495078601126842889641395092879966157478375746637591563851960905342
+35.515575408935546875,37.515575408935546875,643897589426613602623485968571508913189.7152520524471566296144651913565045824300879927548999957274038,0.3500402182763315670128709273491916384350933712803249530899083839804758189215891746180200615671579888,1195598433622665792066910594785979134971.211684850249716494010106159504675148740400018089130257884027,0.6499597817236684329871290726508083615649066287196750469100916160195241810784108253819799384328420112
+35.515575408935546875,71.03115081787109375,2158910129007642031735750832929901.432294137427407475107438019527761330492604912014324864125358688972,0.1173642183487235327037390685996140001643280328037847481368390684502765726051207257699613803418768997e-5,1839493864139150387048364827606655118259.494642765269465648517133331333418400677883098829705389486072,0.9999988263578165127646729626093140038599983567196719621525186316093154972342739487927423003861965812
+35.515575408935546875,3551.5576171875,0.1340030996194779112296477120665147262826786996479245056900015054289664486503723649859792530476059284e-1419,0.7284772456172253407403713169396491570909000355628240421568270918043560629979548519498562921345492656e-1459,1839496023049279394690396563357488048160.926936902696873123624571350861179731170488010844030253611431,1.0
+
+# The remaining data was missing exponents for tgamma and tgamma_lower.
+95.0640411376953125,0.9506404399871826171875,0.145510476855517573901572383428911247103923229518208566615055995925169354783431079715899205682607104e147,1.0,0.3338748844030338166357658335733104939045075103209763229768920051823157362177984933932816984293886097e-4,0.2294507527004738159428298921938008182351350879950245832976058440950034518526560630407577127311992909e-150
+95.0640411376953125,47.53202056884765625,0.1455104767317315688714628619298764969395583677721590029196049408676387503309128823706686067571141588e147,0.9999999991492983343527836690569163403364335708467316108801184271247197504258774844023559647719048361,0.1237860050301095214990347501643648617460495636954510550575306044525181973452305989254929452136627688e138,0.8507016656472163309430836596635664291532683891198815728752802495741225155976440352280951639280628239e-9
+95.0640411376953125,93.0640411376953125,0.8270953894409340626253014797078388694548935740964212374525082405522401617834178085260777282042004003e146,0.5684095106513779855100143265286500637194863353225008935081840999467563524252772890135430364314749654,0.6280093791142416763904223545812736015843387210856644286980517186994533860508929886329143286218706396e146,0.4315904893486220144899856734713499362805136646774991064918159000532436475747227109864569635685250346
+95.0640411376953125,95.0640411376953125,0.7077051625452294911344927408220857430447700121426935420144897510955828892742667812806226323972360384e146,0.4863602799184931701789661009861255111997908526943918773797582829282683257000441156493062801250089046,0.7473996060099462478812310934670267279944622830393921241360702081561106585600440158783694244288350016e146,0.5136397200815068298210338990138744888002091473056081226202417170717316742999558843506937198749910954
+95.0640411376953125,97.0640411376953125,0.5907750060751459131633159171875333040151503013593145312641721231743104807411741543193437407980260481e146,0.406001697500962089288941792982261441414876691538444277046888243696282520680806473204672610497138837,0.8643297624800298258524079171015791670240819938227711348863878360773830670931366428396483160280449919e146,0.593998302499037910711058207017738558585123308461555722953111756303717479319193526795327389502861163
+95.0640411376953125,190.128082275390625,0.1250182074547620992214675725176948920111523542123681850515412344728775663708689887288190847857890665e133,0.8591698010782896169858772991337093789443227801953170296511699301738602943099686230052571279996311061e-14,0.1455104768555163237194978358079190324281980525692884550915138722433188393710863509402354969927198158e147,0.9999999999999914083019892171038301412270086629062105567721980468297034883006982613970569003137699474
+95.0640411376953125,9506.404296875,0.410843456339856518931606427624153949626406539905791201082368440245547080360115104031712516488780225e-3754,0.2823463060655057243296240358288810188079450590292603437426554366141893572584859875591659170203266194e-3900,0.145510476855517573901572383428911247103923229518208566615055995925169354783431079715899205682607104e147,1.0
+
+230.1575469970703125,1.0,0.7943512307351483242116753931994555755252863994748982526699162024988971699725221518219249134173513373e443,1.0,0.001605325555957824512231082175017738406782181505873305483713006465121498687391150947753752042955234629,0.2020926630241566676562263620495817485172495859575490783548984837449311511609113883628635101437863762e-445
+230.1575469970703125,115.07877349853515625,0.7943512307351483242096295671350543391046865291446812785362675126379944308580154078637829951922550169e443,0.999999999999999999997424532139884915216691694261381644774940945904564087155008373661686631758703312,0.2045826064401236420599870330216974133648689860902739114506743958141918225096320389822784602629423829e423,0.2575467860115084783308305738618355225059054095435912844991626338313368241296687959051921053402245151e-20
+230.1575469970703125,228.1575469970703125,0.4320352500050499378139047005826494686951628124789491900175458122808307767421127117826956600568476985e443,0.5438844094258080593135924988903306028970803734274413960639336508587960608083506963680177065156017707,0.3623159807300983863977706926168061068301235869959490626523703902180663932304094400392292533605036387e443,0.4561155905741919406864075011096693971029196265725586039360663491412039391916493036319822934843982293
+230.1575469970703125,230.1575469970703125,0.3902125711209141749169738822595467642465379627204853447527623692260839529414655887300731747165667578e443,0.4912343004237358607289747140325946370477956811693055364940306943959659677095875895076435061750962822,0.4041386596142341492947015109399088112787484367544129079171538332728132170310565630918517387007845794e443,0.5087656995762641392710252859674053629522043188306944635059693056040340322904124104923564938249037178
+230.1575469970703125,232.1575469970703125,0.3487501889396853257613873709625756982927978890960690452261371310879305408861795829594157702393902252e443,0.4390377649656656899508279604758759349074080513082357116118517884562056435445571208463156984095475396,0.4456010417954629984502880222368798772324885103788292074437790714109666290863425688625091431779611121e443,0.5609622350343343100491720395241240650925919486917642883881482115437943564554428791536843015904524604
+230.1575469970703125,460.315093994140625,0.4407730519635239782394783554127362184391684954328510668870843466275578363345143797655617743698392878e411,0.5548843319039131990882691513243314111283345266801758353532094934100654252020248166518909120713686568e-32,0.7943512307351483242116753931994511677947667642351158578863620751367127782875678233112560425738850617e443,0.9999999999999999999999999999999944511566809608680091173084867566858887166547331982416464679050658993
+230.1575469970703125,23015.75390625,0.9559236409417348208950021152441346378729603969644625960148748982677900217226751345451199820074363395e-8996,0.1203401724520595328794601630545412981309154417499555052010254193737832188451276268511110869475419232e-9438,0.7943512307351483242116753931994555755252863994748982526699162024988971699725221518219249134173513373e443,1.0
+
+460.871795654296875,1.0,0.3035697913328577383103573207361433550048171545351043103427946337286406766335561424688872199902627644e1027,1.0,0.0007999570943827548943010381276909696101503474270950161551998016380700161022055691674813276239985866686,0.263516699362756806302924272183408617249859311132449191463747391836511682589270348351185414999011926e-1029
+460.871795654296875,230.4358978271484375,0.3035697913328577383103573207361433550047925351370884076635599897138082095152794906157429847334951853e1027,0.9999999999999999999999999999999999999999189003691447412844502774348028830000232618580279072994806341,0.2461939801590267923464401483246711827665185314423525676757909375351780224332385807676145414825568404e423,0.8109963085525871554972256519711699997673814197209270051936588154826179820725730567233569656951290491e-40
+460.871795654296875,458.871795654296875,0.1611931483241718379676730539883166095529909983108046890396800612185587953951876268408693414028956011e1027,0.530992058255977856491744157658594549661381367389538808982523985300127763450276738767474706920587693,0.1423766430086859003426842667478267454518261562242996213031145725100818812383685156280178785873671632e1027,0.469007941744022143508255842341405450338618632610461191017476014699872236549723261232525293079412307
+460.871795654296875,460.871795654296875,0.1499044425611669817452516634978304074804845409565096465620306533651905004146763285309824382109683004e1027,0.4938055328331401358749551739774500026079273309328516400413537728779540654346471892486393687796370785,0.1536653487716907565651056572383129475243326135785946637807639803634501762188798139379047817792944639e1027,0.5061944671668598641250448260225499973920726690671483599586462271220459345653528107513606312203629215
+460.871795654296875,462.871795654296875,0.1386645136476389702527676004487322668191450267077516764379529098330836887026073425447155428151335593e1027,0.4567796849575072422528834382064975306821917056574500241896950256666133220324798484185934498637551554,0.164905277685218768057589720287411088185672127827352633904841723895556987930948799924171677175129205e1027,0.5432203150424927577471165617935024693178082943425499758103049743333866779675201515814065501362448446
+460.871795654296875,921.74359130859375,0.214579568282097447843285341234033253132140021796896174619250110179219191931782655042052951085903063e964,0.7068541548220638744450497903888966495830510626579681233627159150684459468037055060183111727855356285e-63,0.3035697913328577383103573207361433550048171545351043103427946335140611083514586946256018787562295112e1027,0.9999999999999999999999999999999999999999999999999999999999999992931458451779361255549502096111033504
+460.871795654296875,46087.1796875,0.1759948687946540932943422895133578780806254223549085877126768144753543541319766123991600654675160946e-17870,0.5797509298337248254275801202156047189153910514148794160732208629325216030358623936601957024666048442e-18897,0.3035697913328577383103573207361433550048171545351043103427946337286406766335561424688872199902627644e1027,1.0
+
+664.0791015625,1.0,0.5745703266423053012388846296755759814458236575017295797872518233032217040765801424270951932343892656e1585,1.0,0.000554803499100533461700081675382127658415484012034431099012469964977561860611562701898919933771029858,0.9655972008556621156398909346034920368728235561361941209577148915248010183298024193896373627559762647e-1588
+664.0791015625,332.03955078125,0.5745703266423053012388846296755759814458236575017295797869018458769535952325154619307030524922146164e1585,0.9999999999999999999999999999999999999999999999999999999993908884429982322791299632237165916284594418,0.3499774262681088440646804963921407421746491858377886363583697179665453608787350388997316735168900411e1528,0.6091115570017677208700367762834083715405581683323513398498453028923230365514524283437552918367998412e-57
+664.0791015625,662.0791015625,0.3021167487573438738160129595305571832198618183437747086825419999530854511327755168926331826960039427e1585,0.5258133508614421049922565116779507398294624638695327972751007507697623513933985163278375927725745103,0.2724535778849614274228716701450187982259618391579548711047098233501362529438046255344620105383853229e1585,0.4741866491385578950077434883220492601705375361304672027248992492302376486066014836721624072274254897
+664.0791015625,664.0791015625,0.2843201563499913066053586445117464815121852615133384043443363638833281789611578313103564412744820411e1585,0.494839609994326789934188822741956842775938040001912655673429653876761834997096017421334224252871364,0.2902501702923139946335259851638294999336383959883911754429154594198935251154223111167387519599072244e1585,0.505160390005673210065811177258043157224061959998087344326570346123238165002903982578665775747128636
+664.0791015625,666.0791015625,0.2665770008350486832539682183986178091094039928067551889686056029306641365030303914782037547507298816e1585,0.4639588723505457189002094923711730626394167476456643807276073537522553952201326725769733994829306401,0.3079933258072566179849164112769581723364196646949743908186462203725575675735497509488914384836593839e1585,0.5360411276494542810997905076288269373605832523543356192723926462477446047798673274230266005170693599
+664.0791015625,1328.158203125,0.2815972350463307317319513325546921336811187310092965580873275148483880823923796516975854414779446515e1495,0.490100553385585993788823794136328178072277263551970508868100075216984438630852032648844240985526793e-90,0.5745703266423053012388846296755759814458236575017295797872518233032217040765801424270951929527920305e1585,0.9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999995098994466
+664.0791015625,66407.90625,0.8516936430425091984695352018926240039240039876743845066067885000233245389027299911547740471304411031e-25643,0.1482314006745992402392065908335891607562619332695970947910626860700838612133574022151344757253035352e-27227,0.5745703266423053012388846296755759814458236575017295797872518233032217040765801424270951932343892656e1585,1.0
+
+1169.2916259765625,1.0,0.2211789888023831503246826752278734722240439253686325962175969884553455378953601789267541504616923277e3079,1.0,0.0003148864236423753142799300005285283127912884357020962982280135041640804352403607375497608504709569992,0.1423672408249035673853164595912914309562984950734405225106779761662731230245426459145165372095669607e-3081
+1169.2916259765625,584.64581298828125,0.2211789888023831503246826752278734722240439253686325962175969884553455378953601789267541504616923277e3079,0.9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999998,0.4251581173713294990895228243877471105625206871093006314536841396842453368736997236563189985257137593e2979,0.1922235559866835428767949912699689078565566007500741320105283086319101530842124947089114693215734909e-99
+1169.2916259765625,1167.2916259765625,0.1148913148430660007404559319786710085496945916646259215810780041406350545777929034671173346191878257e3079,0.5194494986398458229099025998514760815236833039291615271666420090780290283552325279002354379324796388,0.106287673959317149584226743249202463674349333704006674636518984314710483317567275459636815842504502e3079,0.4805505013601541770900974001485239184763166960708384728333579909219709716447674720997645620675203612
+1169.2916259765625,1169.2916259765625,0.1097293461334211936196186098765103513825912847901162614195092808968794457897461936852246112756938448e3079,0.4961110760455691456152544829180582276831949404486516253736169842404434869834516021522451806309381424,0.1114496426689619567050640653513631208414526405785163347980877075584660921056139852415295391859984829e3079,0.5038889239544308543847455170819417723168050595513483746263830157595565130165483978477548193690618576
+1169.2916259765625,1171.2916259765625,0.1045761915724994772699317733451515392457114868019129222313801712339302377148535579285521591865594366e3079,0.4728125042019031691903140623366099509942791065498616795361308461781345126406997089894375857466236069,0.1166027972298836730547509018827219329783324385667196739862168172214153001805066209982019912751328912e3079,0.5271874957980968308096859376633900490057208934501383204638691538218654873593002910105624142533763931
+1169.2916259765625,2338.583251953125,0.3853660517961866267548503750089203171857055088519007059620968150399652189311257677799267678599538164e2921,0.1742326673445910972431954923648105731106713066341076374902708289141328648814063925289049214586889559e-157,0.2211789888023831503246826752278734722240439253686325962175969884553455378953601789267541504616923277e3079,1.0
+1169.2916259765625,116929.1640625,0.1334921973028690412368136130282362266211264532031309191211246173794760240250211434584800981343637091e-44860,0.6035482756553351914398657934266315863036146517683943373863531255923722374767324696235963112082335455e-47939,0.2211789888023831503246826752278734722240439253686325962175969884553455378953601789267541504616923277e3079,1.0
+
+2057.796630859375,1.0,0.2296607098745991351513439491999254015070811420500402999956642121725140715538280690982449249151182744e5924,1.0,0.0001788603446415592472512376463686763352142734957575834349538723877570073123201456502328382989629296588,0.7788025419725549031043567928048587098198224051085568478803331745902750314471563131849915968668166695e-5927
+2057.796630859375,1028.8983154296875,0.2296607098745991351513439491999254015070811420500402999956642121725140715538280690982449249151182744e5924,1.0,0.9822844006807419524699774209176095928147927787459050881127600530947159125340637625888955323105924994e5749,0.4277111227327893392956905805573130925190053689139455240870060837560269563451544938490472860053531939e-174
+2057.796630859375,2055.796630859375,0.1181970778393469944551585447788996343247484863125676497955892509032681427741390030228718216377717021e5924,0.5146595510563637431071584380665041151517840985243959943271211766126099181752511155269841800877407187,0.1114636320352521406961854044210257671823326557374726502000749612692459287796890660753731032773465723e5924,0.4853404489436362568928415619334958848482159014756040056728788233873900818247488844730158199122592813
+2057.796630859375,2057.796630859375,0.1141571063368333335549056714887837836223093960256471510446261076349612596796785907592276653667764085e5924,0.4970685077093341491049428149069921151108953421435248479241067800168777919786478963838719883781055889,0.1155036035377658015964382777111416178847717460243931489510381045375528118741494783390172595483418659e5924,0.5029314922906658508950571850930078848891046578564751520758932199831222080213521036161280116218944111
+2057.796630859375,2059.796630859375,0.1101210575241523286005972733062095852404319473645093682804326140992694666629481735607350959283621991e5924,0.4794945447320151505244609247943138810471077522080625919866429085483861553259121554634814161108765226,0.1195396523504468065507466758937158162666491946855309317152315980732446048908798955375098289867560753e5924,0.5205054552679848494755390752056861189528922477919374080133570914516138446740878445365185838891234774
+2057.796630859375,4115.59326171875,0.1184802275824791022571834680209296613447564684666621309564053455602973525777492482319187677060560432e5648,0.5158924556454278242195499999686615277394459408484310942606310759251402814732192780093913845058465035e-276,0.2296607098745991351513439491999254015070811420500402999956642121725140715538280690982449249151182744e5924,1.0
+2057.796630859375,205779.65625,0.4201428634932982855590128692571495505659212593160178569139973150589427696759188605068591915292645523e-78440,0.1829406796324488764221415721149535896951274162966389404491557586743437861782808243268924184165028864e-84363,0.2296607098745991351513439491999254015070811420500402999956642121725140715538280690982449249151182744e5924,1.0
+
+5823.5341796875,1.0,0.1204395397514337475423786621774349420062760132029898805362923119619100468071321611679283901089428652e19397,1.0,0.6318201301512319242829917005636884943368220526214159580849901321408186241292901627433210404056827978e-4,0.5245952711669263519210693557964617436547132969346871040581963321734735795313612558534271821781318411e-19400
+5823.5341796875,2911.76708984375,0.1204395397514337475423786621774349420062760132029898805362923119619100468071321611679283901089428652e19397,1.0,0.4035259729288404343552749435692175466685338188811768319423095321055726721842742984032087143214236599e18906,0.3350444328844562385775121047850168127494131430195647748520977802476677594087402915363606825742343083e-490
+5823.5341796875,5821.5341796875,0.6126920809889162048883575147692727204635949058113441363539761562854353553260508847605536631622514472e19396,0.5087134028022741086387529518673768528172426138087777028759999654326711259860222847941770091355247484,0.5917033165254212705354291070050766995991652262185546690089469633336651127452707269187302379271772049e19396,0.4912865971977258913612470481326231471827573861912222971240000345673288740139777152058229908644752516
+5823.5341796875,5823.5341796875,0.6000989280305561918308588121091415609770180970873138723602626680145344318925207189486424421186686595e19396,0.4982574072178089990585121217647990047541960897876785713029080474657389735630621455528428027141859677,0.6042964694837812835929278096652078590857420349425849330026604516045660361788008927306414589707599927e19396,0.5017425927821910009414878782352009952458039102123214286970919525342610264369378544471571972858140323
+5823.5341796875,5825.5341796875,0.5875100985050789481864072831420352596099318466445228673422078429397158588973815853817471380143431533e19395,0.48780500134556936977004263447238945560454812532198011665953206594566719692149899347013902778973964,0.6168852990092585272373793386323141604528282853853759380207152766793846091739400262975367630750854988e19396,0.51219499865443063022995736552761054439545187467801988334046793405433280307850100652986097221026036
+5823.5341796875,11647.068359375,0.5353527302842454914572421462782089453923068596623200437216734225930083166517293351090646020310494752e18618,0.4444991498548735493821113261413094182993223786289714525114040696846695823566433886781875769143935322e-778,0.1204395397514337475423786621774349420062760132029898805362923119619100468071321611679283901089428652e19397,1.0
+5823.5341796875,582353.4375,0.1306843628941291279596587214414256236728415340542843841458695749930348339470885205941165569646322079e-219344,0.1085061958588009491652051793216903806290512061576938386117858324035783177763463890242081951747644651e-238740,0.1204395397514337475423786621774349420062760132029898805362923119619100468071321611679283901089428652e19397,1.0
+
+9113.3095703125,1.0,0.2058284735294648231534673957777340107191538633051240481422777650293706102527136539254313499140613425e32127,1.0,0.4037170092859947171051886914823887325296146261863938904807985526887128393010583619637026093856940876e-4,0.1961424492749792906069609223922162691035648940014810214081197868423196767074778143387553776773884785e-32130
+9113.3095703125,4556.65478515625,0.2058284735294648231534673957777340107191538633051240481422777650293706102527136539254313499140613425e32127,1.0,0.6109377214187031022316054159922887207113747225714451450654131455750653440696736591254903504865772707e31360,0.2968188564694602134756320513815309578474741421887761461484741830281935296582920785928397009274511509e-766
+9113.3095703125,9111.3095703125,0.1043478778903032904507254378873664862163967379105136115494921359540150657805686187420775552682050699e32127,0.5069652225515127761139756648006698185865481908723864989191437142873208577668041858919621519562798842,0.1014805956391615327027419578903675245027571253946104365927856290753555444721450351833537946458562726e32127,0.4930347774484872238860243351993301814134518091276135010808562857126791422331958141080378480437201158
+9113.3095703125,9113.3095703125,0.1026275177685656364890949896204867326423388372804577577731301989347594536047854290961838095177720948e32127,0.4986070003277475086621436243232816155603962044739470943558278267678784076324835549046763593951499622,0.1032009557608991866643724061572472780768150260246662903691475660946111566479282248292475403962892477e32127,0.5013929996722524913378563756767183844396037955260529056441721732321215923675164450953236406048500378
+9113.3095703125,9115.3095703125,0.1009075351129165861035492191302916783244651730318660685395897540635511698554749260656934916726778491e32127,0.4902506119906264500395580518169463900862860214613231920536378253585336247100111218942361723610119757,0.1049209384165482370499181766474423323946886902732579796026880109658194403972387278597378582413834934e32127,0.5097493880093735499604419481830536099137139785386768079463621746414663752899888781057638276389880243
+9113.3095703125,18226.619140625,0.2844201695607462461046288417599451943410582108941500320299291215678803002029948089751534122462413978e30910,0.1381831020186965723509796431234180433841791957413460611775479295093149059469403680680588975239641139e-1216,0.2058284735294648231534673957777340107191538633051240481422777650293706102527136539254313499140613425e32127,1.0
+9113.3095703125,911330.9375,0.2634558899021205314041532677186125127324533196940061567254967357798886751103797693911325418379331619e-341479,0.127997786401698310219717935271258163287422251796870023632726955567030034172504342639656107002595249e-373605,0.2058284735294648231534673957777340107191538633051240481422777650293706102527136539254313499140613425e32127,1.0
+
+31387.41015625,1.0,0.1907153914260137766081242520060232376058679739088173806739260816310109592191535200104259238502823114e127509,1.0,0.1172097856896058268698780001377136569290991309340363479889876878658000708291760860866831167807270228e-4,0.6145795827657478246713528055954877980223660793035074463222390108567932746239676554864860396068354328e-127513
+31387.41015625,15693.705078125,0.1907153914260137766081242520060232376058679739088173806739260816310109592191535200104259238502823114e127509,1.0,0.1178940944440575118484057547609480198287057753687344488602125702168138518988852818906560456377655828e124874,0.6181676977539246234778546964931531171263852830030672634254567333844990255403536962432314618520183912e-2635
+31387.41015625,31385.41015625,0.9607346152919525199880979895188512454515764100687040469903581036630732159159887778018753399814702988e127508,0.5037530574267574950285346598748481476034239981169588651898103217495670654430574683807499422545184211,0.9464192989681852460931445305413811306071033290194697597489027126470363762755464223023838985213528154e127508,0.4962469425732425049714653401251518523965760018830411348101896782504329345569425316192500577454815789
+31387.41015625,31387.41015625,0.9521454388761436323609355018051756475974072518959609739004957130130269970551939745267389118331132782e127508,0.4992493955295262078624630020406504359970108488437383103275210393051794296194033332729085717661902896,0.955008475383994133720307018255056728461272487192212832838765103297082595136341225577520326669709836e127508,0.5007506044704737921375369979593495640029891511562616896724789606948205703805966667270914282338097104
+31387.41015625,31389.41015625,0.9435568097262039923404683068116690883643670926776098133654518635680589408058715489960845828809997579e127508,0.4947460205865177317657787953702156470879097009546148598250336067254482340200731084198867465150117276,0.9635971045339337737407742132485632876943126464105639933738089527420506513856636511081746556218233563e127508,0.5052539794134822682342212046297843529120902990453851401749663932745517659799268915801132534849882724
+31387.41015625,62774.8203125,0.639440870992195110243168891395043075970119175325222539369097746057899381944623539419388796691846333e123323,0.3352854041883977247774206822492896029430517273753461135918538525190213990661515897439781385194335162e-4185,0.1907153914260137766081242520060232376058679739088173806739260816310109592191535200104259238502823114e127508,1.0
+31387.41015625,3138741.0,0.8712340128913840990158681888626366121803871270318591176775961058292458205022056834607179300912579579e-1159228,0.4568241746914123883971626233329316053998069787008932952589706205337117010465312411468070532148356825e-1286736,0.1907153914260137766081242520060232376058679739088173806739260816310109592191535200104259238502823114e127509,1.0
+
+53731.765625,1.0,0.1968375061316474051696679914969989794166523446713072964017484226785290381190494752446686823589822611e230827,1.0,0.6846718760933685833021646032164728730373454920630880010700244576412946459126644872424651974762617329e-5,0.3478360854843646528005950030296176413493884510395694421618624709007598051252449019794914871773442384e-230831
+53731.765625,26865.8828125,0.1968375061316474051696679914969989794166523446713072964017484226785290381190494752446686823589822611e230827,1.0,0.4596204454239807853790732663423567816759432173785340424309074767567519221051637504214333998617934737e226317,0.2335024734140762981026837224978008762575936206362713332576404458305954499600642343912165066945157393e-4509
+53731.765625,53729.765625,0.9898336951885252520260938613285785464035396900705476186477833018587239309299831484654462523016012066e230826,0.5028684393748171144639183376370325602727658807295180617202372561848623433680228389050363745414042978,0.9785413661279487996705860536414112477629837566425253453697009249265664502605116039812405712882214042e230826,0.4971315606251828855360816623629674397272341192704819382797627438151376566319771610949636254585957022
+53731.765625,53731.765625,0.9830583039168975325307605275070567301075887193360096847489237445380506065822885212933536241265585848e230826,0.4994263152569184389892349690243164177907483429757537595214928334958766883412534478021012611761406009,0.985316757399576519165919387462933064058934727377063279268560482247239774608206231153333199463264026e230826,0.5005736847430815610107650309756835822092516570242462404785071665041233116587465521978987388238593991
+53731.765625,53733.765625,0.97628316482902031647854485716302419515105170546283958951870828792200970695273562786028952581753817e230826,0.4959843192567527400639733542343360232035266718796637178642939191793549740917081309022729249590482264,0.9920918964874537352181350578069655990154717412502333744987759388632806742377591245863972977722844408e230826,0.5040156807432472599360266457656639767964733281203362821357060808206450259082918690977270750409517736
+53731.765625,107463.53125,0.9857000573732164937380523004169343050694041258310103979727730835148474946175436750885160009501077337e223663,0.5007684138783834575499330461565279986066528056814362965625964516201140516349885790241319685256190109e-7163,0.1968375061316474051696679914969989794166523446713072964017484226785290381190494752446686823589822611e230827,1.0
+53731.765625,5373176.5,0.3718061873698555444448063789266736654059535208915550950860496543206793529115247245781925385442586833e-1971920,0.1888899095892765882957244319190855136922162514010618617401162857457945289825998923759689962325214871e-2202746,0.1968375061316474051696679914969989794166523446713072964017484226785290381190494752446686823589822611e230827,1.0
+
+117454.09375,1.0,0.9318118105062591002929457015325712659659543801643169834185264964234249069692069364865148866469370692e544465,1.0,0.313213921744632971050579853869676581728906891724484285710033076001673183535297248385604569944902853e-5,0.3361343118998050869634246624964916040167904082273682960527262239208359804459089238240999775478833994e-544470
+117454.09375,58727.046875,0.9318118105062591002929457015325712659659543801643169834185264964234249069692069364865148866469370692e544465,1.0,0.9191586889607675560018325512164330792065221712018362595259346904441468428861721496925241967346843064e534610,0.9864209474457969948221715384559498587958215887291280078996110294207932757072463789506127465999022247e-9855
+117454.09375,117452.09375,0.4677137205305140734081198423668819310551597308270642385460447347821821628461339537856199850875464552e544465,0.5019401077095195070323848313576574442812198192986467929838617161888974569553340375704576649153144829,0.464098089975745026884825859165689334910794649337252744872481761641242744123072982700894901559390614e544465,0.4980598922904804929676151686423425557187801807013532070161382838111025430446659624295423350846855171
+117454.09375,117454.09375,0.465544343100630356053620730347685891129180124181192306543195806422400059864981029492940362835899938e544465,0.499611979427151974874897833905897697363907477678490396979994271179885705982324624234690235502943969,0.4662674674056287442393249711848853748367742559831246768753306900010248471042259069935745238110371312e544465,0.500388020572848025125102166094102302636092522321509603020005728820114294017675375765309764497056031
+117454.09375,117456.09375,0.4633750026101230583781220405717433582374619595678524934079773142234579837891564729114009490865727437e544465,0.4972838907873131198433312739984807998957012913706772498633297552685545410772772846679655645399634758,0.4684368078961360419148236609608279077284924205964644900105491821999669231800504635751139375603643255e544465,0.5027161092126868801566687260015192001042987086293227501366702447314454589227227153320344354600365242
+117454.09375,234908.1875,0.3765617481860321182118792720765163211623400846148178858934295299139956899505817861365275762655792927e528810,0.404117809991530155979898593834626437803581387079414920652000290931175084399705146249771222798155904e-15655,0.9318118105062591002929457015325712659659543801643169834185264964234249069692069364865148866469370692e544465,1.0
+117454.09375,11745409.0,0.3749176167726247694377808265587192673148265695757522828792546112184190157670775661741020190770516912e-4270588,0.4023533642151731445326576999699563877739832531592590216076808854373945772374572855320821690142966099e-4815053,0.9318118105062591002929457015325712659659543801643169834185264964234249069692069364865148866469370692e544465,1.0
+
+246209.65625,1.0,0.3795461409907903896345422567793322831580321819313465092025723355362953841755017486543011371443499473e1220462,1.0,0.1494177527177717178022651459992286345909806690553400632385568861175245603174043469215394922999027597e-5,0.3936748041429758848717153565348260765290237773916575292463198233814160246751477180472839298294153066e-1220467
+246209.65625,123104.828125,0.3795461409907903896345422567793322831580321819313465092025723355362953841755017486543011371443499473e1220462,1.0,0.1099880225198186642903575602493957065333235204076062878495498226949140924550581413780754772537288714e1199807,0.2897882777379825906774307898713470531328730940467466937976093354792190803827781885124627244219939374e-20655
+246209.65625,246207.65625,0.1902816646704517630357467941804100090646746413808322194033944591897791683237366858242769223987429451e1220462,0.501340006181406305362208182086691817029256585472066242900372017261364294652322499081532560989068282,0.1892644763203386265987954625989222740933575405505142897991778763465162158517650628300242147456070023e1220462,0.498659993818593694637791817913308182970743414527933757099627982738635705347677500918467439010931718
+246209.65625,246209.65625,0.1896713517815713127245493484616099274345676239686359608007363708235397890202647710003825319379093487e1220462,0.4997319990830143882908170503627598371539437356320335970815080360238724867210261514858758596804507521,0.1898747892092190769099929083177223557234645579627105484018359647127555951552369776539186052064405986e1220462,0.5002680009169856117091829496372401628460562643679664029184919639761275132789738485141241403195492479
+246209.65625,246211.65625,0.1890610438503187682368919983483183956151051384043983286737369622166833408570431154485100095513248129e1220462,0.4981240050466124914099774918899995777543692453345887329244388038491507106647647777524494210424240252,0.1904850971404716213976502584310138875429270435269481805288353733196120433184586332057911275930251345e1220462,0.5018759949533875085900225081100004222456307546654112670755611961508492893352352222475505789575759748
+246209.65625,492419.3125,0.3028106368525605792533815094012307413502326516792414546986435189331818430898812546597463686315212235e1187648,0.7978229894844543239003397587270469382229335073444162983048262954417740318171509197684583742725146624e-32814,0.3795461409907903896345422567793322831580321819313465092025723355362953841755017486543011371443499473e1220462,1.0
+246209.65625,24620966.0,0.4218795130057598537892994786340712622578174601909957638667112927337404423218835974564954011299333039e-8872946,0.1111536826338056944878094416758566250614970740769053202708092623400624092701546619232542474200597198e-10093407,0.3795461409907903896345422567793322831580321819313465092025723355362953841755017486543011371443499473e1220462,1.0
+
+513669.1875,1.0,0.1026762455478787231848021279669200901989201648818956533640028599511278074166334792418412467632444988e2710317,1.0,0.7161810875625776919149453032960193795284794690428570619324428055126959546925115687394362341113623494e-6,0.6975139027932385209985700478995386866834770542910755702232497033765481032627476632277947185763659989e-2710322
+513669.1875,256834.59375,0.1026762455478787231848021279669200901989201648818956533640028599511278074166334792418412467632444988e2710317,1.0,0.1179256191243649493831993743640418317298811821795430361888926604340800596592353697112775763521543988e2667226,0.1148519002570807149221546626327644677390044371986909218318793705480156216422385159554639234488107623e-43090
+513669.1875,513667.1875,0.5143337766625515754329179034524882655009493028013958771386522493338908966015454144364713090116144692e2710316,0.5009277208355985110675899414981370183301000099671155624683102665494895878885434589591042983062216035,0.5124286788162356564151033762167126364882523460175606565013763501773871775647893779819411586208305185e2710316,0.4990722791644014889324100585018629816698999900328844375316897334505104121114565410408957016937783965
+513669.1875,513669.1875,0.513190718063553564130040168577537778516363342785796579467535763268909112927188480469216134219027671e2710316,0.4998144559388361978364898291206210101144861575499062946445741052920369397398298507664833795665274182,0.5135717374152336677179811110916631234728383060331599541724928362423689612391463119491963334134173167e2710316,0.5001855440611638021635101708793789898855138424500937053554258947079630602601701492335166204334725818
+513669.1875,513671.1875,0.5120476639151014538416521123801457361015160733924052036088039434031905274122651457869413162280154569e2710316,0.4987011953766167745079679008028061016888578219761375469627524901736850480086714928528588625770267132,0.5147147915636857780063691672890551658876855754265513300312246561080875467540696466314711514044295309e2710316,0.5012988046233832254920320991971938983111421780238624530372475098263149519913285071471411374229732868
+513669.1875,1027338.375,0.7882562004488893531792380896763559346521793801402340843242125104839381998149118866123437196614608104e2641859,0.7677103854380022328284291764195301824754129513473442461734939397474939700912174426752498922553981473e-68457,0.1026762455478787231848021279669200901989201648818956533640028599511278074166334792418412467632444988e2710317,1.0
+513669.1875,51366920.0,0.8455141442594780273582857781742586590386122698859368213816566938022783163150883258176324338235587287e-18347637,0.8234759069615652019245476397172569750885541471334500479714655987220876801411179354025002722103325368e-21057953,0.1026762455478787231848021279669200901989201648818956533640028599511278074166334792418412467632444988e2710317,1.0
+
+788352.3125,1.0,0.3254350252275514924133907801285120979971963169854519087242435548802716922496825809327006216635954494e4306314,1.0,0.4666440397038730095030131088923330001395921365337505093937538015695853474965515882892883491065022498e-6,0.1433908471829622508376220400714432285652733465995812102127318484064704211691023381454450301792300023e-4306319
+788352.3125,394176.15625,0.3254350252275514924133907801285120979971963169854519087242435548802716922496825809327006216635954494e4306314,1.0,0.2006257520633973004844236201403980302780110902909388684784270381180202010418543872474966575049005566e4240182,0.6164848172783960800240480360461358265727377175617248578986815365384881763390067655148178076072402911e-66132
+788352.3125,788350.3125,0.162961216861866486196123635890099179907765436181771479621640418745608625572387287597608545912315394e4306314,0.5007488568506734531584407973208886646226494394047062415392632213315407911442369980288546641886893887,0.1624738083656850062172671442384129180894308808036804291026031361346630666772952933350920757512800554e4306314,0.4992511431493265468415592026791113353773505605952937584607367786684592088557630019711453358113106113
+788352.3125,788352.3125,0.1626687717822932899593035312904247710866671194963517534486901004447793852560311314241268483442598936e4306314,0.4998502286855928443434206403315169955579486533591805378314370596112904256380207126657714482687295139,0.1627662534452582024540872488380873269105291974891001552755534544354923069936514495085737733193355558e4306314,0.5001497713144071556565793596684830044420513466408194621685629403887095743619792873342285517312704861
+788352.3125,788354.3125,0.1623763274446328985015387393773169322760017933096679464665287143383813538555079409462603516012733209e4306314,0.4989516028002693214791004285569604766689865869988938477436476252444986636812350914588652370815612146,0.1630586977829185939118520407511951657211945236757839622577148405418903383941746399864402700623221286e4306314,0.5010483971997306785208995714430395233310134130011061522563523747555013363187649085411347629184387854
+788352.3125,1576704.625,0.62966881391456604663265189232296651965212021691993178179931323658375951801607008550560163062833006e201251,0.1934852628337369167484390536774609470572595166386051921886173923840391906771189648683653522231175771e-105062,0.3254350252275514924133907801285120979971963169854519087242435548802716922496825809327006216635954494e4306314,1.0
+788352.3125,78835232.0,0.4164740077948943840500786922849307561907212018086545639004814350805550398839532201156819761152062039e-28012316,0.1279745496059271390694582975257723346837265207507390129414161314216004095755396957400977650588924393e-32318629,0.3254350252275514924133907801285120979971963169854519087242435548802716922496825809327006216635954494e4306314,1.0
+
+1736170.0,1.0,0.1262281517971042004488252985099758947734405887636182671673445904506523435537050416445084616475212426e10078982,1.0,0.2118914928047443977144200433110895948573532788053230331876929560838004923241637943455403176192920957e-6,0.1678638954845296242754981240024346426980228514280855063671268705695352948287648087179192945942541815e-10078987
+1736170.0,868085.0,0.1262281517971042004488252985099758947734405887636182671673445904506523435537050416445084616475212426e10078982,1.0,0.1448940961583454163407547513975813077281954384418820421315934004081116003090269523192520567562712675e9933344,0.1147874654706537747553860317681134464810452807999399860509102977323900833593912850990760752412482674e-145637
+1736170.0,1736168.0,0.6317777290022475594523330311129906002358832226132013915031845078518775760353610272181933223363237277e10078981,0.500504618033028326360191641057343755999405997498206839871815176619438983969420893139030447209664989,0.6305037889687944450359199539867683474985226650229812801702613966546458595016893892268912941388886983e10078981,0.499495381966971673639808358942656244000594002501793160128184823380561016030579106860969552790335011
+1736170.0,1736170.0,0.6310133650036994505936467834743236622047002119530026486269595591827934240774463130132409395432514033e10078981,0.49989907641044580817879562048675209725080620507540160516376663057508236554638837205467803575236936,0.6312681529673425538946062016254352855297056756831800230464863453237300114596041034318436769319610226e10078981,0.50010092358955419182120437951324790274919379492459839483623336942491763445361162794532196424763064
+1736170.0,1736172.0,0.63024900188566778658967343804876836928228054774250423301619921925975649543556103050219224039778483e10078981,0.4992935354854227744062593568501916692180042004614849112072827608836331168589189268904245367712978671,0.632032516085374217898579547050990578452125339893678438657246685246766940101489385942892376077427596e10078981,0.5007064645145772255937406431498083307819957995385150887927172391163668831410810731095754632287021329
+1736170.0,3472340.0,0.6014445720839096678691921265326588051367345601002845203175453094832083718879547519600219908634900144e9847608,0.4764741965410820548147263974496875110171884751124591798801059384427379413001614590138374358389181743e-231373,0.1262281517971042004488252985099758947734405887636182671673445904506523435537050416445084616475212426e10078982,1.0
+1736170.0,173616992.0,0.1028718049106474382663595835099645962497203244264180111334446299544683261400046764833876858973945412e-61095576,0.8149672117199407490039815813486797316083480325648451121983304934903758539219857770713382104685664004e-71174558,0.1262281517971042004488252985099758947734405887636182671673445904506523435537050416445084616475212426e10078982,1.0
diff --git a/commons-numbers-gamma/src/test/resources/org/apache/commons/numbers/gamma/igamma_big_data_p_derivative.csv b/commons-numbers-gamma/src/test/resources/org/apache/commons/numbers/gamma/igamma_big_data_p_derivative.csv
new file mode 100644
index 0000000..6d0a532
--- /dev/null
+++ b/commons-numbers-gamma/src/test/resources/org/apache/commons/numbers/gamma/igamma_big_data_p_derivative.csv
@@ -0,0 +1,306 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Generated using maxima from a script built by gamma_p_derivative.pl
+# Input data: igamma_big_data.csv
+# a, x, gamma_p_derivative(a, x), log(gamma_p_derivative(a, x)),
+0.0000017306554127571872,0.000000017306554411788967,9.99970035092853409625699629054e1,4.60514022063198797885486933228e0
+0.0000017306554127571872,0.0000008653277063785936,1.99995194739530714491264723582e0,6.93123153968962656402509960806e-1
+0.0000017306554127571872,0.0000015575898260067334,1.11108480875420766607205143647e0,1.05336843256424117539802928548e-1
+0.0000017306554127571872,0.0000017306554127571872,9.99976307960891633360286527365e-1,-2.36923197691581556187341022509e-5
+0.0000017306554127571872,0.000001903720999507641,9.09069341779903199531085357935e-1,-9.53339041278508784428989823093e-2
+0.0000017306554127571872,0.0000034613108255143745,4.99987888458560783978749007076e-1,-6.9317140393620735130732263839e-1
+0.0000017306554127571872,100.0,6.43822736746637670850298333404e-52,-1.17872171586962320424261044047e2
+0.0000021657506295014174,0.00000002165750601079708,9.99963021270514580409117303797e1,4.6051332065748758755689667479e0
+0.0000021657506295014174,0.0000010828753147507087,1.99994083829910467491428160612e0,6.93117599271975662068014797785e-1
+0.0000021657506295014174,0.0000019491756120260108,1.11107866945237535160828121253e0,1.05331317738709025882802864602e-1
+0.0000021657506295014174,0.0000021657506295014174,9.999708374458937850984138372e-1,-2.91629793417632237574777885044e-5
+0.0000021657506295014174,0.000002382325646976824,9.09064405797304884663096559991e-1,-9.53393338522646126261454400663e-2
+0.0000021657506295014174,0.0000043315012590028349,4.9998508644940409921504719852e-1,-6.93177008105973939224169375096e-1
+0.0000021657506295014174,100.0,8.05684731440537848814546076384e-52,-1.17647902507750645874988051421e2
+0.0000072700195232755508,0.00000007270019608540679,9.9988462181167748810905858439e1,4.60505480114319366520529954363e0
+0.0000072700195232755508,0.0000036350097616377754,1.99981901830388391742317095854e0,6.9305668561734346264002646169e-1
+0.0000072700195232755508,0.000006543017661897466,1.11101206704785613330772305708e0,1.0527137202772148904040787083e-1
+0.0000072700195232755508,0.0000072700195232755508,9.99910913209635491929680076741e-1,-8.90907588283103469409269675028e-5
+0.0000072700195232755508,0.000007997021384653636,9.09009900445001845620272906298e-1,-9.53992932853111343866723775403e-2
+0.0000072700195232755508,0.000014540039046551101,4.99954341292436293248434398732e-1,-6.93238502144761721109135743108e-1
+0.0000072700195232755508,100.0,2.70460439413728259710980987094e-51,-1.16436884090950265315903729198e2
+0.000014000004739500583,0.00000014000005421621609,9.99786972034378741074115669492e1,4.60495713532879005786050012275e0
+0.000014000004739500583,0.000007000002369750291,1.99966984005685816140275787926e0,6.92982086961176144225228641843e-1
+0.000014000004739500583,0.000012600004083651584,1.11093062560682129039753865268e0,1.05198065509654624341040123922e-1
+0.000014000004739500583,0.000014000004739500583,9.99837623647141328842121532351e-1,-1.62389537325904782953979533129e-4
+0.000014000004739500583,0.00001540000448585488,9.08943277490141199320603327625e-1,-9.54725877526264509553391270875e-2
+0.000014000004739500583,0.000028000009479001166,4.99916664206500050686809285812e-1,-6.93313866038197704082245685992e-1
+0.000014000004739500583,100.0,5.20848600851809445919522000378e-51,-1.15781550522536136460839569482e2
+0.0000171964547917014,0.00000017196454393797468,9.99741958699148985978930749079e1,4.60491211138885551935335765639e0
+0.0000171964547917014,0.0000085982273958507,1.99960153755104966439527563341e0,6.92947929486293311032181120168e-1
+0.0000171964547917014,0.0000154768094944302,1.11089331739064986749927816999e0,1.05164482096088023979374218694e-1
+0.0000171964547917014,0.0000171964547917014,9.99804089566062482561547410644e-1,-1.95929626893354698273461358558e-4
+0.0000171964547917014,0.0000189161000889726,9.08912744134370446272207763831e-1,-9.5506180463391672620535885826e-2
+0.0000171964547917014,0.0000343929095834028,4.99899406916560557467464270669e-1,-6.93348386967475871128122984215e-1
+0.0000171964547917014,100.0,6.3977819691541378947002108279e-51,-1.1557588837971870207814059757e2
+0.00006008507625665516,0.000000600850739829184,9.99173743739423013369699443287e1,4.60434358818966549335611497689e0
+0.00006008507625665516,0.00003004253812832758,1.99875833934010253494622029197e0,6.92526157435047854032868423373e-1
+0.00006008507625665516,0.00005407656863098964,1.11043382878312190750947297797e0,1.04750775709009472612195580299e-1
+0.00006008507625665516,0.00006008507625665516,9.99390767795524185621899239434e-1,-6.09417861824753128015664639412e-4
+0.00006008507625665516,0.00006609358388232067,9.08536805617303841232122067276e-1,-9.59198794543537003141601626753e-2
+0.00006008507625665516,0.00012017015251331032,4.99686170961456124836135713136e-1,-6.93775035696825687867205950772e-1
+0.00006008507625665516,100.0,2.23590659762496516659544820582e-50,-1.14324607867363767337340651761e2
+0.00011678319424390793,0.0000011678318969643443,9.98472136690538758217688402989e1,4.60364115430525574055892022374e0
+0.00011678319424390793,0.000058391597121953967,1.99774240346433621325836221904e0,6.92017744719509625653433790003e-1
+0.00011678319424390793,0.00010510487481951714,1.10988123060446341574378566274e0,1.04253010143954297275277122743e-1
+0.00011678319424390793,0.00011678319424390793,9.98893732869419364180326295857e-1,-1.10687949573068851339969016877e-3
+0.00011678319424390793,0.00012846151366829873,9.08084714348436509690396211834e-1,-9.64176069922384290895110866116e-2
+0.00011678319424390793,0.00023356638848781587,4.99428968950864476092132860771e-1,-6.94289895308092956644466568778e-1
+0.00011678319424390793,100.0,4.34705361294211403097879281979e-50,-1.13659756364451666918478186694e2
+0.0001490520080551505,0.0000014905200487191906,9.980866413327563631468411554e1,4.60325499451189923379878991368e0
+0.0001490520080551505,0.00007452600402757526,1.99719166667370706604734233715e0,6.91742027130959262942395514426e-1
+0.0001490520080551505,0.00013414680142886938,1.10958203081730614458606396397e0,1.03983395598698829580568907158e-1
+0.0001490520080551505,0.0001490520080551505,9.98624582301271689231517278191e-1,-1.37636445387339589680105021691e-3
+0.0001490520080551505,0.00016395721468143166,9.07839862529491228783720070342e-1,-9.66872787875837060955296891217e-2
+0.0001490520080551505,0.000298104016110301,4.9928945461217960147403982199e-1,-6.94569282042733629990437922477e-1
+0.0001490520080551505,100.0,5.54913258686707628897683777881e-50,-1.13415613024813178969801927974e2
+0.000398525211494416,0.000003985252078564372,9.95282263829607359785876889051e1,4.60044128617515984240260981246e0
+0.000398525211494416,0.000199262605747208,1.99328101852716186676357040731e0,6.89782034063988432072882769597e-1
+0.000398525211494416,0.0003586726961657405,1.1074612024262532116641121872e0,1.02070190654233067652578775238e-1
+0.000398525211494416,0.000398525211494416,9.9671722764367592098131495835e-1,-3.28817247497467498563932962307e-3
+0.000398525211494416,0.0004383777268230915,9.06104889094776954374883230395e-1,-9.8600208012386303224246905884e-2
+0.000398525211494416,0.000797050422988832,4.98297673978447783670825459737e-1,-6.96557641619684990043390859996e-1
+0.000398525211494416,100.0,1.48560895036367709930581745053e-49,-1.1243084480092334199025647837e2
+0.0006387534085661173,0.000006387534085661173,9.92748164680128812439792721259e1,4.59789192829249250820853410096e0
+0.0006387534085661173,0.00031937670428305867,1.98984103119369619910290757863e0,6.88054751723255346762644614011e-1
+0.0006387534085661173,0.0005748780677095056,1.10559984760649175977960585643e0,1.0038803619342583035302571785e-1
+0.0006387534085661173,0.0006387534085661173,9.95043269915577716633284032417e-1,-4.96905541675236228211473646146e-3
+0.0006387534085661173,0.000702628749422729,9.04582081027253631173153588274e-1,-1.00282230859712772036858864955e-1
+0.0006387534085661173,0.0012775068171322346,4.9742412863939569497078140344e-1,-6.98312239261043129970215151387e-1
+0.0006387534085661173,100.0,2.38408933616913125792696651624e-49,-1.1195785233498193222200426263e2
+0.0010718167759478093,0.000010718167686718516,9.8840929881464711751649917368e1,4.59351178902298521865189142202e0
+0.0010718167759478093,0.0005359083879739046,1.98408243615037884685605721208e0,6.85156558478505403870631939504e-1
+0.0010718167759478093,0.0009646351099945605,1.10248988578661714548587176004e0,9.75711544070939587925676069312e-2
+0.0010718167759478093,0.0010718167759478093,9.92246610108563611412622759551e-1,-7.78360369308873559245605245732e-3
+0.0010718167759478093,0.0011789985001087189,9.02037802974934648865225298251e-1,-1.030988496259522030069692311e-1
+0.0010718167759478093,0.0021436335518956186,4.95960161890217837886281526869e-1,-7.012596742526567796652242202e-1
+0.0010718167759478093,100.0,4.00944507142482752187055405749e-49,-1.11438016711144358619927277277e2
+0.0030219152104109527,0.000030219152904464864,9.70695334304407206067226480005e1,4.57542756118575466173013131099e0
+0.0030219152104109527,0.0015109576052054763,1.96157092689879047393572201502e0,6.73745645533888796251075546613e-1
+0.0030219152104109527,0.002719723619520664,1.09038024244205164286744445557e0,8.65264816854485036610195772138e-2
+0.0030219152104109527,0.0030219152104109527,9.81358089916480348749661073142e-1,-1.88178606232744237889969472322e-2
+0.0030219152104109527,0.003324106801301241,8.92131055769560229293971910203e-1,-1.14142233685853680119544113539e-1
+0.0030219152104109527,0.006043830420821905,4.90224257413082475335937840074e-1,-7.12892324385643120113096540687e-1
+0.0030219152104109527,100.0,1.14191084119520623550118980619e-48,-1.10391381428036767267202869322e2
+0.004994133487343788,0.000049941336328629407,9.54418576948519768475754395797e1,4.5585172421313688858685421939e0
+0.004994133487343788,0.002497066743671894,1.94173966421930025730063726104e0,6.63584305383046149253266218214e-1
+0.004994133487343788,0.004494720138609409,1.07975641297165217295864615157e0,7.6735472152591420009147515773e-2
+0.004994133487343788,0.004994133487343788,9.71806787692829356478818100578e-1,-2.8598272374478700172019031199e-2
+0.004994133487343788,0.005493546836078167,8.83440024273724000755605045604e-1,-1.23931873766892402629593770986e-1
+0.004994133487343788,0.009988266974687577,4.85159334683946881557282527287e-1,-7.23277916875675443670790608737e-1
+0.004994133487343788,100.0,1.90652837366542757451972337103e-48,-1.09878800480915473688568358915e2
+0.009284233674407006,0.0000928423396544531,9.22189161395169808121961036375e1,4.52416527372225534852069558666e0
+0.009284233674407006,0.004642116837203503,1.90391665271250331517208508465e0,6.43913160575157373770847096237e-1
+0.009284233674407006,0.008355810306966305,1.0595771897437689078868807112e0,5.7869950950927202960679895446e-2
+0.009284233674407006,0.009284233674407006,9.53666931951231001793172234127e-1,-4.74407964269165213009844657118e-2
+0.009284233674407006,0.010212657041847706,8.66932189886058023986848957894e-1,-1.42794517617828982530204051385e-1
+0.009284233674407006,0.01856846734881401,4.75476951518973993266203586006e-1,-7.43436870266193919027845324535e-1
+0.009284233674407006,100.0,3.62379044444329712425704183698e-48,-1.092365639015863425582148982e2
+0.02417002245783806,0.0002417002251604572,8.28574347772483836163802791456e1,4.41712147765263274214833424708e0
+0.02417002245783806,0.01208501122891903,1.8000399290606500400334877908e0,5.87808847467556328737038910233e-1
+0.02417002245783806,0.021753020584583284,1.00457139045983799359883980509e0,4.56097338940285491767242808261e-3
+0.02417002245783806,0.02417002245783806,9.04231414914085776781723871003e-1,-1.00669961400587000085937588853e-1
+0.02417002245783806,0.026587024331092836,8.21935396386108319151959808742e-1,-1.9609348021881262992408194595e-1
+0.02417002245783806,0.04834004491567612,4.48774932202378353003342517796e-1,-8.01233781497649358144753931688e-1
+0.02417002245783806,100.0,1.01864213681321932576804174877e-47,-1.08203028868727434208786567206e2
+0.06227754056453705,0.0006227754056453705,6.52161544171996584857204561729e1,4.17770720537836385195706359395e0
+0.06227754056453705,0.031138770282268525,1.61413526957833178650533395412e0,4.78799376483548143465231085783e-1
+0.06227754056453705,0.056049786508083346,9.07290678473909039352031340905e-1,-9.72923967776500225857781479083e-2
+0.06227754056453705,0.06227754056453705,8.1683425684275933769653502926e-1,-2.02319072704149210338482611379e-1
+0.06227754056453705,0.06850529462099076,7.42359744105644003415763257874e-1,-2.97921322975950613988564136504e-1
+0.06227754056453705,0.1245550811290741,4.00686364076807618870192688869e-1,-9.1457629217411508831211818354e-1
+0.06227754056453705,100.0,3.18937180976540733923440383409e-47,-1.07061675398154066160070536151e2
+0.12234418094158173,0.0012234417954459787,4.66411183824772276748089088454e1,3.84248252079585126792792800278e0
+0.12234418094158173,0.06117209047079086,1.41782514158233640021359212025e0,3.4912410709460147743177020242e-1
+0.12234418094158173,0.11010976135730744,8.05986779890592059836340672208e-1,-2.15687938730878539580402175148e-1
+0.12234418094158173,0.12234418094158173,7.25863977984922073057539775721e-1,-3.20392639858561526601962284055e-1
+0.12234418094158173,0.13457860052585603,6.59497826122324416449333928946e-1,-4.1627660308141433588787026217e-1
+0.12234418094158173,0.24468836188316346,3.49559503953835577015756840014e-1,-1.05108147728251539367280414553e0
+0.12234418094158173,100.0,8.48088175690131212017125787415e-47,-1.06083684945555296480532452666e2
+0.24955767393112184,0.0024955766275525095,2.46601323142310742345885921809e1,3.2051878632623988402675245026e0
+0.24955767393112184,0.12477883696556092,1.15853575255536493458556902705e0,1.47156925489081189008390856733e-1
+0.24955767393112184,0.22460190951824189,6.74511773009024929869820670609e-1,-3.93766149062598415685551732199e-1
+0.24955767393112184,0.24955767393112184,6.07873247069874876590658407647e-1,-4.9778889396396977650048667977e-1
+0.24955767393112184,0.27451345324516299,5.51965630132163175689480562006e-1,-5.94269498896868409643217243965e-1
+0.24955767393112184,0.49911534786224368,2.81530764288022374254462971778e-1,-1.26751355038258165509530171627e0
+0.24955767393112184,100.0,3.23201418506470881472613470424e-46,-1.04745808748133595283907783609e2
+0.4912221431732178,0.00491222133859992,8.24802060702248476405248769242e0,2.10997324513812415558896909672e0
+0.4912221431732178,0.2456110715866089,8.85966361931770735189335920224e-1,-1.2107629531475421507400811279e-1
+0.4912221431732178,0.442099928855896,5.39766849834636711918245349037e-1,-6.16617992224303450844145988446e-1
+0.4912221431732178,0.4912221431732178,4.87071035107769081683117471007e-1,-7.19345303892178725074184879423e-1
+0.4912221431732178,0.5403443574905396,4.41772945337481416387792448633e-1,-8.16959227224120166911288834827e-1
+0.4912221431732178,0.9824442863464356,2.09459393526398603870119209542e-1,-1.56322538405621212179311164606e0
+0.4912221431732178,100.0,1.98085422369960883052662094123e-45,-1.02932801006952184712027304773e2
+0.9838474988937378,0.009838474914431572,1.05682571503496577708233420595e0,5.5269806854772838908101466039e-2
+0.9838474988937378,0.4919237494468689,6.12623684101009191571630435033e-1,-4.90004423722887125603369943432e-1
+0.9838474988937378,0.885462760925293,4.0941021284828409827047309425e-1,-8.93037660173848947077470763198e-1
+0.9838474988937378,0.9838474988937378,3.70417610138224049104131092849e-1,-9.93124233770553068461840228462e-1
+0.9838474988937378,1.0822322368621827,3.35193108703560809898341793339e-1,-1.09304846934580339869002513257e0
+0.9838474988937378,1.9676949977874756,1.36946109306857935274787676385e-1,-1.98816779326508790780468551349e0
+0.9838474988937378,100.0,3.4206113997604121517794966405e-44,-1.00083924784781511376510407689e2
+1.1576130390167237,0.01157613005489111,5.26040068227217632987295406646e-1,-6.42377893808705184589907731661e-1
+1.1576130390167237,0.5788065195083618,5.52654390886223019863136426148e-1,-5.93022444108407986627479052683e-1
+1.1576130390167237,1.0418517589569092,3.8158378311031863694892747478e-1,-9.6342483740139248558555044613e-1
+1.1576130390167237,1.1576130390167237,3.45563130611065080534180883523e-1,-1.06257993000284316220997961555e0
+1.1576130390167237,1.273374319076538,3.12447418136811942385579203168e-1,-1.16331908592551475900827066671e0
+1.1576130390167237,2.3152260780334474,1.21123579619732410107202843233e-1,-2.11094393540564015419873017842e0
+1.1576130390167237,115.76130676269531,1.20781853410781497279681216252e-50,-1.14940438781583256412137251064e2
+3.4516777992248537,0.03451677784323692,7.98246603682805732349394090449e-5,-9.43567807407613675197657903792e0
+3.4516777992248537,1.7258388996124268,2.15244597912305789254912800964e-1,-1.5359802327961687446499220667e0
+3.4516777992248537,3.1065099239349367,2.28644286911749909036386256742e-1,-1.47558781536232994630931675819e0
+3.4516777992248537,3.4516777992248537,2.09622794883272037569003302984e-1,-1.56244557823447661831554808762e0
+3.4516777992248537,3.7968456745147707,1.87506167631522855388229214898e-1,-1.67394354007787988285734329725e0
+3.4516777992248537,6.903355598449707,3.63431396473876505815610771645e-2,-3.31474982328521124979367410853e0
+3.4516777992248537,345.16778564453127,6.59741963292767598342440335058e-145,-3.31988159876258799563819671362e2
+7.882370948791504,0.07882370799779892,5.91954360312851339098963285972e-12,-2.58527617640706636500677604378e1
+7.882370948791504,3.941185474395752,6.1351852247436154231740244108e-2,-2.79112991679871833271744066371e0
+7.882370948791504,7.0941338539123539,1.49761323367114598052687531091e-1,-1.8987124297059293283021740207e0
+7.882370948791504,7.882370948791504,1.40602379975128434053403520684e-1,-1.96181937247196361482104072572e0
+7.882370948791504,8.670608520507813,1.23181481326995902472802865186e-1,-2.09409655308523879892896916884e0
+7.882370948791504,15.764741897583008,6.25925379819834435988437553222e-3,-5.07369430254096085004964078773e0
+7.882370948791504,788.2371215820313,1.02087494190014778043312901168e-326,-7.50622080270274409924511413029e2
+15.848876953125,0.15848876535892487,1.30353451775926396813209057827e-24,-5.49969627969883140918016847484e1
+15.848876953125,7.9244384765625,9.33705980920489300331727508088e-3,-4.67376387188825904994029922163e0
+15.848876953125,14.263989448547364,1.0173918161583998503346770706e-1,-2.2853427834979910994952769948e0
+15.848876953125,15.848876953125,9.96844926820695337524674280404e-2,-2.30574515391061411242431414858e0
+15.848876953125,17.433765411376954,8.41306921715375487178084449603e-2,-2.47538383004879583392298698014e0
+15.848876953125,31.69775390625,3.85039391819770411812575512987e-4,-7.86216491249546917490832907553e0
+15.848876953125,1584.8876953125,1.86844708822939966096716196273e-653,-1.50296295807334867439188805523e3
+31.31467056274414,0.313146710395813,4.85657689366955796295666786263e-49,-1.11246335709828155033700510398e2
+31.31467056274414,15.65733528137207,3.35853300504037932295432108069e-4,-7.99883609898380942031325920099e0
+31.31467056274414,29.31467056274414,7.10501817232269477156040742681e-2,-2.644368866761412304649549299e0
+31.31467056274414,31.31467056274414,7.11017769524614704290088239088e-2,-2.64364295018620800893384568058e0
+31.31467056274414,33.31467056274414,6.28611796049229568123587306372e-2,-2.76682648219981216031129802393e0
+31.31467056274414,62.62934112548828,2.38625567724336356260415307375e-6,-1.29457850827606769100544321602e1
+31.31467056274414,3131.467041015625,1.26518480972721278176403395134e-1287,-2.9631917964771820772784287842e3
+35.51557540893555,0.3551557660102844,1.15746417826440644887556691768e-55,-1.26495948555676896936204917794e2
+35.51557540893555,17.757787704467775,1.40141685572831605807697116535e-4,-8.87285660731605753654822022266e0
+35.51557540893555,33.51557540893555,6.67480353754142951106342942604e-2,-2.70683041471298796059575465515e0
+35.51557540893555,35.51557540893555,6.67854169318480858871782124774e-2,-2.70627053167597530381393481544e0
+35.51557540893555,37.51557540893555,5.98843533758046279564393017972e-2,-2.81534002040660358238131381349e0
+35.51557540893555,71.0311508178711,6.17570774458908171847915732658e-7,-1.42974721605036665085796494082e1
+35.51557540893555,3551.5576171875,7.21399599981102877050071556021e-1460,-3.35979821274332910526773636504e3
+95.06404113769531,0.9506404399871826,2.27180357167570016104738739665e-149,-3.42264604815120101615377180857e2
+95.06404113769531,47.532020568847659,8.67596075222181392218703181677e-10,-2.08652948607041552307472885329e1
+95.06404113769531,93.06404113769531,4.08778930529965742960855901018e-2,-3.19716587421440587628789091758e0
+95.06404113769531,95.06404113769531,4.08809733726904865763724736472e-2,-3.19709052288359530227148579046e0
+95.06404113769531,97.06404113769531,3.9216462040390469693222662796e-2,-3.23865867033008525927260873155e0
+95.06404113769531,190.12808227539063,4.38359709101285342706309762837e-15,-3.3060906753910691623795683048e1
+95.06404113769531,9506.404296875,2.79552840456163878881751202985e-3901,-8.98135642662752308843155737424e3
+230.1575469970703,1.0,4.63119369540072208572235811286e-444,-1.02081496663690623282854989591e3
+230.1575469970703,115.07877349853516,2.59729420271490017482301274208e-21,-4.73998167410061722199113275598e1
+230.1575469970703,228.1575469970703,2.6286616967605595623304695311e-2,-3.63869532985920030720802163749e0
+230.1575469970703,230.1575469970703,2.62869506880608274317194999471e-2,-3.63868263448887954024912985051e0
+230.1575469970703,232.1575469970703,2.5836308213483151178798341729e-2,-3.65597448127000288287974314382e0
+230.1575469970703,460.3150939941406,2.79822711183438409602106986749e-33,-7.49563220265067431105869321412e1
+230.1575469970703,23015.75390625,1.19142051863826520845703887634e-9439,-2.17339255464624414189352048982e4
+460.8717956542969,1.0,1.21184469494222643930222083337e-1027,-2.36456274676493497204666734941e3
+460.8717956542969,230.43589782714845,8.14471101425971516230455167518e-41,-9.2308620051471297786497465304e1
+460.8717956542969,458.8717956542969,1.85797601602696539472141363408e-2,-3.98568245416901422014786778244e0
+460.8717956542969,460.8717956542969,1.85798187305377176848045565281e-2,-3.98567930180454658753155955474e0
+460.8717956542969,462.8717956542969,1.84196619229876861635856394316e-2,-3.99433660212429498895356569525e0
+460.8717956542969,921.7435913085938,3.5495100232178593709923741942e-64,-1.46098636379286232888565653806e2
+460.8717956542969,46087.1796875,5.73966126772094294572126505561e-18898,-4.35125056872054773432640303096e4
+664.0791015625,1.0,6.40268778447486845989603105299e-1586,-3.65004323962002780492753139539e3
+664.0791015625,332.03955078125,6.10929744891802178265637504509e-58,-1.31740123610892761908058003469e2
+664.0791015625,662.0791015625,1.54790749222372038225607291553e-2,-4.16826617215162903909247260999e0
+664.0791015625,664.0791015625,1.54790983928259888220020190288e-2,-4.1682646558742604655436579171e0
+664.0791015625,666.0791015625,1.53863046230205106491979551869e-2,-4.17427747542693719525070698803e0
+664.0791015625,1328.158203125,2.45784999089226239125163380474e-91,-2.08635956482105759023029312365e2
+664.0791015625,66407.90625,1.46751341227324360404413135007e-27228,-6.26944033426296586981021541772e4
+1169.2916259765626,1.0,1.66326577024064280935505028565e-3079,-7.08915071832749012313438392853e3
+1169.2916259765626,584.6458129882813,1.92550673207139250825572436588e-100,-2.29603320128866032207611651562e2
+1169.2916259765626,1167.2916259765626,1.16658794035500021641237777582e-2,-4.45108698813340425912016115337e0
+1169.2916259765626,1169.2916259765626,1.16658851015703123899904386916e-2,-4.45108649969882324185414215343e0
+1169.2916259765626,1171.2916259765626,1.16260853869427865481207487486e-2,-4.45450396524837417979636001212e0
+1169.2916259765626,2338.583251953125,8.72649610935755828674581195866e-159,-3.63944665858812864276096632745e2
+1169.2916259765626,116929.1640625,5.97518006723716133961504363753e-47940,-1.10384141743900410527023560927e5
+2057.796630859375,1.0,1.60183882289797978650803452059e-5924,-1.36400429386630683374702189047e4
+2057.796630859375,1028.8983154296876,4.28125616204942043042876601198e-175,-4.01498144811619818610539510214e2
+2057.796630859375,2055.796630859375,8.7940956326099053289363062677e-3,-4.73367473352600691513093322808e0
+2057.796630859375,2057.796630859375,8.79409701846338427820012131349e-3,-4.73367457593693492316621859069e0
+2057.796630859375,2059.796630859375,8.77702908736705232783527929539e-3,-4.73561730133332158830841856191e0
+2057.796630859375,4115.59326171875,2.58196565184284024125617438652e-277,-6.36867519769941551235792926967e2
+2057.796630859375,205779.65625,1.81112170763245223544910652056e-84364,-1.94254694838968370701022408553e5
+5823.5341796875,1.0,3.05447398695379834364959210123e-19397,-4.4662126441408735282745203927e4
+5823.5341796875,2911.76708984375,3.35159380259695408641919350876e-491,-1.12935984466540905809844701636e3
+5823.5341796875,5821.5341796875,5.22769845086648197315532996501e-3,-5.25378416451902811788142421282e0
+5823.5341796875,5823.5341796875,5.22769855366697271832305199072e-3,-5.25378414485444901092001736538e0
+5823.5341796875,5825.5341796875,5.22410976575202240457245726114e-3,-5.25447087540792108829413263656e0
+5823.5341796875,11647.068359375,2.22325863737445498308859779681e-779,-1.79291481346804983992339301837e3
+5823.5341796875,582353.4375,1.07421322141939721264129795001e-238741,-5.49721396097984892826101592751e5
+9113.3095703125,1.0,1.78731073919556385742147280768e-32127,-7.39745705705098956796288073439e4
+9113.3095703125,4556.65478515625,2.96883953283370135752999071335e-767,-1.7649945951796587874652297488e3
+9113.3095703125,9111.3095703125,4.17895822314217790504393700197e-3,-5.47769329242151355439356717195e0
+9113.3095703125,9113.3095703125,4.17895825669428847752095043306e-3,-5.47769328439269186099145632937e0
+9113.3095703125,9115.3095703125,4.17712467183260551388750685286e-3,-5.47813214669379524751535584486e0
+9113.3095703125,18226.619140625,6.91067088018224812455714949926e-1218,-2.80261557654537659625675316386e3
+9113.3095703125,911330.9375,1.26717950380279091050027178995e-373606,-8.60259369459565882655957834247e5
+31387.41015625,1.0,1.92894468779232039159827541612e-127509,-2.93599665649518290614250717061e5
+31387.41015625,15693.705078125,6.18207079759240812324462924915e-2636,-6.06779265183644519138784537152e3
+31387.41015625,31385.41015625,2.25180703281771929183975314146e-3,-6.0960222594019155640452949889e0
+31387.41015625,31387.41015625,2.25180703434161982485535251069e-3,-6.09602225872516995028234581783e0
+31387.41015625,31389.41015625,2.2515200938314538795978691807e-3,-6.09614969362047619919202723354e0
+31387.41015625,62774.8203125,1.67653383235603586902007551878e-4186,-9.63810447080600514851271932012e3
+31387.41015625,3138741.0,4.52256079935610319169669318043e-1286737,-2.96281992572549741509294993819e6
+53731.765625,1.0,1.86894991915514269087868073024e-230827,-5.31498183883803998304333085275e5
+53731.765625,26865.8828125,2.33511163856409802527937721719e-4510,-1.03838107097022198593908016979e4
+53731.765625,53729.765625,1.72105138170326040907799036426e-3,-6.36481990647309687847249668728e0
+53731.765625,53731.765625,1.72105138210068663211029171758e-3,-6.36481990624217627539724365159e0
+53731.765625,53733.765625,1.72092326794417135795112682192e-3,-6.36489434848513281089610212547e0
+53731.765625,107463.53125,2.50393526202257795927594311035e-7164,-1.64948017426102644931599927894e4
+53731.765625,5373176.5,1.87001045980733942094739589842e-2202747,-5.07201177989333081762111957587e6
+117454.09375,1.0,3.94800148510213831283402137453e-544466,-1.25367792203259834054161084157e6
+117454.09375,58727.046875,9.86437743293966583639675832937e-9856,-2.26919897465205042396529126734e4
+117454.09375,117452.09375,1.1640608375309532135023251428e-3,-6.75584066511864368337522784549e0
+117454.09375,117454.09375,1.16406083758720748411911813817e-3,-6.7558406650703177979904462402e0
+117454.09375,117456.09375,1.16402119556479452779668918128e-3,-6.75587472059057205305082986308e0
+117454.09375,234908.1875,2.02062345552631914044665924036e-15656,-3.60485688098096363959430682191e4
+117454.09375,11745409.0,3.98329865046804230586235195207e-4815054,-1.10870701802510689709802396171e7
+246209.65625,1.0,9.69261445291229668565952913262e-1220463,-2.81021763898659308491036329225e6
+246209.65625,123104.828125,2.89790631676658488201440175265e-20656,-4.75611336923684893137284172572e4
+246209.65625,246207.65625,8.0400246067969543632632589673e-4,-7.12590822824310632721679826237e0
+246209.65625,246209.65625,8.04002460688537619004777106735e-4,-7.12590822823210862122603861025e0
+246209.65625,246211.65625,8.03989398778095252980507693395e-4,-7.12592447447162252762898473213e0
+246209.65625,492419.3125,3.98914735123943709153687679382e-32815,-7.55579462490879749035140348201e4
+246209.65625,24620966.0,1.10042150384593843644801035155e-10093408,-2.32409307026135529373618353366e7
+513669.1875,1.0,3.58290702205211923228928954062e-2710317,-6.24073424531385467827674655957e6
+513669.1875,256834.59375,1.14852347434219378997439750833e-43091,-9.92205557650243532211053339528e4
+513669.1875,513667.1875,5.56632087166530076651005884626e-4,-7.49360606201356026922654805875e0
+513669.1875,513669.1875,5.56632087167936485657767495221e-4,-7.49360606201103362902885663054e0
+513669.1875,513671.1875,5.56627752637704125417703707215e-4,-7.49361384910633231310070373899e0
+513669.1875,1027338.375,3.83856687272150316368139628121e-68458,-1.5762902519709966884615272376e5
+513669.1875,51366920.0,8.15241164285521081176703191663e-21057954,-4.84877288710405457082500204585e7
+788352.3125,1.0,1.13042362577357104844935273757e-4306314,-9.91565429955910831009265443173e6
+788352.3125,394176.15625,6.16486381249518203689391082993e-66133,-1.52275041088929281538103999851e5
+788352.3125,788350.3125,4.49313892559615440770570283038e-4,-7.70778882191300348789686188565e0
+788352.3125,788352.3125,4.49313892560097409651126697258e-4,-7.70778882191193081044678235671e0
+788352.3125,788354.3125,4.49311612807349147900630402413e-4,-7.7077938957780399956162606959e0
+788352.3125,1576704.625,9.67428768458771437415134493845e-105064,-2.41916530738714542323516893714e5
+788352.3125,78835232.0,1.26694805761756572009011930808e-32318630,-7.44163954273792505217583847215e7
+1736170.0,1.0,2.91440091559576999572966210534e-10078982,-2.32077126360910316815283738454e7
+1736170.0,868085.0,1.14787597700871762075794855711e-145638,-3.35343749860208728575106284123e5
+1736170.0,1736168.0,3.02770753161172593850456841592e-4,-8.10253462904089066905946246556e0
+1736170.0,1736170.0,3.02770753161239557430982353437e-4,-8.1025346290406694998090432944e0
+1736170.0,1736172.0,3.02770055602357818841759928332e-4,-8.10253693296097228892851624437e0
+1736170.0,3472340.0,2.38237372709895022436191178494e-231374,-5.32757455209049352763893333963e5
+1736170.0,173616992.0,8.06817543968683946469074253023e-71174559,-1.63885476465897826203017291766e8
diff --git a/commons-numbers-gamma/src/test/resources/org/apache/commons/numbers/gamma/igamma_extra_data.csv b/commons-numbers-gamma/src/test/resources/org/apache/commons/numbers/gamma/igamma_extra_data.csv
new file mode 100644
index 0000000..4d8d94e
--- /dev/null
+++ b/commons-numbers-gamma/src/test/resources/org/apache/commons/numbers/gamma/igamma_extra_data.csv
@@ -0,0 +1,48 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Extra data generated to hit edges cases not covered by the Boost data.
+# Computed using:
+# maxima (https://maxima.sourceforge.io/)
+# casio online calculator (https://keisan.casio.com/)
+# a, z, tgamma(a, z), gamma_q(a, z), tgamma_lower(a, z), gamma_p(a, z)
+
+# a < 1, -z < log(min_value) [-708]
+0.75,708.0,6.409813425393641255553404575924639044197790412226977417173234062e-309,5.230721445610283979268090490474893301977040635558636827180455673e-309,1.225416702465177645129098303362890526851239248108070611230118938e0,1.0e0
+0.75,708.5,3.887063237660512963742953490421613963093830398973678099576440341e-309,3.172033831300720867625854086479106960233021311192797788740041109e-309,1.225416702465177645129098303362890526851239248108070611230118938e0,1.0e0
+0.75,707.5,1.056985974878217901731602039632859305994608181910226925662097541e-308,8.625522834411129657670836754143791378329772171638016549093607922e-309,1.225416702465177645129098303362890526851239248108070611230118938e0,1.0e0
+
+# z < 1, a * log(z) <= log(min_value) [-708]
+# log(2^-15) = -10.4
+68.0,0.000030517578125,3.64711109181886852882498590966054644271676353140495245937016285e94,1.0e0,1.3088276116249396670612024410231729703264303553044E-309,0.0e0
+68.5,0.000030517578125,3.001961515104231153859872000528553070172759377822251936419498716e95,1.0e0,7.1775432951048463147633044753756990243151654529203E-312,0.0e0
+69.0,0.000030517578125,2.480035542436830599600990418569171581047399201355367672371710738e96,1.0e0,3.9363375468892293222575239211174770224055100366732E-314,0.0e0
+
+# log(2^-29) = -20.1
+35.0,0.000000001862645149230957,2.9523279903960414084761860964352e38,1.0e0,8.137412953518821268641550262070624928659609111936E-308,0.0e0
+35.5,0.000000001862645149230957,1.7403941995805607122709076359310756516301821391523578359487628e39,1.0e0,3.4625105878983898551147520581053128532780603285961E-312,0.0e0
+36.0,0.000000001862645149230957,1.03331479663861449296666513375232e40,1.0e0,1.4736081854997019963419585363578563985805831524694E-316,0.0e0
+
+# log(2^-43) = -30.498475944637594
+23.5,0.00000000000005684341886080802,5.361303587544414733427498385610815571783645700116779285413382068e21,1.0e0,2.3116209467535372174684494825230402650291031564007E-313,0.0e0
+24.0,0.00000000000005684341886080802,2.585201673888497664e22,1.0e0,5.3965143609750394564058897125495969222159621262975E-320,0.0e0
+24.5,0.00000000000005684341886080802,125990634307293746235546.21206185416593691567395274,1.0e0,1.2603715455133179939440109168413192481198896062245E-326,0.0e0
+
+# Case 2:
+# Compute P with invert=true, !normalised, a >= 1 and
+# max_value / a > (tgamma(a) / fullIgammaPrefix(a, z))
+95.0,0.019775390625,1.087366156656743080273652852567866010041868035801828723074973744e146,1.0e0,1.3984896582935513723375326848106516618627331405909E-164,1.286125790960241325335966818346380278726598329729196016228498799e-310
+95.0,0.02001953125,1.087366156656743080273652852567866010041868035801828723074973744e146,1.0e0,4.4853208796388385762621902800471152319902746024095E-164,4.124940667115827152229809111105346180293226304522707786346118807e-310
+95.0,0.020263671875,1.087366156656743080273652852567866010041868035801828723074973744e146,1.0e0,1.4183760616546342760031392252416601565062418956813E-163,1.304414389735677053993345313892741145588083794177942355902790892e-309
diff --git a/commons-numbers-gamma/src/test/resources/org/apache/commons/numbers/gamma/igamma_int_data.csv b/commons-numbers-gamma/src/test/resources/org/apache/commons/numbers/gamma/igamma_int_data.csv
new file mode 100644
index 0000000..ec5a075
--- /dev/null
+++ b/commons-numbers-gamma/src/test/resources/org/apache/commons/numbers/gamma/igamma_int_data.csv
@@ -0,0 +1,163 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# (C) Copyright John Maddock 2006.
+# Use, modification and distribution are subject to the
+# Boost Software License, Version 1.0. (See accompanying file
+# LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+# Extracted from: boost/libs/math/test/igamma_int_data.ipp
+# a, z, tgamma(a, z), gamma_q(a, z), tgamma_lower(a, z), gamma_p(a, z)
+
+0.5,0.004999999888241291046142578125,1.631267845368323485191815380032984903074365412587098308286220239190324188420710121791871591309590004,0.9203443263332001265162236927545643793578786527087679769237787431564844748135321134774112708209554194,0.1411860055371925421063521033081602797231840435352888199275875506625870961703220596656577919527041757,0.07965567366679987348377630724543562064212134729123202307622125684351552518646788652258872917904458057
+0.5,0.25,0.8498918380799311297867616098602389766300312781938048348528626579829435160004444680322048858624092311,0.479500122186953462317253346108035471263548424242036299941194274352806478283146429109461900411394659,0.9225620128255848975114058734809062061675181779285822933609451318699677685905877134253244973998849491,0.520499877813046537682746653891964528736451575757963700058805725647193521716853570890538099588605341
+0.5,0.449999988079071044921875,0.6075647752751784703583581789426278456752564880945645704809989500539948786183333019925969429005007538,0.3427817175407890768272360273834711985342418909050114189064883223090985450970247707985828865357086527,1.164889075630337556939809304398517337122292968027822557732808839798916405972698879464932440361793426,0.6572182824592109231727639726165288014657581090949885810935116776909014549029752292014171134642913473
+0.5,0.5,0.5624182315944071242794949573020430690267675647965080152711827351225288269777202721053138351861008813,0.3173105078629141028295349087359241550441740665467912180252110995140171160255903409776584970430004241,1.210035619311108903018672526039102113770781891325879112942625054730382457613311909352215548076193299,0.6826894921370858971704650912640758449558259334532087819747889004859828839744096590223415029569995759
+0.5,0.550000011920928955078125,0.5215730804923022694296157870452972118167645274078781347659207691038036243173236920652888890778334457,0.2942660990726723860419838415374453483460616872211918064199672606812661428450855377898215276021760526,1.250880770413213757868551696295847970980784928714508993447887020749107660273708489392240494184460734,0.7057339009273276139580161584625546516539383127788081935800327393187338571549144622101784723978239474
+0.5,1.0,0.2788055852806619764992326110774391720885500824971744701584987919357006294674865183689945658651387992,0.1572992070502851306587793649173907407039330020336970915400621021652827459039891587248999441840165472,1.493648265624854050798934872263706010708999373625212658055308997917210655123545663088534817397155381,0.8427007929497148693412206350826092592960669979663029084599378978347172540960108412751000558159834528
+0.5,100.0,0.3701747860408278920253566448133907572136210252033768764800615129976497004743801458060294976199881689e-44,0.2088487583762544757000786294957788611560818119321163727012213713938174695833440290513463628030792355e-44,1.772453850905516027298167483341145182797549452420639267805528869599344836457124609321319131228525415,0.999999999999999999999999999999999999999999997911512416237455242999213705042211388439181880678836273
+1.0,0.00999999977648258209228515625,0.9900498339704614360382138392834551161113407838357779440886813669674202814166581683103367609018741592,0.9900498339704614360382138392834551161113407838357779440886813669674202814166581683014245491001600443,0.009950166029538563961786160716544883888659216164222055911318633032579718583341831698248133897676852056,0.009950166029538563961786160716544883888659216164222055911318633032579718583341831698575450899839955738
+1.0,0.5,0.6065306597126334236037995349911804534419181354871869556828921587350565194137484240072325063075404673,0.606530659712633423603799534991180453441918135487186955682892158735056519413748423985704188802918523,0.393469340287366576396200465008819546558081864512813044317107841264943480586251576001352388492010544,0.393469340287366576396200465008819546558081864512813044317107841264943480586251576014295811197081477
+1.0,0.89999997615814208984375,0.4065696694339752855534404747740105862953642332665029835031979841616081291898465027056760538362422369,0.4065696694339752855534404747740105862953642332665029835031979841616081291898465026775698931385242319,0.5934303305660247144465595252259894137046357667334970164968020158383918708101534973029088409633087743,0.5934303305660247144465595252259894137046357667334970164968020158383918708101534973224301068614757681
+1.0,1.0,0.3678794411714423215955237701614608674458111310317678345078368016974614957448998033087215393207514013,0.3678794411714423215955237701614608674458111310317678345078368016974614957448998033055633330193769539,0.63212055882855767840447622983853913255418886896823216549216319830253850425510019669986335547879961,0.6321205588285576784044762298385391325541888689682321654921631983025385042551001966944366669806230461
+1.0,1.10000002384185791015625,0.3328710757618145679671571848455601132593649668322841328963855852147267744456382506080158515376624924,0.332871075761814567967157184845560113259364966832284132896385585214726774445638250618965856020172342,0.6671289242381854320328428151544398867406350331677158671036144147852732255543617494005690432618885189,0.667128924238185432032842815154439886740635033167715867103614414785273225554361749381034143979827658
+1.0,2.0,0.1353352832366126918939994949724844034076315459095758814681588726540733741014876899370981224906570488,0.1353352832366126918939994949724844034076315459095758814681588726540733741014876899415500621934116259,0.8646647167633873081060005050275155965923684540904241185318411273459266258985123100714867723088939625,0.8646647167633873081060005050275155965923684540904241185318411273459266258985123100584499378065883741
+1.0,100.0,0.3720075976020835962959695803863118337358892292376781967120613876663290475895815718157118778642281497e-43,0.37200759760208359629596958038631183373588922923767819671206138766632904758958157182794930297528019e-43,0.9999999999999999999999999999999999999999999627992402397916403704030419613688166264196619710317313401,0.9999999999999999999999999999999999999999999627992402397916403704030419613688166264110770762321803288
+4.5,0.04500000178813934326171875,11.63172821024549441698223162601989743958836118115278238773312379208547617681782066799483071466068875,0.9999999839815762404539939126624023829295483903490073208372721857918957147514500440457971141443476684,0.1863219545121619924834063678225205571246503831411699898288242541283108286160415992612505831218724607e-6,0.1601842375954600608733759761707045160965099267916272781420810428524854995595420288585565233163730242e-7
+4.5,2.25,10.18403214286566234526019345802929635910911247967051220522868706375276166311515909530042932735839335,0.8755390252983378432498497196860962665082171215981371572250371700817082375787028909649723325825612257,1.447696253701786583884030651396968902999805826132653323674426557156968642013490188736000648552878518,0.1244609747016621567501502803139037334917828784018628427749628299182917624212971090350276674174387743
+4.5,4.05000019073486328125,6.09619930418143348416524470101117228128122328067345332825921779733679304342948890732050183956106854,0.5241008985371801309146383358952143428740875054170474426280841553357280361181152065130979676546783232,5.535529092386015444978979408415092980827695025129712200643895823572937261699160376715928136350203327,0.4758991014628198690853616641047856571259124945829525573719158446642719638818847934869020323453216768
+4.5,4.5,5.086254600275426697913639521658010730996650663525051864372270593095170813752910875972462124348963572,0.4372741889138670641009400424805416858000898092452887404106985701939067450505769204643336461025544414,6.545473796292022231230584587768254531112267642278113664530843027814559491375738408063967851562308295,0.5627258110861329358990599575194583141999101907547112595893014298060932549494230795356663538974455586
+4.5,4.94999980926513671875,4.171619037527984520106404613863040137459486720891266230650903452565397410131822886149880468009497741,0.358641372571856074939053294589508679033634983899266698915641630338280455365687643506844120103652795,7.460109359039464409037819495563225124649431584911899298252210168344332894996826397886549507901774126,0.641358627428143925060946705410491320966365016100733301084358369661719544634312356493155879896347205
+4.5,9.0,0.4091290578259129167084715853082353502626692647486120256202132894658723311868270942796421924196065643,0.03517353946698479370199687053093014862983302800603394447087367382013309253731519097199460653264692538,11.2225993387415360124357525241180299118462490410545535032829003314438579739418221897567877834916653,0.9648264605330152062980031294690698513701669719939660555291263261798669074626848090280053934673530746
+4.5,450.0,0.7196318925241676790109647122732225514004728234306601365503952006972497663734022332093732557969025565e-186,0.6186801032394573312940670423335380296959282495326244342840235902543792488308251923279019916234142554e-187,11.63172839656744892914422410942626526210891830580316552890311362090973030512864928403642997591127187,1.0
+5.0,0.0500000007450580596923828125,23.99999994004916350633644961260122656653664491185268165244451756481952788144669061826601838078812299,0.9999999975020484794306854005250511069390268713271950688518548985341469950602786506533530129487017602,0.5995083649366355038739877343346335508814731834755548243518047211855331238431950262301489615187855928e-7,0.2497951520569314599474948893060973128672804931148145101465853004939721349346646987051298239750878608e-8
+5.0,2.5,21.38827245393962981636031524084932742973783628208471181487292583987325071465208671448266485830519579,0.8911780189141512423483464683687219762390765117535296589530385766613854464438367758291769089731179492,2.611727546060370183639684759150672570262163717915288185127074160126749285347916288102856145497823352,0.1088219810858487576516535316312780237609234882464703410469614233386145535561632241708230910268820508
+5.0,4.5,12.7704858329931714614725418087195748313701092021032548034028349273176889749341215454498260899815839,0.5321035763747154775613559086966489513070878834209689501417847886382370406222547436524965080056891442,11.22951416700682853852745819128042516862989079789674519659716507268231102506588145713569491382143525,0.4678964236252845224386440913033510486929121165790310498582152113617629593777452563475034919943108558
+5.0,5.0,10.57183884156509787462195997591987764644499890792012904014937903754044682698277371959369884656291927,0.4404932850652124114425816656633282352685416211633387100062241265641852844576157558256487654577723022,13.42816115843490212537804002408012235355500109207987095985062096245955317301722928299182215724009988,0.5595067149347875885574183343366717647314583788366612899937758734358147155423842441743512345422276978
+5.0,5.5,8.580432058270212656966234830489048321441708054685433321182252592334448446721753741667920409614551336,0.3575180024279255273735931179370436800600711689452263883825938580139353519467398887190411618148282154,15.41956794172978734303376516951095167855829194531456667881774740766555155327824926091760059418846781,0.6424819975720744726264068820629563199399288310547736116174061419860646480532601112809588381851717846
+5.0,10.0,0.7020645138470657441463871966283546367191653262325606846222786705870550558435704834746466702985365058,0.0292526880769610726727661331928481098632985552596900285259282779411272939934821157090356236963392941,23.29793548615293425585361280337164536328083467376743931537772132941294494415643251911087433350448264,0.9707473119230389273272338668071518901367014447403099714740717220588727060065178842909643763036607059
+5.0,500.0,0.4488697730198279270014087935779332513461985555302178400984791023118393639647158471228961467234795536e-206,0.1870290720915949695839203306574721880609160648042574333743662926299330683186316811671353639020700731e-207,24.00000000000000000000000000000000000000000000000000000000000000000000000000000300258552100380301914,1.0
+8.5,0.085000000894069671630859375,14034.40729348332597683709082089397938947082951078273372283890406365346315997830789903731495780802164,0.9999999999999938279022636529759259686788151196749348834678540104000240548960293173305107805271248809,0.8662173348708113564879084246223256289818562825896457543331130378647651698396085258692890196362671152e-10,0.6172097736347024074031321184880325065116532145989599975945103970682669489219472875119077752586483254e-14
+8.5,4.25,13398.02611556486261656519607014407040013307010409888898043369516324190546471704361222760825179948947,0.9546556427634788361102495083939179307956584074020191267048394174113457749206968247380407667019708046,636.3811779185499820053818318855577801802216392467429280334678649869910065650507633266906668611190987,0.04534435723652116388975049160608206920434159259798087329516058258865422507930317526195923329802919545
+8.5,7.650000095367431640625,8054.103015923469209837900656383346293994763127034685647011666389839598808773004782279936119536547422,0.5738826619107189324870222439209789471072353870626357940206528413726551137628061821428968526905863248,5980.304277559943388732677245646281886318528616310946261455496638389297662509089593274362799124061145,0.4261173380892810675129777560790210528927646129373642059793471586273448862371938178571031473094136752
+8.5,8.5,6376.759101295021456337303820746054585087015067521626463802044215041631715663748360323703460292800449,0.4543661137906363847016048969089946512162386170012576111346724358984223716784534102921782488634614219,7657.648192188391142233274081283573595226276675824005444665118813187264755618346015230595458367808118,0.5456338862093636152983951030910053487837613829987423888653275641015776283215465897078217511365385781
+8.5,9.3500003814697265625,4856.201041985890295975071614780753073865978989810261110175975652721427895587489346332702495579966446,0.3460210994618039219480697300093915749627105596536157299373014903896477221607016661374469354919695395,9178.206251497522302595506287248875106447312753535370798291187375507468575694605029221596423080642121,0.6539789005381960780519302699906084250372894403463842700626985096103522778392983338625530645080304605
+8.5,17.0,117.8346090840893084178053642198781750440584425703207167706619826572853421777546878511803698206227762,0.008396122944130556722290584924449112662756825312131019511304467435544622182743135302677732395312034933,13916.57268439932329015277253780975000526923330077531119169650104557161112910433968770311854883998579,0.9916038770558694432777094150755508873372431746878689804886955325644553778172568646973222676046879651
+8.5,850.0,0.6670782232751103251596111986495271866428233031128299793717854900160169024185809119064510164504617311e-347,0.4753162775779311547951717390014647469330765650819847441097078096533260879760478891033055186258358972e-351,14034.40729348341259857057790202962818031329174334563190846716302822889647128209437555429891866060857,1.0
+9.0,0.0900000035762786865234375,40319.99999999996030125065652373437331304590106001929156292487320950118655183517229729467586450286251,0.9999999999999990154080023939418247349465749270838117947153986411086603807498392677784232391922103959,0.3969874934347626562668695409893998070843707512679049881344816648072317397499073296196845258814027859e-10,0.9845919976060581752650534250729161882052846013588913396192501607322215767608077896041018200906107908e-15
+9.0,4.5,38696.82516072423952355706046040199814503747029763913999664139325564202231313424946996196835932831684,0.9597426875179622897707604280853670174860483704771612102341615390784231724487200023672016425087257103,1623.174839275760476442939539598001854962529702360860003358606744357977686867403550506682495907507633,0.04025731248203771022923957191463298251395162952283878976583846092157682755127999763279835749127428969
+9.0,8.1000003814697265625,23328.81026793695624997910761458825241844584711605221405377315554020087409799879732429012445630769103,0.5785915245024046688982913594887959429178037479179616580796913576438708853669391964979037887321261409,16991.18973206304375002089238541174758155415288394778594622684445979912590200285569617852639892813345,0.4214084754975953311017086405112040570821962520820383419203086423561291146330608035020962112678738591
+9.0,9.0,18371.91300627992311613474965070308734871070902940540801943084535447015551739359979803948312987599234,0.4556526043224187280787388306225964124184203628324753973073126327993590158084308256453020319784733739,21948.08699372007688386525034929691265128929097059459198056915464552984448260805322242916772535983214,0.5443473956775812719212611693774035875815796371675246026926873672006409841915691743546979680215266261
+9.0,9.8999996185302734375,13877.799172052158434501174306328657751917969824275897916292773962598300200139305593969624214338983,0.3441914477195475802207632516450559958312988547687474681620231637549181597257208942761352456216558902,26442.20082794784156549882569367134224808203017572410208370722603740169979986234742649902664089684147,0.6558085522804524197792367483549440041687011452312525318379768362450818402742791057238647543783441098
+9.0,18.0,284.4982888269366160877517511252798455244028043822653104845308033312273987827926604521949427819652366,0.007056009147493467660906541446559519978283799711861738851302847304841949374574125956866063564974443447,40035.50171117306338391224824887472015447559719561773468951546919666877260121886036001645591245385924,0.9929439908525065323390934585534404800217162002881382611486971526951580506254258740431339364350255566
+9.0,900.0,0.5926245805028194096046641666744185620899605952111155892295120431029813271130855411472723676020689805e-367,0.1469803027040722742075059937188538100421529253995822393922400900553029085102085157260496058195358159e-371,40320.00000000000000000000000000000000000000000000000000000000000000000000000165302046865085523582448,1.0
+12.5,0.125,136843365.4655658572552832108710781298837797782743070196644786942067000763272295928128074707860359726,0.9999999999999999999973208812679129139294956056134857683730770608400891033370414969480772869888334185,0.3666196237806365401262424499185233610246580977350430222810467436716103864309508576100159651900479157e-12,0.2679118732087086070504394386514231626922939159910896662958503051922713011166581494211385930044649959e-20
+12.5,6.25,134388480.8348861198942052583624979739301466738655918286054043179133685225593287078568623470331726701,0.9820606236749017663807192707405338778700064351721085883766267815658460169631346032239469936514779267,2454884.630679737361444572132360792493759346858633714420099034391066596790181931699616734139294253291,0.01793937632509823361928072925946612212999356482789141162337321843415398303686539677605300634852207334
+12.5,11.25,83027628.16981147712375563451033436655437271770891097986620758512457999554746790704981173672571558316,0.6067347721779311900721361379468091439464114517216831148497311096636630527642744678296329544090654199,53815737.29575438013189419598452439986953330301531456315929576717985512380204273250666734444675134028,0.3932652278220688099278638620531908560535885482783168851502688903363369472357255321703670455909345801
+12.5,12.5,63272768.13751895464258795290545161333864191418938437646234170610660866375871319512717114875416932903,0.4623736629266136790024432589792019686354588142002833695517147973817691441435368874792553281999201132,73570597.32804690261306187758940715308526410653484116656316164619782645559079744442930793241829759441,0.5376263370733863209975567410207980313645411857997166304482852026182308558564631125207446718000798868
+12.5,13.75,45346885.09422811486658694309600617993749255628538664364547804938729523276990649428521561499639323683,0.3313780316637917920196119406319880633992936874126714113490597824450097093678546877611635257158571186,91496480.37133774238906288739885258648641346443883889938002530291713988657960414527126346617607368661,0.6686219683362082079803880593680119366007063125873285886509402175549902906321453122388364742841428814
+12.5,25.0,291634.0009284780453292067517573397586842917452779710909635632059087586245211603178769195818161764942,0.002131151919103176651421229050736255386147703297527935085263815602097869498819238660830130173071480489,136551731.4646373792103206237431014266652217289789475719345397890985263607249894792386021615906507469,0.9978688480808968233485787709492637446138522967024720649147361843979021305011807613391698698269285195
+12.5,1250.0,0.5628251838370822093670984549813087655823566109419034942886891209494234710050575637479118869427495642e-507,0.411291538995879873328878609309656920676985362275527041419982584635789356289490443028297038424111637e-515,136843365.4655658572556498304948587664239060207242255430255033523044351193495106395564790811724669234,1.0
+13.0,0.12999999523162841796875,479001599.9999999999997935044119758872017543686979717359487267304675573748752553442191357808632655649,0.9999999999999999999995689041789753671005574275701203001174249323333311932023985019238725430971056006,0.2064955880241127982456313020282640512732695324426251261419937408619736604156877680428486714937330842e-12,0.4310958210246328994425724298796998825750676666688067976014980761274569028943994324163838490197552124e-21
+13.0,6.5,471324812.7573446522734391013173479981711440350239466084047496559556554645949851471568565525252985193,0.9839733578287518293747643041638023717898730088249112495756791959685634966428543264700094539465652269,7676787.242655347726560898682652001828855964976053391595250344044344535406412190803141201998382733319,0.01602664217124817062523569583619762821012699117508875042432080403143650335714567352999054605343477306
+13.0,11.69999980926513671875,292302230.0070816725963746814544762636696872449572392926743002189206720871146379793884644857870608234,0.6102322622869770635345992194065244535084793974743284629410428251610685373736466383236007293439402457,186699369.9929183274036253185455237363303127550427607073256997810793279128867593585715332687366204292,0.3897677377130229364654007805934755464915206025256715370589571748389314626263533616763992706560597543
+13.0,13.0,221827914.8283426812449459618039906537723573924659330648043327121351752797310404569796170445996717871,0.4631047470996812562733526606257487527648287447597942570637190191748321503162961920101893109881448021,257173685.1716573187550540381960093462276426075340669351956672878648247202703568809803807099240094655,0.5368952529003187437266473393742512472351712552402057429362809808251678496837038079898106890118551979
+13.0,14.30000019073486328125,157870572.9946750210561331758305711988362338633785606617656456973172395769927459457056301224641362476,0.329582558794532254289198983532771495619709544558015384010503717142572335862974894377941612540757116,321131027.005324978943866824169428801163766136621439338234354302682760423008651392254367632059545005,0.670417441205467745710801016467228504380290455441984615989496282857427664137025105622058387459242884
+13.0,26.0,862321.9649085756573800795187107689377787187372682479262292804996623980360097518564772688401806784177,0.001800248610669725648891526706196323640210635491130401080558562851694854539143837614711873175552347863,478139278.0350914243426199204812892310622212812627317520737707195003376019653875861035204856835005742,0.9981997513893302743511084732938036763597893645088695989194414371483051454608561623852881268244476521
+13.0,1300.0,0.6144946500866966819756400515650559966475045454738436270212962186900798179035639824155522896612464956e-527,0.128286554802050072896549834398268397568505939327518661111214705481167457041655740607512514973641764e-535,479001600.0000000000000000000000000000000000000000000000000000000000000000013973379599977545236812526,1.0
+16.5,0.16500000655651092529296875,5189998453040.125083072481768017699264732447502030220543657187756599284467539650371809581521974169451,0.9999999999999999999999999987745723382650967236488722150412128312324639515303454146319825385083954406,0.6359967668716725687093414777996004228534393113952843900038379123266266578879036227239604343598224411e-14,0.1225427661734903276351127784958787168767536048469654585368017461491604559374266453131429478017582777e-26
+16.5,8.25,5151715261216.043779837218979035256352959647395813624635667529855145298731587875407962709872303583674,0.992623660263009075122253184587048540801846945918618221589970313303750650979766762075115667286754522,38283191824.08130323526279534241058048952579331001068598566212998837884990461886388525077293685235596,0.007376339736990924877746815412951459198153054081381778410029686696249349020233237924884332713245478029
+16.5,14.8500003814697265625,3281170062324.489562662671371498689785819541458453535252942745406987512366194288716459533042446669149,0.6322102197164416139523032718656298410408290904170998573677743388398243158258125272315355187754506265,1908828390715.63552040981040287897714762963173067010006871044657814616521529820555538842760279376688,0.3677897802835583860476967281343701589591709095829001426322256611601756841741874727684644812245493735
+16.5,16.5,2425041731503.939538171649250125627303277592420419824296183298715413344683420634781457884706240902129,0.4672528813729091447747883941065008886716783719424019151711359825453585798767668818478603996596143678,2764956721536.1855449008325242520396301715807687038110254698932697203328980718594903900759389995339,0.5327471186270908552252116058934991113283216280575980848288640174546414201232331181521396003403856322
+16.5,18.1499996185302734375,1647422133289.360209741648510375741060393355812928732413438306313733302833145045026521944676353539372,0.3174224709690146812698759704116603688189327167560198106058627367921125935495318348074863075386583803,3542576319750.764873330833264001925873055817376194902908214885671400374748347449245326015968886896658,0.6825775290309853187301240295883396311810672832439801893941372632078874064504681651925136924613416197
+16.5,33.0,2901186058.305020571211999232924516665685282077969962057923379163927126135950413482820943636880932982,0.0005589955535739329878732234056712927392864902633844918831542774874781904321157456359281689093477538193,5187097266981.820062501269775144742416783487907045665359595268605969750455356543858365139701603555097,0.9994410044464260670121267765943287072607135097366155081168457225125218095678842543640718310906522462
+16.5,1650.0,0.1946267352533885182968524738572152665958498958163999880266472538302199673522698959999334614825229749e-666,0.3750034552310565280576801157233877619635177889025441075563944573941372570215399044083676072009131442e-679,5189998453040.12508307248177437766693344917318912363532165319198513367758149249427184796064524043603,1.0
+17.0,0.17000000178813934326171875,20922789887999.99999999999999585550285263989865320908990534962201305988055560727127752501054067134438,0.9999999999999999999999999998019146983004821471162827893590335907052378154555171021536348839906953415,0.4144497147360101346790910094650377986940119446152096661248865026795426422808553938948145597829161787e-14,0.1980853016995178528837172106409664092947621845444828978463651160093046585489828581527528828869466675e-27
+17.0,8.5,20784433600502.67097540303723378137542756521119723064689816850936499894851390923610404778992152582084,0.9933872926011324372480854707028531159699428319963180857694473333229961130562576444429883043720757676,138356287497.3290245969627662186245724347888027693531018314906350010514878501318347260856459409499552,0.00661270739886756275191452929714688403005716800368191423055266667700388694374235555701169562792423245
+17.0,15.30000019073486328125,13287099753146.81563908726762911180304218042070867906651510632558234141904270956355097166492372652512,0.6350539208333522810496460131116431656908306810923448926959049708132985978549285020416193402477180332,7635690134853.184360912732370888196957819579291320933484893674417658580959049804387802210643740245682,0.3649460791666477189503539868883568343091693189076551073040950291867014021450714979583806597522819668
+17.0,17.0,9786389836065.484662933923931178566154761312673926353042493107631067618977440495765314161347875510856,0.4677382838738128355157682846764037701720724116238065355700382030748240423080178307084005801282570024,11136400051934.51533706607606882143384523868732607364695750689236893238102431887217345971421959125994,0.5322617161261871644842317153235962298279275883761934644299617969251759576919821692915994198717429976
+17.0,18.700000762939453125,6606316846932.248047783850738006295546650522014877213547484123836773443331813812630509278068947506478,0.3157474162048158330090405741786272220223388411095826011615743008876810899891639366537189641631440663,14316473041067.75195221614926199370445334947798512278645251587616322655666994555530826459749851926432,0.6842525837951841669909594258213727779776611588904173988384256991123189100108360633462810358368559337
+17.0,34.0,9910056056.804399413187707484361240049353376906731624036494056243934933698596212859019749196574567885,0.0004736488828618494136639923172162211434311650105469731913265417122911239599294674476619883710998844076,20912879831943.19560058681229251563875995064662309326837596350594375606506806077172591485581827019623,0.9995263511171381505863360076827837788565688349894530268086734582877088760400705325523380116289001156
+17.0,1700.0,0.2458486870964415317217718788554326586945418246595856381802945647755080667210486890463968024635167932e-686,0.1175028227174641365503215432640837781444444741248006352776382499107702489871018536223821644052375213e-699,20922789888000.0000000000000000000000000000000000000000000000000000000000017593679387738755674667708,1.0
+20.5,0.20499999821186065673828125,540624298233507504.473687364780821829102087234025696758243578603379333048033861452074846033633078383,0.999999999999999999999999999999999422657785775772262737062201125061400042154183032910755146252341537,0.3121252294055524747207166162228645932491013737698168406518342062954509290310466641126750345014703397e-15,0.5773422142242277372629377988749385999578458169670892448537476584629559849301971871019075211556113262e-33
+20.5,10.25,538946805335988652.0709965042629878388797336290391983067462526312939781227450734454841507688955033896,0.9968971189363850856943032162663079377677473800330018691355952317262889335515107133697970076615234958,1677492897518852.402690860517834302347583010538973172213942194949948174390161776407535916571781288832,0.003102881063614914305696783733692062232252619966998130864404768273711066448489286630202992338476504222
+20.5,18.5,350870600436163198.7364975318180419252982809735188997582318059369662979807981699981363242839334102096,0.6490100455762616918406256396197338343553551005208322891662299606718936269597316444769779046824470834,189753697797344305.7371898329627802159290356660592717207283888892776283163370652237553624015338744688,0.3509899544237383081593743603802661656446448994791677108337700393281063730402683555230220953175529166
+20.5,20.5,254429892200746877.619547267113914421792554743293110951578043017441766619415833128863308491477095986,0.4706223768189808976345190174958215496863188395818484023720734533436530753835271399969728679308838697,286194406032760626.8541400976669077194347618962850605273821518088021596777194020930283781939901886924,0.5293776231810191023654809825041784503136811604181515976279265466563469246164728600030271320691161303
+20.5,22.5,166564230981595225.1232057180177844971941373641092607315100831817200402016941276034724830431086627961,0.3080960872936060240510470665024940294803493434512654502154415432746618007430058687457265447073002346,374060067251912279.3504816467630376440331792754689107474501116445238860954411076184192036423586218823,0.6919039127063939759489529334975059705196506565487345497845584567253381992569941312542734552926997654
+20.5,41.0,80908170732637.92511208009816068271109417702109468117761455902142043347907731125572368454312466128223,0.0001496569262554527464745335325685386464583793728562383901263243260613982847006246072548944091071889976,540543390062774866.5485752846826614585162224625570767977825802672225058636561579106359630009241600171,0.999850343073744547253525466467431461353541620627143761609873675673938601715299375392745105590892811
+20.5,2050.0,0.1903974835689651617706004158608178882122332263643773645562260375004357181223818669293650115572363009e-825,0.3521807735817458730053494830686081463253394537138516157394953530571968070553995753734356429302753096e-843,540624298233507504.4736873647808221412273166395781714789601948262439262971352352218916866854672846784,1.0
+21.0,0.20999999344348907470703125,2432902008176639999.999999999999999772308157712399209862411173233862762286153636670126899636089253877,0.9999999999999999999999999999999999064114207960860446184442190293349354799025878974408527618001186727,0.2276918422876007901375888267661372377170528272567496581283801933546699751824687019116072780799381851e-15,0.9358857920391395538155578097066506452009741210255914723819988132728539758629841178518386142714303973e-34
+21.0,10.5,2426119495007797370.40376524336035175028046790074405731296091680086344729734192262453341420636270341,0.9972121716591759302793458038182555963815913921508066795312531588781716095021759440337735350673534736,6782513168842629.59623475663964824971953209925594268703908319913655270586454130234314355810674382143,0.002787828340824069720654196181744403618408607849193320468746841121828390497824055966226464932646526408
+21.0,19.0,1574511812824323347.940041254339858588371158799540091638983719756794324353518472514974332612071125281,0.6471743652365000917310541667062840372172362427537768011343976097544263909327586354003721706607604771,858390195352316652.0599587456601414116288412004599083610162802432056756496879914119022251523983219507,0.3528256347634999082689458332937159627827637572462231988656023902455736090672413645996278293392395229
+21.0,21.0,1145834475653466482.061252354627279360127134084576577302508463538933399896676314167403702844750897965,0.4709743638677096979187745869898213414114836156728811564349721279282722447347523831952859753731266863,1287067532523173517.938747645372720639872865915423422697491536461066600106530149759472854919718549267,0.5290256361322903020812254130101786585885163843271188435650278720717277552652476168047140246268733137
+21.0,23.0,754444010774681179.1782906259030682866725169347550464981575900964019870763849280489300061368765366202,0.3101004513289484840835994598244177527470443778390800601682494869205054681232211068119294191807642768,1678457997401958820.821709374096931713327483065244953501842409903598012926821535877946551627592910611,0.6898995486710515159164005401755822472529556221609199398317505130794945318767788931880705808192357232
+21.0,42.0,309138187487010.162720227677303694050835397549248621949449793686714776813069243490510764208520969702,0.0001270656140066638033956074498302991046310047335891718633118915033504153772916738580086368580494085496,2432592869989152989.837279772322696305949164602450751378050550206313285226393394683386047000260926262,0.9998729343859933361966043925501697008953689952664108281366881084966495846227083261419913631419505915
+21.0,2100.0,0.269232728131886828359357484553907523109988255735406905387089068170333762311982842516226640368397699e-845,0.1106632027212907295321977020988755421386634327493363623489788714601653349619878624154520901787534427e-863,2432902008176640000.000000000000000000000000000000000000000000000000000003206463926876557764469447232,1.0
+24.5,0.24500000476837158203125,125990634307293746235546.2120618541659368807444577235295166230949255268732373652108637623329938479225,0.9999999999999999999999999999999999999997227611781397184300222785264653695545658388153856097297425985,0.3492949502078369059138366090493797207621490149796207508388319605878367180147682626114416143072027397e-16,0.2772388218602815699777214735346304454341611846143902702574015423419761143217374412527475730060597296e-39
+24.5,12.25,125823677034648511889061.3572394022933144208926313405896801819149937631935451893327901924439542097587,0.9986748437805462418145972988119198275209493269836409931338017356688128141602611602377636443528815348,166957272645234346484.854822451872622494781321403723527032563592668617664252092975067851114722047059,0.001325156219453758185402701188080172479050673016359006866198264331187185839738839762236355647118465171
+24.5,22.5,80127563162173678805638.4970827497912620494334933283216359134701980355856839098748854660331866976061,0.6359803139552492893898058540149147647405033187209937102704148384920623287552354155265294006673620328,45863071145120067429907.71497910437467486624045941599157130100838839622552553155087979426188223419962,0.3640196860447507106101941459850852352594966812790062897295851615079376712447645844734705993326379672
+24.5,24.5,59609734078272681283130.65191195770102228216411883482727180600153695436445385451381437373924724460492,0.4731282956547652173997215352208794210103454607852125399426567531974233945440640175005045276462118007,66380900229021064952415.56014989646491463350983390948593540847704947744675558691195088655582168720079,0.5268717043452347826002784647791205789896545392147874600573432468025766054559359824994954723537881993
+24.5,26.5,40640753938080337896226.24784239868443178185802774240148815785844665586470001481354635904215035959368,0.322569643065346459458351118206279802619959503357154901174282534384133594129380080161822100237270034,85349880369213408339319.96421945548150513381592500191171905662013977594650942661221890125291857221204,0.677430356934653540541648881793720197380040496642845098825717465615866405870619919838177899762729966
+24.5,49.0,5119371947749950369.360329185306941605229857346797596446200986494865710182516154021979872797215122826,0.4063295637724703396262423754457665635181954799841258697689252008320003697674069166126366226246611348e-4,125985514935345996285176.8517326688589953104440953975156107682775999369454992589096112383151961345906,0.9999593670436227529660373757624554233436481804520015874130231074799167999630232593083387363377375339
+24.5,2450.0,0.4247235832898155088040188524650788769670099653858944485985120151767792440690541620633018317571613247e-984,0.3371072664448263359905527459359500845898141806821150832587857954598321585796405105835652436721220935e-1007,125990634307293746235546.2120618541659369156739527443132072144785864318112094414257652602950689318057,1.0
+25.0,0.25,620448401733239439359999.9999999999999999720629086296192064573656184799764082902831108548614175919024,0.9999999999999999999999999999999999999999549727402112121313707979195640051759926386511151612192034694,0.2793709137038079354263438152003183658267823026382085865724949244620001425981390784977186842179479799e-16,0.4502725978878786862920208043599482400736134888483878079653064270040072612275539760669481124560941441e-40
+25.0,12.5,619708548751205438154180.288847809651254660315390966301020278449415356119729789629696595664987296899,0.9988075511517682988099491921420578379705307819799838443610602594400026335328279205785417246744370559,739852982034001205819.7111521903487453396846090336989797215505846438885150833316445230172889522528912,0.001192448848231701190050807857942162029469218020016155638939740559997366467172079421458275325562944144
+25.0,23.0,393724645607384737076425.2982613186871819894810046263128270697847090072077220492330717222680143784832,0.6345808039919262587136029033874392715156908989961508509135117393705667712146254420732533914020784457,226723756125854702283574.7017386813128180105189953736871729302152909928005228237282693964142618706687,0.3654191960080737412863970966125607284843091010038491490864882606294332287853745579267466085979215543
+25.0,25.0,293719323198750164455426.9103167580915569762577632520173320353301458358294584503831662869002913569104,0.4733984685563493567248096097898752542226436634054655335626455002445213651680516573325489729171204834,326729078534489274904573.0896832419084430237422367479826679646698541641787864225781748317819848922414,0.5266015314436506432751903902101247457773563365945344664373544997554786348319483426674510270828795166
+25.0,27.0,201123340746644881844220.8766347887740077661869208057270231263993264704535307521596567681820867410827,0.3241580447057343917309158720274329468745713576502590752898666717688528508234278623287842755377330191,419325060986594557515779.1233652112259922338130791942729768736006735295547141208016843505001895080692,0.6758419552942656082690841279725670531254286423497409247101333282311471491765721376712157244622669809
+25.0,50.0,21436066546709693903.93782557631631091258857629862868097328697281172967238027768701290777149493027156,0.3454931382984863942145434713316366603841537912110553761218525385413889480554247251480899217714546107e-4,620426965666692729666096.0621744236836890874114237013713190267130271882785724926836541057745047542216,0.9999654506861701513605785456528668363339615846208788944623878147461458611051944575274851910078228545
+25.0,2500.0,0.6584808048840185477562925343128472681602285612814620235060693586441766630455361239730732391922799346e-1004,0.1061298253077185078725394204668571235682904586641213114611433592873760496552482744000852142731313932e-1027,620448401733239439360000.0000000000000000000000000000000000000000000000082448729613411186822762491519,1.0
+28.5,0.2849999964237213134765625,57361842800962338401329150199.53762058572292903857693300666646513812664420063937337854946606911979551,0.9999999999999999999999999999999999999999999998650877932614163884503521966751540210985757416423689422,0.773881279486956501771975804719669109144808525603519258451641516404494312769694124793526358376902158e-17,0.1349122067385836115496478033248459789014242583576310578082789420105686804839321529882474826011261937e-45
+28.5,14.25,57329025675645999380007424269.04064586340779307886426110851578087473411487441327382336789506042295454,0.9994278927643553937468831308065942000301145480407243376019932583695816802749987696506391122273593834,32817125316339021321725930.49697472231513596745148469302024928111228737342279064662965626473203355664,0.0005721072356446062531168691934057999698854519592756623980067416304183197250012303493608877726406166465
+28.5,26.5,35900570085871452757017625073.99150603062055829813329369820580014734075607878374962697352000668696698,0.6258615193106934525309695815894821675982186893256384744865035810569936289601844746660081346337305862,21461272715090885644311525125.54611455510237074818245210333023000850564616905231484302403131846802112,0.3741384806893065474690304184105178324017813106743615255134964189430063710398155253339918653662694138
+28.5,28.5,27251805466015208513274388051.73652891177668287898939088182153854916869634549769806111713198302867877,0.4750859479981353573526392824740128561807258770438950341897088086926527360947287856209388429944526139,30110037334947129888054762147.80109167394624616732635491971449160667770590233836640888041934212630933,0.5249140520018646426473607175259871438192741229561049658102911913073472639052712143790611570055473861
+28.5,30.5,19170265674526286520153832711.74345643559517044329286019886266031241054742932788446962284446043294663,0.3341989158375622142627673369464799595201121767850709186387023981469534828783915690297939739791899987,38191577126436051881175317487.79416415012775860302288560267336984343585481850818000037470686472204147,0.6658010841624377857372326630535200404798878232149290813612976018530465171216084309702060260208100013
+28.5,57.0,639329848034974228423164.6769791395427949161694033112723560390640960090171034897451044917959104939978,0.1114555978010260905081072913758752125683667623823399293671927836431826219358538594148130563541170252e-4,57361203471114303427100727034.8606414461801341301463424902636741167823062388189609802524468333590776,0.9999888544402198973909491892708624124787431633237617660070632807216356817378064146140585186943645883
+28.5,2850.0,0.1875727032021411982480690374486891806913355006814066726466649598131563144124266462854328230307976818e-1142,0.3269990886676924550370677343728083793689049803281483380025931735824580936767960581845054313877892179e-1171,57361842800962338401329150199.5376205857229290463157458015360301558464022478360644699975513251549881,1.0
+29.0,0.2899999916553497314453125,304888344611713860501503999999.9999999999999999933101642923344849147721790748589030351108422499829174,0.9999999999999999999999999999999999999999999999780580798646623945308161718263006180927167389812479563,0.6689835707665515085227850163723649978463120941468404076192514605282469263295003764492776748505276162e-17,0.2194192013533760546918382817369938190728326101875204366944898705411657891135681016899378264254524897e-46
+29.0,14.5,304731204308214173404715900123.779306684005152489587864590044536816454370420630653532998543059317866,0.9994845972098414885079798582306346252147472873798195624648386116966405572046848552450752025928549427,157140303499687096788099876.2206933159948475104121354099554631835456588179518994805754201321334555052,0.0005154027901585114920201417693653747852527126201804375351613883033594427953151447549247974071450573192
+29.0,27.0,190478756652745756527055462749.1062733701646395525538196356867639581367814280618613549309949857289277,0.6247492238357855916234987901478134054280690819197591729256016201075976808091531275087303563717011732,114409587958968103974448537250.8937266298353604474461803643132360418632478105206916586429682057223937,0.3752507761642144083765012098521865945719309180802408270743983798924023191908468724912696436282988268
+29.0,29.0,144913957084466230660547260160.7178382854814124107141846396590098933632626358828780113583703346060302,0.4753017281425411777481301424926433731869994151512845251734232068420156660058770258953501884904752115,159974387527247629840956739839.2821617145185875892858153603409901066367666026996750022155928568452912,0.5246982718574588222518698575073566268130005848487154748265767931579843339941229741046498115095247885
+29.0,31.0,102289287494407775982367094392.8031479859409851583807385513331066341315796955931008571539647874864497,0.3354975331204504322032237504004497778805206868587854082637595456617490065929415360431775135687466019,202599057117306084519136905607.1968520140590148416192614486668933658684495429894521564199984039648718,0.6645024668795495677967762495995502221194793131412145917362404543382509934070584639568224864312533981
+29.0,58.0,2892517074287968989912469.888918702879367020618358913421677538548776524150308136922924925839572096239,0.9487135619997846276151041345405856302838389761000159801100790909631178603269050851607213365638567364e-5,304885452094639572532514087530.1110812971206329793816410865783224614512527144322448766510382656117494,0.9999905128643800021537238489586545941436971616102389998401988992090903688213967309491483927866343614
+29.0,2900.0,0.3143102259608077661740577752916068744868021451921564246761123455026351071030263789592698013016859553e-1162,0.1030902727229842145420823591763412232948519431888416610764325060829822574393741681193444602752178939e-1191,304888344611713860501504000000.0000000000000000000000000000000000000000292385825530135739631914513215,1.0
+32.5,0.324999988079071044921875,46334060788513904384988971821323500.26802927540630912915186063279843684009289524602475103569566120769,0.9999999999999999999999999999999999999999999999999999337002400254654465134437777742026615770780541156,0.3071937108923965070627162971161280609031648943051554034889576558366642743362284829170009040890767968e-17,0.6629975997453455348655622222579733842292194588440659557355121773647380912409957308044925536720187399e-52
+32.5,16.25,46322522730222611292608497533548302.43943777548545116639369338978347802543343303135760668007261667008,0.9997509810688953611501047192176947134897284736418296905462081746004660191828341581576205721672751686,11538058291293092380474287775197.82859149992085796583010435193892388528662518582842496465469348066164,0.0002490189311046388498952807823052865102715263581703094537918253995339808171658418423794278327248313602
+32.5,30.5,28621007643720182006077134838146782.95883906379256793188822237091897230621059367776008945872023656119,0.6177098910962549796098763032964066958628227303028015095518499614723898239110229739106407453151542127,17713053144793722378911836983176717.30919021161374120033557537080342960450946453942594218600707358956,0.3822901089037450203901236967035933041371772696971984904481500385276101760889770260893592546848457873
+32.5,32.5,22086053016848511566963307387930013.16260281540273487265707840984355296181178149718030229778163622351,0.4766699192988409044611385448927340913390216019830607900339534117343979333601086446612686588650620676,24248007771665392818025664433393487.10542646000357425956671933187884894890827672000572934694567392723,0.5233300807011590955388614551072659086609783980169392099660465882656020666398913553387313411349379324
+32.5,34.5,15929984929735402664933756144665957.49287311113186407619356762099919819017469613256737240979297707395,0.3438072264472101987883211998866135121555991482820664842271765773700151264261197086071726004781636204,30404075858778501720055215676657542.77515616427444505603023012072320372054536208461865923493433307679,0.6561927735527898012116788001133864878444008517179335157728234226299848735738802913928273995218363796
+32.5,65.0,142761347286773564929810657719.9602609908854108736907492246016219341962310483549118706465501178102169,0.3081131782046691214702430585972536329343580504205419131996313773478525625472231412293455075097903735e-5,46333918027166617611424042010665780.30776828452089825853304851712077997652382716883111977408076003294,0.9999969188682179533087852975694140274636706564194957945808680036862265214743745277685877065449249021
+32.5,3250.0,0.1484185597736004907504358778932123824630239848300836183590157424893530365583445173075870585504689164e-1300,0.3203227976305350589149255291837955379623896649388683491749264167255028925437095164617203676065096547e-1335,46334060788513904384988971821323500.26802927540630913222379774172240191072005821718603164472731015075,1.0
+33.0,0.3300000131130218505859375,263130836933693530167218012159999999.9999999999999999971597009336809473588262277616785778368781691701,0.9999999999999999999999999999999999999999999999999999892057536873385115678521964144069695214796957037,0.2840299066319052781318762073475803811776132238243053482256197592739651068520683692770637579337711626e-17,0.1079424631266148843214780358559303047852030429631156728354872666198273180917792118476042704403843341e-52
+33.0,16.5,263071754810938555593905150285830039.9013149090036838977830493205901675724636474415759841358850045707,0.9997754648469048015582150573448994889541539147463865500821162324772215895513769125072676674716742899,59082122754974573312861874169960.09868509099631610221695067940983256768134239357839751276929683761343,0.0002245351530951984417849426551005110458460852536134499178837675227784104486230874927323325283257100747
+33.0,31.0,162298695681589120992228451249431749.1182640646309791272297056919375804404812200726519322580585642423,0.6167984625932947936660006970927840753925768251839107574617248176524285825042695426028932570342212548,100832141252104409174989560910568250.881735935369020872770294308062419699663769762502449390595737166,0.3832015374067052063339993029072159246074231748160892425382751823475714174957304573971067429657787452
+33.0,33.0,125473252468549551731963143517407658.8833751453695524982663979524542201016894851346678414375457457378,0.4768473886630308507823781455837688570632946883204313471614756839792705550160238355942104302601025457,137657584465143978435254868642592341.1166248546304475017336020475457800384555047004865402111085556706,0.5231526113369691492176218544162311429367053116795686528385243160207294449839761644057895697398974543
+33.0,35.0,90752382644240602265695985840268093.80155020103808767855232207731872018001496004374357967883306848595,0.3448945159822120737797161944821761022350313753814505254141386911335679511045428020170838067055914315,172378454289452927901522026319731906.1984497989619123214476779226812799601300297914108019698212329224,0.6551054840177879262202838055178238977649686246185494745858613088664320488954571979829161932944085685
+33.0,66.0,690689197981234573971964538903.9217983821756186614812519665732869336692719821881476009486685956504548,0.2624888842485921506876304750022556823451127207465239231677013156569163155317600802678203776018185223e-5,263130146244495548932644040195461096.0782016178243813385187480334267132064757178529662340477056328127,0.9999973751111575140784931236952499774431765488727925347607683229868434308368446823991973217962239818
+33.0,3300.0,0.2660029095005274146733635911570338124648146558855644546617488369820519446790559159046816506915223932e-1320,0.1010914998030267427355024834993305293670497251700514115155290007590672282491624577981977807588016461e-1355,263130836933693530167218012160000000.0000000000000000000000000000000001401449898351543816486543014083,1.0
+36.5,0.3650000095367431640625,61783994085109905285617221075553185632871.46593990870317617905112221558346802474495293361093686477298,0.9999999999999999999999999999999999999999999999999999999999671715496188758407628085162996316950792355,0.2028272784170699070176744961750260016534774310992690385363535341051709960919433646055822700438618255e-17,0.3282845038112415923719148370036830492076450037779705575700234148891870089197147052054094034784675396e-58
+36.5,18.25,61777254520646317770028385636707658594498.76692706361131964752360928908845136386547082001572396520059,0.9998909173069273653963982410400592541189386034850415758139503734982352352344255678028981107922458406,6739564463587515588835438845527038372.699012845091856533555785710665715731056227075345472916107167543,0.0001090826930726346036017589599407458810613965149584241860496265017647647655744321971018892077541594021
+36.5,34.5,37747609725485141381203912943265322693554.60633588885976291637124692013534422509674151917211311041349,0.6109609824429011506164679172242535904254179657867172438923963043601755299082871880515734973007440131,24036384359624763904413308132287862939316.85960401984341326470814807961882286982495637618908377089426,0.3890390175570988493835320827757464095745820342132827561076036956398244700917128119484265026992559869
+36.5,36.5,29531867110567733996206172826469404227498.9311927638816270130276092332480177066415858688849469128158,0.477985723452686052398471307401499970104499214598903118308733135180099804927481749049570771313257641,32252126974542171289411048249083781405372.53474714482154916805178576650614938828011202647624996849196,0.522014276547313947601528692598500029895500785401096881691266864819900195072518250950429228686742359
+36.5,38.5,21742960397427655971999858476245787542154.15150586635725616093880001666211564993165974656956851031785,0.3519189835392620395302152269324892873693310528827889471335875731231959108019664428015002605063426072,40041033687682249313617362599307398090717.31443404234592002014059498309205144499003814879162837098991,0.6480810164607379604697847730675107126306689471172110528664124268768040891980335571984997394936573928
+36.5,73.0,52949442154506109118983369217871874.38246594734925702394423038249326654537455487682886341892236797151,0.8570090512692680556802347857159858050844535163506777789989580690865292168793799100092698899450718342e-6,61783941135667750779508102092183967760997.08347396135391915713516461726090054954714301853233346238539,0.9999991429909487307319443197652142840141949155464836493222210010419309134707831206200899907301100549
+36.5,3650.0,0.1953355084312233771020954281999372828097757306846922312364706684936133958688600435101169722435920175e-1458,0.3161587581439635603576946151249429130551615750835979291506861400626078334974808393076908597655919673e-1499,61783994085109905285617221075553185632871.46593990870317618107939499975416709492169789536119688130775,1.0
+37.0,0.37000000476837158203125,371993326789901217467999448150835199999999.999999999999999998010144152088536780620259902094609630282,0.9999999999999999999999999999999999999999999999999999999999946508291802582432073734328927504122445964,0.1989855848803199113330559282105407777739456877542387398548067882388920416527083270608322077134689013e-17,0.5349170819741756792626567107249587755403553332314009452247515306615350728798447484985751790393880222e-59
+37.0,18.5,371956712793231153197597830186294584210422.2758111030818172279500018253795285911205314038120175905779,0.9999015735121217818090760205581543280418411120156879903724853447672046973321848456420679481585530018,36613996670064270401617964540615789577.72418889691818277204999817551220730283028778038799981744356341,0.9842648787821819092397944184567195815888798431200962751465523279530266781515435793205184144699823239e-4
+37.0,35.0,226989024014514715184435975122876165449017.4354380189351676839148067141921226508640903916939172052318,0.6101964945804424491761955895760276454618789066404902936457902256016569955365846250467251759013351627,145004302775386502283563473027959034550982.5645619810648323160851932866996132430867287925061002027896,0.3898035054195575508238044104239723545381210933595097063542097743983430044634153749532748240986648373
+37.0,37.0,177863034503958843994685514205494501614349.5019963234044377047596609195056110031786919237288259549572,0.4781350139767814391926669215604954535637725270056258313717131858978224542335868299177336178494837268,194130292285942373473313933945340698385650.4980036765955622952403390813861248907721272604711914530642,0.5218649860232185608073330784395045464362274729943741686282868141021775457664131700822663821505162732
+37.0,39.0,131256580134582475503504585688775961443809.3151145960527074790695530203993802515906461401417853004337,0.3528465988012605299562448021483701523550172331761938728513557987821171322564921159639473486646029879,240736746655318741964494862462059238556190.6848854039472925209304469804923556423601730440582321075878,0.6471534011987394700437551978516298476449827668238061271486442012178828677435078840360526513353970121
+37.0,74.0,271778651018441097347065883466473848.2746511977815237362658432276453536467157425861343116997640371484,0.730600877611816548123508890538883154677474348252631497380790705322862094368509049491763524535733931e-6,371993055011250199026902101084951733526151.7253488022184762637341567732463822472350765980657057082574,0.9999992693991223881834518764911094611168453225256517473685026192092946771379056314909505082364754643
+37.0,3700.0,0.3714703196437381532843643639864485147019841838742418471961281810239780186658714011436027292802695334e-1478,0.9985940415902717138423033467831033580547327587141446387368733042084326864839438382850644573580819965e-1520,371993326789901217467999448150835200000000.0000000000000000000000000008917358939508191842000174080214,1.0
diff --git a/commons-numbers-gamma/src/test/resources/org/apache/commons/numbers/gamma/igamma_int_data_p_derivative.csv b/commons-numbers-gamma/src/test/resources/org/apache/commons/numbers/gamma/igamma_int_data_p_derivative.csv
new file mode 100644
index 0000000..f7a5d1d
--- /dev/null
+++ b/commons-numbers-gamma/src/test/resources/org/apache/commons/numbers/gamma/igamma_int_data_p_derivative.csv
@@ -0,0 +1,159 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Generated using maxima from a script built by gamma_p_derivative.pl
+# Input data: igamma_int_data.csv
+# a, x, gamma_p_derivative(a, x), log(gamma_p_derivative(a, x)),
+0.5,0.004999999888241291,7.93905103915330333594912321847e0,2.0717937516369479808945855806e0
+0.5,0.25,8.78782578935444794093723954824e-1,-1.29217762364754777654481554218e-1
+0.5,0.44999998807907107,5.36273455600241156485497092337e-1,-6.23111069649408534475095998914e-1
+0.5,0.5,4.83941449038286699595660385871e-1,-7.25791352644727432363097614947e-1
+0.5,0.550000011920929,4.38916334837769223187701311273e-1,-8.23446465305026840998233719061e-1
+0.5,1.0,2.07553748710297351670134124721e-1,-1.57236494292470008707171367568e0
+0.5,100.0,2.09882811567720844504355997818e-45,-1.0287495003591874577108970513e2
+1.0,0.009999999776482582,9.90049833970461436038213839283e-1,-9.99999977648258209228515625e-3
+1.0,0.5,6.06530659712633423603799534991e-1,-5.0e-1
+1.0,0.8999999761581421,4.06569669433975285553440474774e-1,-8.9999997615814208984375e-1
+1.0,1.0,3.67879441171442321595523770161e-1,-1.0e0
+1.0,1.100000023841858,3.32871075761814567967157184846e-1,-1.10000002384185791015625e0
+1.0,2.0,1.35335283236612691893999494972e-1,-2.0e0
+1.0,100.0,3.72007597602083596295969580386e-44,-1.0e2
+4.5,0.04500000178813934,1.58875288938012507807418860754e-6,-1.33525611957944403823956158473e1
+4.5,2.25,1.54821751507188949725199631691e-1,-1.86548081408529154665805069519e0
+4.5,4.050000190734863,2.00242226486639793825857238275e-1,-1.60822751283014428326523085844e0
+4.5,4.5,1.84618142417303270343663720884e-1,-1.68946568212548296369773827008e0
+4.5,4.949999809265137,1.64329783224292263024709901792e-1,-1.80587999693851991389321242097e0
+4.5,9.0,2.320353711295524239682622734e-2,-3.76345055016567438073742584498e0
+4.5,450.0,6.13878875615120652221188909112e-188,-4.31071370031167163175571798087e2
+5.0,0.05000000074505806,2.47716010544189070918766844077e-7,-1.52109828657043233217787991568e1
+5.0,2.5,1.33601885781085278596238076932e-1,-2.01289090285132535891283275423e0
+5.0,4.5,1.89807620540124408648945583481e-1,-1.66174424324284932615390819175e0
+5.0,5.0,1.75467369767850705641563761019e-1,-1.74030218061154412124390426839e0
+5.0,5.5,1.55818803725396887633637270852e-1,-1.85906146139424468106809577527e0
+5.0,10.0,1.89166374010353548064964648169e-2,-3.96771345837176288357497578256e0
+5.0,500.0,1.85535843925554310717425973363e-208,-4.78319621436659178649099972631e2
+8.5,0.08500000089406967,6.11692097295018739013621701606e-13,-2.81225473479952218392716293914e1
+8.5,4.25,5.2477284181349026398455962171e-2,-2.94737488527855675112411226895e0
+8.5,7.650000095367432,1.43851336171598342451575580934e-1,-1.93897490038261441249865480313e0
+8.5,8.5,1.35501708338321655250891883349e-1,-1.99877103107896693049487135802e0
+8.5,9.350000381469727,1.18369432889721528657797209906e-1,-2.13394475802450400999622326939e0
+8.5,17.0,4.99075949756665960288731724933e-3,-5.30016717687937710986563044708e0
+8.5,850.0,4.71127276545851706655525015973e-352,-8.08959994636168281670224999538e2
+9.0,0.09000000357627869,9.75737924386832977070582688971e-14,-2.99581674576450723107565327151e1
+9.0,4.5,4.63291591653183126914334811464e-2,-3.07198372853505764143116058163e0
+9.0,8.100000381469727,1.39500036785192228577018968681e-1,-1.96969041402761724474757238334e0
+9.0,9.0,1.317556400095226781654379163e-1,-2.02680628405549516609330360996e0
+9.0,9.899999618530274,1.14827443084111772927710373521e-1,-2.16432477240954056118295881199e0
+9.0,18.0,4.16254405654790946963199870791e-3,-5.4816288395759326907554466383e0
+9.0,900.0,1.45675272498916904308996705775e-372,-8.56185444796150764221805440335e2
+12.5,0.125,2.65432802739295622340940724257e-19,-4.27729252412545588765286326475e1
+12.5,6.25,2.00473023817847200116733725018e-2,-3.90966067883087920241299858657e0
+12.5,11.25,1.16470875556157805128731595573e-1,-2.15011403245651060823109046945e0
+12.5,12.5,1.12088325002059325878359751802e-1,-2.1884681023915081441148291898e0
+12.5,13.75,9.6096629674893491830634136483e-2,-2.34240103464177225360937977207e0
+12.5,25.0,1.20982987800025024574545720114e-3,-6.71727552595213708581665979303e0
+12.5,1250.0,4.07510707083475096259840693065e-516,-1.18672901096352845741170102573e3
+13.0,0.12999999523162843,4.27095299641746261831794247945e-20,-4.45998648733695550265990521987e1
+13.0,6.5,1.78529168910600109465638970075e-2,-4.02558837284278902988229854577e0
+13.0,11.699999809265137,1.13932581154871742000224077262e-1,-2.17214839890800004619328362651e0
+13.0,13.0,1.09939814248410867872277664501e-1,-2.20782220612344531687551308827e0
+13.0,14.300000190734864,9.40338853569893570660700524885e-2,-2.36410007914918341670624196634e0
+13.0,26.0,1.01785679930866812422604063959e-3,-6.89005603940410160386872763077e0
+13.0,1300.0,1.27103289178914768537159050039e-536,-1.23394577997426634890044371818e3
+16.5,0.16500000655651093,1.21387951376854398893408227703e-25,-5.73708058844467998947843729423e1
+16.5,8.25,8.07122582143587822375750271191e-3,-4.81944990966867550281265583997e0
+16.5,14.850000381469727,9.93847510559005578215110439229e-2,-2.30875658698850789127333382159e0
+16.5,16.5,9.7718086817780985153090048816e-2,-2.32566861098952320684555795737e0
+16.5,18.149999618530275,8.22196652984031149634259487212e-2,-2.49836076832580945994683539399e0
+16.5,33.0,3.09087140630542988400346631601e-4,-8.08188731231037091087846007476e0
+16.5,1650.0,3.71482848095046182291682734355e-680,-1.56444553072817410700228782286e3
+17.0,0.17000000178813935,1.9621543099488909477381742622e-26,-5.91931694104833500356054497514e1
+17.0,8.5,7.22071363073118570865446445584e-3,-4.93080149014034047044152780686e0
+17.0,15.300000190734864,9.76647246481012286394814887053e-2,-2.32621484298000592929055187979e0
+17.0,17.0,9.6284627798445337380760466598e-2,-2.34044660118121551976581386353e0
+17.0,18.700000762939454,8.08237974058166494897081151903e-2,-2.51548383446906441436869794113e0
+17.0,34.0,2.61234597797543695855185687835e-4,-8.2500917122220905690900999202e0
+17.0,1700.0,1.16397569727344703579140039464e-700,-1.61165772362537175363119008731e3
+20.5,0.20499999821186067,5.71839679792456952459712932932e-32,-7.19390344897866759267037968797e1
+20.5,10.25,3.34735192582351131387170406582e-3,-5.69958571563466300164625442341e0
+20.5,18.5,8.76002261968454587441063691978e-2,-2.43497169888735497823424824409e0
+20.5,20.5,8.77541876984396535710933809055e-2,-2.43321569471572946801022805497e0
+20.5,22.5,7.29520834149895886612826698138e-2,-2.61795244492849637428274259131e0
+20.5,41.0,8.13421948828273151291434271603e-5,-9.41684567379679593437420168654e0
+20.5,2050.0,3.48832409552991618938098306455e-844,-1.94213239706794794779130856132e3
+21.0,0.20999999344348908,9.26956103237825667883566641549e-33,-7.37585720439199632155470056304e1
+21.0,10.5,3.00309661556270227366607847033e-3,-5.80811131748393128799255879256e0
+21.0,19.0,8.65669758449916768225682781692e-2,-2.44683687742467582947932733295e0
+21.0,21.0,8.67115916033675373054582609776e-2,-2.4451677062850250996479163634e0
+21.0,23.0,7.23867402435888691849079166696e-2,-2.62573214217049121352481933451e0
+21.0,42.0,6.89434403152019379540419306317e-5,-9.58222409508611891130327393423e0
+21.0,2100.0,1.09609773665748099766852476289e-864,-1.98934176398652319773892825818e3
+24.5,0.24500000476837159,2.74576123081333297650601906083e-38,-8.64881751818423610047920351735e1
+24.5,12.25,1.41498689857560567689062322408e-3,-6.56063500688696964631729610487e0
+24.5,22.5,8.02278345806944915793845510769e-2,-2.52288475972546591626954972625e0
+24.5,24.5,8.03248482061321147622238571736e-2,-2.5216762637282548750123412506e0
+24.5,26.5,6.87283637640581493851372140294e-2,-2.67759330085311711256889542524e0
+24.5,49.0,2.18192593760872112453182420973e-5,-1.07327175205695401037073863963e1
+24.5,2450.0,3.33875120044079428284272502436e-1008,-2.31980017689300810772616674288e3
+25.0,0.25,4.45944608342778198352261506284e-39,-8.83057940649896940421204859136e1
+25.0,12.5,1.27190190631579587606937884676e-3,-6.66724193471418863527046700375e0
+25.0,23.0,7.94308683751574469131290243613e-2,-2.53286821581272661073127612016e0
+25.0,25.0,7.95229514680654460491939336223e-2,-2.53170960127550120925689608875e0
+25.0,27.0,6.82454431616447967022817148783e-2,-2.68464461400842140963568702518e0
+25.0,50.0,1.85289299202523970267672880297e-5,-1.08961772678368137832433251738e1
+25.0,2500.0,1.05111390138395079756710613782e-1028,-2.36700762513756130837639330626e3
+28.5,0.2849999964237213,1.3360923567978714444200010467e-44,-1.01023994889673154669404318859e2
+28.5,14.25,6.06162837711503495533401065717e-4,-7.40836189889589219498296253214e0
+28.5,26.5,7.44448514831509702499987123072e-2,-2.59769667626417491065367626103e0
+28.5,28.5,7.45105588955786060443158868857e-2,-2.59681443349739618600907919204e0
+28.5,30.5,6.51089645998369516925943669942e-2,-2.73169303418146600896337724013e0
+28.5,57.0,5.93130104745916977384236203946e-6,-1.20352669680989001770351958519e1
+28.5,2850.0,3.23844951397855967735002937885e-1172,-2.69745463431882488356501954918e3
+29.0,0.28999999165534975,2.17298822429546958362112736819e-45,-1.02840225902572552606948554965e2
+29.0,14.5,5.45623733132066777924102141932e-4,-7.5135809532387308854420175049e0
+29.0,27.0,7.3806321854431567774231373294e-2,-2.60631088906032090569053510872e0
+29.0,29.0,7.38691571393349238995907653999e-2,-2.60545989756026222175951810408e0
+29.0,31.0,6.46930558549749041602883829327e-2,-2.73810141159744009687453392302e0
+29.0,58.0,5.04386027294551840984550056792e-6,-1.21973388418817935580770187032e1
+29.0,2900.0,1.02095264694070365861373778743e-1192,-2.74466069468989370391675199664e3
+32.5,0.32499998807907107,6.56567382208988690076140680985e-51,-1.15549984601657154338463555956e2
+32.5,16.25,2.62237811823605750525979077058e-4,-8.24625878717834714932817136757e0
+32.5,30.5,6.97529978139113845448685839585e-2,-2.66279487979333455262537618967e0
+32.5,32.5,6.97999071432888420560516490953e-2,-2.66212259954006990268535954164e0
+32.5,34.5,6.19785633316283720337139637444e-2,-2.78096670643896834893119378249e0
+32.5,65.0,1.62827984221765122300766168661e-6,-1.33279864119017926560425477157e1
+32.5,3250.0,3.17219094542012305605673366015e-1336,-3.0750992617409151918095518979e3
+33.0,0.33000001311302187,1.06895075048671751841320101764e-51,-1.1736516218235388532701803051e2
+33.0,16.5,2.36295535547230187999554693734e-4,-8.35042726710591954522435447627e0
+33.0,31.0,6.92266820034323767901993971245e-2,-2.67036891259035730876971028066e0
+33.0,33.0,6.92717925756258155562558683249e-2,-2.66971748918766964387292658961e0
+33.0,35.0,6.16167525488872226260793820351e-2,-2.78682148845379942790738221259e0
+33.0,66.0,1.38611219559584702348358640758e-6,-1.34890077112694197425214987029e1
+33.0,3300.0,1.00111518371265072913675545965e-1356,-3.12230427153756874586672147349e3
+36.5,0.36500000953674319,3.25090007672278542139839835736e-57,-1.30068418395977677683148334567e2
+36.5,18.25,1.1430930049793825434516858666e-4,-9.07660262128799026369178019267e0
+36.5,34.5,6.58479515580598789425246697683e-2,-2.72040695897510879397897287996e0
+36.5,36.5,6.58828106498249186346066175049e-2,-2.71987771140993177938003988091e0
+36.5,38.5,5.92437259109559718891171072514e-2,-2.82609539637204021671088490998e0
+36.5,73.0,4.50389622268070630733636762111e-7,-1.46131528015318732950682995691e1
+36.5,3650.0,3.13084639656843437831301334082e-1500,-3.4527363361088326882141026466e3
+37.0,0.3700000047683716,5.29709983747864784145718442711e-58,-1.31882775923341118867728304176e2
+37.0,18.5,1.03085874188483095527765886209e-4,-9.17994818710915362672690322902e0
+37.0,35.0,6.54044926107531112619616138036e-2,-2.72716432852431001553795625356e0
+37.0,37.0,6.54381611445943434806837865579e-2,-2.72664968695112248770654685653e0
+37.0,39.0,5.89258572874415435925459100749e-2,-2.8314752814759310968036145881e0
+37.0,74.0,3.83720587170164267060265070415e-7,-1.4773351186793091348686190484e1
+37.0,3700.0,9.88880641755813468527732416524e-1521,-3.49994052299137983323841116212e3
diff --git a/commons-numbers-gamma/src/test/resources/org/apache/commons/numbers/gamma/igamma_med_data.csv b/commons-numbers-gamma/src/test/resources/org/apache/commons/numbers/gamma/igamma_med_data.csv
new file mode 100644
index 0000000..68a18d9
--- /dev/null
+++ b/commons-numbers-gamma/src/test/resources/org/apache/commons/numbers/gamma/igamma_med_data.csv
@@ -0,0 +1,723 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# (C) Copyright John Maddock 2006.
+# Use, modification and distribution are subject to the
+# Boost Software License, Version 1.0. (See accompanying file
+# LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+# Extracted from: boost/libs/math/test/igamma_med_data.ipp
+# a, z, tgamma(a, z), gamma_q(a, z), tgamma_lower(a, z), gamma_p(a, z)
+
+0.9759566783905029296875,0.009759566746652126312255859375,1.003339192007827076679495082852814844336347745360235976200689788561799007730110137330271807878843422,0.9890348932311204142405476428315735322132825375129739181325170152149560168983641202727073881868421137,0.01112369385656880593053787042266942213006008594885039559843996330162391632861423778173725952365124566,0.01096510676887958575945235716842646778671746248702608186748298478504398310163587972729261181315788632
+0.9759566783905029296875,0.48797833919525146484375,0.6107075742899761923771199703161020169732161418698525715736270035568544567698769445946517198087313906,0.60200090392622800556746880021527940973985765617427715855663599678855269649431562996389062378697249,0.4037553115744196902329129829593822494931916894392338002255027483065684672888474305173573475937632775,0.39799909607377199443253119978472059026014234382572284144336400321144730350568437003610937621302751
+0.9759566783905029296875,0.8783609867095947265625,0.4103188243195825736649265764483608742565650301514019080978258727846258380934756822777647401521337079,0.4044690348331089562847173039266064850324957624072768224521011340506874965505832795400716939018472498,0.6041440615448133089451063768271233922098428011576844637013038790787970859652486928342443272503609601,0.5955309651668910437152826960733935149675042375927231775478988659493125034494167204599283060981527502
+0.9759566783905029296875,0.9759566783905029296875,0.3716156455565117999679764359314206771522167659503088545148165288456984447337491300360711644068227913,0.3663176354055262891120913532650947355579995910412343114483952548046833846145392929954730440121592797,0.6428472403078840826420565173440635893141910653587775172843132230177244793249752450759379029956718767,0.6336823645944737108879086467349052644420004089587656885516047451953166153854607070045269559878407203
+0.9759566783905029296875,1.0735523700714111328125,0.3365957734341682416974116339033939077306129158759127039900907555371173447101305942124236590906355356,0.331797030846884313930450730877113627495191936019305203409885944607670085443529202208539000516429768,0.6778671124302276409126213193720903587357949154331736678090389963263055793485937808995854083118591324,0.668202969153115686069549269122886372504808063980694796590114055392329914556470797791460999483570232
+0.9759566783905029296875,1.951913356781005859375,0.1385088659605976262491193813236600847409759615506046462442726458845512900567187865481680178692283672,0.1365341875889111868905471971345765310104098007339706625166294395122010561441478434485743781967094833,0.8759540199037982563609135719518241817254318697584817255548571059788716340020055885638410495332663008,0.8634658124110888131094528028654234689895901992660293374833705604877989438558521565514256218032905167
+0.9759566783905029296875,100.0,0.3329367866516218882556933190525174260789494242751242200806022302568879706613898466339952656223149765e-43,0.3281902091153740166486606492940994602463196281189732879787170311504671582868285770684776274764428056e-43,1.014462885864395882610032953275484266466407798015407706636940926294091018806981767406982208969380557,0.9999999999999999999999999999999999999999999671809790884625983351339350705900539753680371881026712021
+3.6673679351806640625,0.03667367994785308837890625,4.015456203482594363703108922457754241931144753022213644581757557362565251633751067204031319947614119,0.9999996416031942390887720081336876066391718689312749653540593938756701333363441103622007068271772676,0.1439127192779586379672567684497393093482122996236962325320321035788002657163475408231449064922934748e-5,0.3583968057609112279918663123933608281310687250346459406061243298666636558896377992931728227323669815e-6
+3.6673679351806640625,1.83368396759033203125,3.385019930725903437101102788992704693233898009050769147408163022452742444496498683915469724406386969,0.8429972949548684405745767660490086691148623810631514321669785188982553992208514843501333648638513432,0.6304377118838837061883858060327340460903402260944407341359198552308585951399095467639698269902920728,0.1570027050451315594254232339509913308851376189368485678330214811017446007791485156498666351361486568
+3.6673679351806640625,3.300631046295166015625,2.042636694164828921905502083385700066735693044660836778705857972635214071130121556552436672447216837,0.5086933734500178903640699120946947210401396612791668913147219471061294630383430188409151403350782137,1.972820948444958221383986511639738672588545190484373102838224905048386968506286674127002878949462205,0.4913066265499821096359300879053052789598603387208331086852780528938705369616569811590848596649217863
+3.6673679351806640625,3.6673679351806640625,1.728735745904876644611421612335214154871948437794169498245863240719631120462386158739239016328353788,0.4305202295151868380055049423689706093538316338471304831830580882615064594948400767660055044416881203,2.286721896704910498678066982690224584452289797351040383298219636963969919174022071940200535068325254,0.5694797704848131619944950576310293906461683661528695168169419117384935405051599232339944955583118797
+3.6673679351806640625,4.034104824066162109375,1.444516814327011000070882393866730351220066002187575174421871857951121331631687572841352290352819824,0.3597390242642850341727041436017742040531479500883038068894793884921274228917627066755248387784064007,2.570940828282776143218606201158708388104172232957634707122211019732479708004720657838087261043859218,0.6402609757357149658272958563982257959468520499116961931105206115078725771082372933244751612215935993
+3.6673679351806640625,7.334735870361328125,0.1928842173031202025225624838692485746218833743579218885223983296392167688850553059225165015834992419,0.04803542571495237241980779345714029329653710992944984439518803096715759866423134446016679398725604201,3.822573425306666940766926111156190164702354860787287993021684548044384270751352884171158251598726148,0.951964574285047627580192206542859706703462890070550155604811969032842401335768655539833206012743958
+3.6673679351806640625,366.736785888671875,0.372800134674871004133305800038544316286141292939638700513746479143277577659533359615901901430435418e-152,0.9284125692646457240171069953349802726912792879264744141937156428280981577209798205498168718568776692e-153,4.015457642609787143289488595025438739324238235145209881544082877683601039636408230679439551396679042,1.0
+3.927384853363037109375,0.0392738468945026397705078125,5.481066062312759609088467038496268309673263041819793219043840830040297205342994832270601061056033285,0.9999998644970030817287440986146656923084586349422512633027737770225692386615800459657372422641664819,0.7427009783886154185672763382162962257956018203370314581397997422675096103629829713614292219536073734e-6,0.1355029969182712559013853343076915413650577487366972262229774307613384199540342627577358335181356689e-6
+3.927384853363037109375,1.9636924266815185546875,4.681812913714047542283856210321072659033064415174669810637868258672116849915694109286206104312772615,0.8541791370671521729901850166624917295981362963337091768339429521680602021206356329487839388666490246,0.7992538912996904554200293954515338669364244222469437454374307111679226229369110859673663181724826232,0.1458208629328478270098149833375082704018637036662908231660570478319397978793643670512160611333509754
+3.927384853363037109375,3.5346462726593017578125,2.816382129373238431622360210900121113984870409677894964310059270076658015588413570675787110723304341,0.5138383146136784446720548677781035602174821016872781850577578962283277420194842365544178296035766061,2.664684675640499566081525394872485411984618427743718591765239699763381457264191624577785311761950897,0.4861616853863215553279451322218964397825178983127218149422421037716722579805157634455821703964233939
+3.927384853363037109375,3.927384853363037109375,2.372524524117176265960547286995208847829504338216474626443140132870682887519485551770239936222341945,0.4328581658495639630270840755675107928235764222751457590954583968179864712767674894422404906165588576,3.108542280896561731743338318777397678139984499205138929632158836969356585333119643483332486262913293,0.5671418341504360369729159244324892071764235777248542409045416031820135287232325105577595093834411424
+3.927384853363037109375,4.320123195648193359375,1.970611625388247978708850134084306947654318148394020488479689347566403177940610018095263177207347023,0.3595306708514582221331302218158069672828911270152191991137293925439419946034877363340407656533313991,3.510455179625490018995035471688299578315170689027593067595609622273636294911995177158309245277908216,0.6404693291485417778668697781841930327171088729847808008862706074560580053965122636659592343466686009
+3.927384853363037109375,7.85476970672607421875,0.238706275514383026709028032263691077278567144774320344670291470842396455092581594240259417847732045,0.04355106113576820787009967250010306075903743361159344036127233964378152216248958038694036508132089635,5.242360529499354970994857573508915448690921692647293211405007498997643017760023507401906976198864705,0.9564489388642317921299003274998969392409625663884065596387276603562184778375104196130596349186791037
+3.927384853363037109375,392.738494873046875,0.1078993903281671896766902458293491839848722367396818902919765955362752479299554076754789326345029705e-162,0.1968583747774567503864275752806505701451497730718605463389743484952827957146229484595624495962975282e-163,5.481066805013737997703885605772606525969488837421613556075298969840039472852605195253572422485255239,1.0
+4.0533123016357421875,0.0405331216752529144287109375,6.41813285759464991786370353876022753573157877461535817238850166391366463955791959530384794100190872,0.9999999153376853984885845524839724176593964442100629723951601696835883369687013798502558587978588299,0.5433740291472787177259642030841127451712424954512787213858894935800380943446964607803762001476194369e-6,0.8466231460151141544751602758234060355578993702760483983031641166303129862014974414120214117007469975e-7
+4.0533123016357421875,2.02665615081787109375,5.514707456930929301459079955313869438197604073116501578585214366340025188854030716468633857798384298,0.8592385219195666661138078362450122638220024524868804909958062167776733168925557829786689630134192895,0.9034259440377497636833413094105611816467198727413520450820086834631330307419832235316748635797245696,0.1407614780804333338861921637549877361779975475131195090041937832223266831074442170213310369865807105
+4.0533123016357421875,3.647981166839599609375,3.31312004338382642184449230231977509243273512126776674881440136854727850356190389201660465913190857,0.516212399524725097994684175184876436874372793206907921261581372871952489632052496592045138421516394,3.105013357584852643297928962404655527411588824590086874852821681255879716034110047983704062246200297,0.483787600475274902005315824815123563125627206793092078738418627128047510367947503407954861578483606
+4.0533123016357421875,4.0533123016357421875,2.784885343934578513149804339717137368299390408067016796848041900953216841366437030241554499406837817,0.4339089217924731861183993826512701012093309775829357321262802724234704087971362274687905192149369188,3.633248057034100551992616925007293251544933537790836826819181148849941378229576909758754221971271051,0.5660910782075268138816006173487298987906690224170642678737197275765295912028637725312094807850630812
+4.0533123016357421875,4.458643436431884765625,2.306553712479142633820833960152698687620756933527776352577981760649736926199934255571033388056820818,0.3593807682668325353265411226551952864628632629455109728805051026664326234974500588222530217351917741,4.11157968848953643132158730457173193222356701233007727108924128915342129339607968442927533332128805,0.6406192317331674646734588773448047135371367370544890271194948973335673765025499411777469782648082259
+4.0533123016357421875,8.106624603271484375,0.2666208775089865235658723894506298859889618919139046778832877954885433336210504108700118485172825721,0.04154180987711253275131159150161436117019650310762690095170282803753763611183019192983825306101724165,6.151512523459692541576548875273800733855362053943948945783935254314614885974963388715345260029002709,0.9584581901228874672486884084983856388298034968923730990482971719624623638881698080701617469389827584
+4.0533123016357421875,405.33123779296875,0.856277210194896595630413928210981825918823933239296642465635762524914381120581031266134384044083328e-168,0.1334153026588166560974220666148576952626885376443753701545306845816344804832677337563827322024911951e-168,6.418133400968679065142421264724430619844323945857853623667223049803158219596013940000308721378108868,1.0
+4.125904560089111328125,0.0412590466439723968505859375,7.043701108728780223687961843391756553125884985884330252942520360436988162021941273534800312450456719,0.9999999354299987690775889622689157338228537326556764531411371319964512403841325237126723152152525859,0.4548118186280665790814208397404344920716063177183303025540785365853082955621661932085259124362671874e-6,0.6457000123092241103773108426617714626734432354685886286800354875961586747628732768478474741412221914e-7
+4.125904560089111328125,2.0629522800445556640625,6.072072191835942345003502395331628487796947075384854346503939861579817399707683543874382853055509126,0.8620569933379949084958144772211332547216342276449289652619682285641417368272372653640214768414358773,0.9716293717046565067510385294809678057634299821057936247688830529357073476225532918266106679208600285,0.1379430066620050915041855227788667452783657723550710347380317714358582631727627346359785231585641227
+4.125904560089111328125,3.713314056396484375,3.645460819462813679506809267954671376912867065616234453478114473126983778850729102493984996098169322,0.517549016887986978339058286692363497387152223601701127971415378456062142503029155666791422528985886,3.398240744077785172247731656857924916647509991874413517794708441388540968479507733207008524878199833,0.482450983112013021660941713307636502612847776398298872028584621543937857496970844333208577471014114
+4.125904560089111328125,4.125904560089111328125,3.060437018394927204205753747690008049935223919046361115453354046814747587291189903564916268552459642,0.4344927153410745578456098812651452153289051685042500852197589537423872535948793029632960570229939795,3.983264545145671647548787177122588243625153138444286855819468867700777160039046932136077252423909513,0.5655072846589254421543901187348547846710948314957499147802410462576127464051206970367039429770060205
+4.125904560089111328125,4.53849506378173828125,2.53067166889025350190244243571991561404324655614760134290664128572613080628587924183262210511980194,0.3592815007934807835237693104942265218080115344798406819595849604339747790292814616129198747747177498,4.513029894650345349852098489092680679517130501343046628366181628789393941044357593868371415856567215,0.6407184992065192164762306895057734781919884655201593180404150395660252209707185383870801252252822502
+4.125904560089111328125,8.25180912017822265625,0.2847671704591532210212992508182019504542348463951231766726582961911245322997866584102488204616215587,0.04042862518951068067360068919978890036257988112029108744002473477277769872227048076109444781316316523,6.758934393081445630733241673994394343106142211095524794600164618324400215030449999868027066943372826,0.9595713748104893193263993108002110996374201188797089125599752652272223012777295192389055521868368348
+4.125904560089111328125,412.5904541015625,0.9849192524234776299068794846278154032022691748510917397291620486958650212318203702782351817912528128e-171,0.1398297817615652167353884353734910667012437119857548398337840556682567999355250879796445061410496292e-171,7.043701563540598851754540924812596293560377057490647971272822914515524747330236835700993520976369155,1.0
+5.0940532684326171875,0.0509405322372913360595703125,27.67920294027928923880958239390404343442040936899815307478598799340574231811557367409116092396038856,0.9999999982379693902044640226314365343521271029087308730060359246592570889283931854443539268908129371,0.4877160292145176564781609346656380162653242308676730589954979956027538802650302642256952953547903483e-7,0.1762030609795535977368563465647872897091269126993964075340742911071606814555646073109187062913416189e-8
+5.0940532684326171875,2.54702663421630859375,24.74117379934670885485935851992100343082362193634847845591339750099791646326335667650716993806822169,0.8938542706281541291842093703813781663719803706713169378020847920356047543953828832584130123038596963,2.938029189704183305401989521799133470160589059182097705639896391957625415127605024087017408461696412,0.1061457293718458708157906296186218336280196293286830621979152079643952456046171167415869876961403037
+5.0940532684326171875,4.58464813232421875,14.7675729987104578095439138929485472282856177526532559945486889320051407963321233374742042261580975,0.533525947425295841907088598191442498030625003421091351895084173752215277026432917855884840150812328,12.9116299903404343507174341487715896726985932428773201670046049609504010820588383631199831203718206,0.466474052574704158092911401808557501969374996578908648104915826247784722973567082144115159849187672
+5.0940532684326171875,5.0940532684326171875,12.2077823592235985003120696793331736918834158602172392466220471092575502398077890469114806062483926,0.4410452990302015213950895634100686065935382954619870959119191902708416268312625047813299941800307603,15.4714206298272936599492783623869632091007951353133369149312467836979916385831726536827067402815255,0.5589547009697984786049104365899313934064617045380129040880808097291583731687374952186700058199692397
+5.0940532684326171875,5.603458404541015625,9.889218349233061197877388817321731640408509396976489163081870258238303847158703369099418745543914618,0.3572797364557409966350802086721683228140681945237226616673898786823074886738611252458152925379220831,17.78998463981783096238395922439840526057570159855408699847142363471723803123225833149476860098600348,0.6427202635442590033649197913278316771859318054762773383326101213176925113261388747541847074620779169
+5.0940532684326171875,10.188106536865234375,0.7822639090209128469017740014404389278213317993585533146649871947711294107004337683013750571158629812,0.02826179313509692702070705503881066214744470133414852372658706264644174732638031855325556636515647396,26.89693908002997931335957404027969797316287919617202284688830669818441246769052793229281228941405512,0.971738206864903072979292944961189337852555298665851476273412937353558252673619681446744433634843526
+5.0940532684326171875,509.40533447265625,0.7152104781583126172577145380526976040514099585854760760296929839567558638220447646872943192480272666e-210,0.2583927284471411991649181400315680779298102709841549255602666891812445052621672738125161953683807107e-211,27.6792029890508921602613480417201369009842109955305761615532938929555418783909617005941873465299181,1.0
+5.596034526824951171875,0.0559603460133075714111328125,61.15722298035936537017631415308397274094789448016853597795214965840284033719264656727655832204443666,0.9999999997257414964174877578408388041720660119221931882256703080064742903832273083681210101174925492,0.1677288846245549632144093838722156507107886394056152268018954428714206090657606391814637409180190668e-7,0.2742585035825122421591611958279339880778068117743296919935257096167726916318789898825074508024511567e-9
+5.596034526824951171875,2.7980172634124755859375,55.46393259928605398529060926253574732815503627091789196500276832668377548368528636291175384881761946,0.9069073100635526558798059992027420822892194195122167747431420995473747342347831577133123881324620939,5.693290397846199847341201211989163800014423280329507953510904011908609140649421110940868391373191292,0.09309268993644734412019400079725791771078058048778322525685790045262526576521684228668761186753790609
+5.596034526824951171875,5.03643131256103515625,33.06999514374162703858384175791605334015778919486040062421563603498081622981834289402299137207575168,0.540737357307612291724814748021271665690168505397520383106887245752994682792873843998172538751374452,28.08722785339062679404796871660885778801167035638699929429803630361156839451636457982963086811505907,0.459262642692387708275185251978728334309831494602479616893112754247005317207126156001827461248625548
+5.596034526824951171875,5.596034526824951171875,27.13866373600460678031845259439722547760861637796306913755584505521252241888403927165288899075121503,0.4437523877968948326787741867613129330637102551518554802656301099528107574898532377937055841574056371,34.01855926112764705231335788012768565056084317328433078095782728337986220545066820219973324943959573,0.5562476122031051673212258132386870669362897448481445197343698900471892425101467622062944158425943629
+5.596034526824951171875,6.155638217926025390625,21.76560826597825775813388197172226288040312333241899565785904138891289832424017292540738182267709586,0.3558959547100246363088689929831473651825033493608960519357567107283879526378383673378203376307166769,39.39161473115399607449792850280264824776633621882840426065463094967948630009453454844524041751371489,0.6441040452899753636911310070168526348174966506391039480642432892716120473621616326621796623692833231
+5.596034526824951171875,11.19206905364990234375,1.439537901002514156618214155186974257624221351786322250188529023352495566195413144729463286616539014,0.02353831371758027773053258284343068010883900114479589930362450438816623513130470385989369552255442408,59.71768509612973967601359631933793687054523819946107766832514331523988905813929432912315895357427174,0.9764616862824197222694674171565693198911609988552041006963754956118337648686952961401063044774455759
+5.596034526824951171875,559.60345458984375,0.3983234659181026903111274462700552641513723834582819185339327841139441160602206309682112473658483409e-230,0.651310583439638233092076574184467552529925632573274100844292568873582641191086352985401355931335791e-232,61.15722299713225383263181047452491112816945955124739991851367233859238462433470747385262224019081075,1.0
+10.16461181640625,0.101646117866039276123046875,526448.7517568289326110671748510600657971966253053947023808993666002906407096023537805535160810892685,0.9999999999999999862329405727010614237121156955436061306289155513366940944973015989290727877130269392,0.7247651250863610508447105825162161128155794519669560025006923071554784515195617094058138920506057017e-11,0.1376705942729893857628788430445639386937108444866330590550269840107092721228697306082545409586221235e-16
+10.16461181640625,5.082305908203125,510322.9302643930829189712815409463837708346310819194595468756491664935321137893514321335165070003787,0.9693686775044638948930091763509897559191009201137438746311935914342605022120771270176313690471277963,16125.82149243585693974714417372419047346781938563637098981823710335713360273607390320451476970598384,0.0306313224955361051069908236490102440808990798862561253688064085657394977879228729823686309528722037
+10.16461181640625,9.14815044403076171875,309968.4341614876446448332739272161205883835978589370895483864634223256229622694639843445566624856873,0.5887912795444610424180501080193144141510684557554702797492628985066881626745530757318797160171077655,216480.3175953412952138851517874544536559188526086187409883074228475250427542559613509934746142206752,0.4112087204555389575819498919806855858489315442445297202507371014933118373254469242681202839828922345
+10.16461181640625,10.16461181640625,241256.7047700055017897072029796756492117395946188754112428022558826674974871019242969791298393214097,0.4582719665777533873524111830161408363528108382771615842424631439789215288234234671384465952290754492,285192.0469868234380690112227349949250325628558486804192938916303871831682294235010383589014373849529,0.5417280334222466126475888169838591636471891617228384157575368560210784711765765328615534047709245508
+10.16461181640625,11.18107318878173828125,178942.1777796453571690127175124224988678522659240040265896878601138154683469866109080855101605355064,0.3399042683309471278708545053913110708272442887424368187756502758173278088205879154522251908513691296,347506.5739771835826897057082022480753764501845435518039470060261560351973695388144272525211161708562,0.6600957316690528721291454946086889291727557112575631812243497241826721911794120845477748091486308704
+10.16461181640625,20.3292236328125,2485.195013467645101936126206725504402616278686263740815967196583615169019487481725321208547786293062,0.004720677948564264738297012343425614540389100171646133722525726370697436134069646508149238537023878915,523963.5567433612947567822995079450698416861717812920897207266896862354966970379436100168227289200695,0.9952793220514357352617029876565743854596108998283538662774742736293025638659303534918507614629761211
+10.16461181640625,1016.461181640625,0.1316034062561936442010407628172436633248840383182737471639489492599344416496848609453262970601035471e-413,0.2499833190163633494640443799689533877375622476756834298036337428098160854559625455157155261437961898e-419,526448.7517568289398587184257146705742443024504675558305366938862698506657165254253353380312767063626,1.0
+10.20526981353759765625,0.102052696049213409423828125,577373.2306846846427549334134715517585780256766692203486186052483423835657439070864386632630415473474,0.9999999999999999881380840833286780649242379976641395794604783446096901891113163248466984120192341719,0.6848752714918603737059034404508144842114313361494961762164489761147249616550722765380537590095751718e-11,0.1186191591667132193507576200233586042053952165539030981088868367515330158798076582805259918447900967e-16
+10.20526981353759765625,5.102634906768798828125,559853.9016749728948664889804306760919895279094938352780099902896618071406942326153743697118411159219,0.9696568388026298724571840350939331650882365861759024141348056816418178953439691167122162876175433685,17519.3290097117547371971479594794036475321716835299127229283201755381872141642322115431677511541908,0.03034316119737012754281596490606683491176341382409758586519431835818210465603088328778371238245663146
+10.20526981353759765625,9.18474292755126953125,340147.9462823947749012509541247636967506308559672224065950062576671962159915495947335122182088642714,0.5891300950669750348303000724524594141538414517925522781976587063475430962359440531500812541019011577,237225.2844022898747024351742653917988864292252101427841379123521701491119168472528524006613834058414,0.4108699049330249651696999275475405858461585482074477218023412936524569037640559468499187458980988423
+10.20526981353759765625,10.20526981353759765625,264642.0355283880203354293582319738606772548833999212092816412356457170370548472871640485965341000375,0.458355222348218734574721395669230340113102133148116484166472456571094271633807629470156631602057135,312731.1951562966292682567701581816349598051977774439814512773741916282908535495604218642830581700752,0.541644777651781265425278604330769659886897866851883515833527543428905728366192370529843368397942865
+10.20526981353759765625,11.22579669952392578125,196165.1943714897001070837876769128811521133449935447128366760236479837696847141804665530610309415742,0.3397545711270073270001418665061276945171161175678639012711536412399231965503301884012220485465706226,381208.0363131949494966023407132426144849467361838204778962425861893615582236826671193598185613285386,0.6602454288729926729998581334938723054828838824321360987288463587600768034496698115987779514534293774
+10.20526981353759765625,20.4105396270751953125,2687.807494956632209305226925263539027707814430482777438134001803826256877532124652263840735300645464,0.00465523400135691249187809344920426062408119894589239915961933246326731876789921752461035407957902137,574685.4231897280173943809014648919566093522667468824132947846080335190710308647229336490388569694673,0.9953447659986430875081219065507957393759188010541076008403806675367326812321007824753896459204209786
+10.20526981353759765625,1020.5269775390625,0.310268388782846312556113793189296201730642609204061744839707355617600836642995498294123949804615074e-415,0.5373792415261632321738888075178751878408184659845876901847706207467620051062405280412592787379049203e-421,577373.2306846846496036861283901554956370600811773651907329186098373453279083968475859128795922701127,1.0
+11.43124485015869140625,0.114312447607517242431640625,10092714.27309532865006107109984160134119234856106351823087953061069644032877254771706374464745498706,0.9999999999999999998666174677841348871581941134561745067532121430792042081738322222250547480632532191,0.1346191786676659318338674079302806447239984506476369087821979614833382259967443019093939770966916552e-11,0.1333825322158651128418058865438254932467878569207957918261677777749452519367467809248161582099366587e-18
+11.43124485015869140625,5.715622425079345703125,9861857.89770996609832128396408583707303095590511419947407646424015770697972718340652782972235297002,0.9771264330745230394774993912717105823318898449977215560791859715857993651357963116304442071641029835,230856.375385362553085978922432423586500066735252125204043050877015102436867343925369297185069460058,0.02287356692547696052250060872828941766811015500227844392081402841420063486420368836955579283589701649
+11.43124485015869140625,10.288120269775390625,6044328.351701444163117136726935374422948885961562834124412634550509169251766297134653929432409387567,0.5988803594503931822638682857302466014155135206406258678784897866848793983791726668665245270529145337,4048385.92139388448829012615958288623658213667880349055370688056666364016482823019724319747501304251,0.4011196405496068177361317142697533985844864793593741321215102133151206016208273331334754729470854663
+11.43124485015869140625,11.43124485015869140625,4649239.343730333416785270770745004484050098527993233900794668999765895229232415000629557944691295372,0.4606530233521077294152024750299237055842955337979822338527585311794384579895769952369289167626081443,5443474.929364995234621992115773256175480924112373090777324846117406914187362112331267568962731134705,0.5393469766478922705847975249700762944157044662020177661472414688205615420104230047630710832373918557
+11.43124485015869140625,12.5743694305419921875,3383643.259017955796656659800421550658071647827116022061323174865995550559638743908600655129998019828,0.3352560240447813866302950168902559329877251310883796302241206663571916768101959060721830654067811942,6709071.01407737285475060308609671000145937481325030261679634025117725885695578342329647177742441025,0.6647439759552186133697049831097440670122748689116203697758793336428083231898040939278169345932188058
+11.43124485015869140625,22.8624897003173828125,30903.23819404242335935936940603101334889108464504016271537068360076922751316540958525260106484009169,0.003061935308762558208178728021795206614635030454948539057317932317318345947846257896724761649811585573,10061811.03490128622804790351711222964618213155572128451540414443357204018908136192231187430635758999,0.9969380646912374417918212719782047933853649695450514609426820676826816540521537421032752383501884144
+11.43124485015869140625,1143.12451171875,0.2825091954340953009223059204899029922029808650851997121188393575907468437445133167654127981344263404e-464,0.2799139931932827031436483629166505964509166426649585944925188286961163103917655940175015718274800062e-471,10092714.27309532865140726288651826065953102264036632467811951511717280941659452733189712690742243008,1.0
+11.690219879150390625,0.1169022023677825927734375,18808650.09647313719510484406379451190987476255652989262673651261747569800509024507405117261863593745,0.9999999999999999999482740410833571655579119508141820216007520043338661674579848313795238343269759304,0.9728954621676797791931442327068294215572730291035264661698800172338583782500576230469904563164771399e-12,0.5172595891664283444208804918581797839924799566613383254201516862047616567302406961212107454491705266e-19
+11.690219879150390625,5.8451099395751953125,18403136.32293801297862003201902408909834415774760242627319828965105147433679686168281916722125529121,0.9784400384155605487060520174330022751307330330759436520601522975594544824581516995082778940800448561,405513.7735351242174577075069381025907237490416342957750954959955277501344632634084658637756307038608,0.02155996158443945129394798256699772486926696692405634793984770244054551754184830049172210591995514393
+11.690219879150390625,10.521198272705078125,11300880.43696190252412840183812525987009577873512453086890997708560684499549236858946077668992759675,0.6008342108018141266570377919053377860276755642851878451502716798990410627223006118782210055474487012,7507769.659511234671949337687836931818972128054112191179383808560972379475767756501824254306958398325,0.3991657891981858733429622080946622139723244357148121548497283201009589372776993881217789944525512988
+11.690219879150390625,11.690219879150390625,8672509.587204027141047449650776982999738766147950698614692257038746897122992915467614482619093048385,0.4610915479165745005058792025348932322301556237469077614037776843609409871777916052071130909569703745,10136140.50926911005503028987518520868932914064128602343360152860783232734826720962367054837779294669,0.5389084520834254994941207974651067677698443762530922385962223156390590128222083947928869090430296255
+11.690219879150390625,12.859241485595703125,6287954.452547948509208548248214985257796689301980330059387321687317937525963079472467938262956331912,0.3343118416417890887558019505752886442912001812613510817941400655214992910141971185748270762169440714,12520695.64392518868686919127774720643127121748725639198890646395926128694529704561881709273392966316,0.6656881583582109112441980494247113557087998187386489182058599344785007089858028814251729237830559286
+11.690219879150390625,23.38043975830078125,52737.51434305912576323185862500387385932919089021157164745379299882357348980714607562137085667999636,0.00280389682792536425523049315988273139570015031106610400530594250374235193086174809886542601431038023,18755912.58213007807031450766733718781520857759834651047664633185358040089777031794520940962602931508,0.9971961031720746357447695068401172686042998496889338959946940574962576480691382519011345739856896198
+11.690219879150390625,1169.02197265625,0.1258615995440589928894183874007422367750084251989841842081504821900762607529866900998826187957908956e-474,0.6691687010949268225465318941737153385818662177946591999560276217475180189765295773415664733761718407e-482,18808650.09647313719607773952596219168906790678923672204829378564657922447126012509128503099688599507,1.0
+12.955684661865234375,0.12955684959888458251953125,428307852.9299610352603272531082713661888583896816721467285635713930220656308480438015333066490233856,0.9999999999999999999994931466175300998756585605008867059180111770451931648396874370987015073892720435,0.2170892839959712731982318236572811524135888980905680524672678879721525025563824491887194028197413803e-12,0.5068533824699001243414394991132940819888229548068351603125629012984926107279565026351600154505463801e-21
+12.955684661865234375,6.4778423309326171875,421374733.0132156786323395479536985347385054384758892122222388740186536130714245698919518873402614582,0.9838127648855434508747718544662632241604964065002861046456693601242792566621453902265899448045645527,6933119.916745356628204794438568802723551183029440215658738286272459020611890741797553571811318309833,0.01618723511445654912522814553373677583950359349971389535433063987572074333785460977341005519543544731
+12.955684661865234375,11.6601161956787109375,261236298.1802810712987621880492469341863720184791952589453116572293797457059112363561962554804359674,0.6099264731973048601765626963152049375033628810929236912032334489202859499894588556091532155300537837,167071554.7496799639617821543430204032756846030261341689356655030617328879774040753333092036711438006,0.3900735268026951398234373036847950624966371189070763087967665510797140500105411443908467844699462163
+12.955684661865234375,12.955684661865234375,198324381.4075037895099229974788883561027751227741976333555245513098366363563827914775435905585750081,0.463041665126636723998208693638109693540497596502913514966430552698722979583809022802525261569028313,229983471.5224572457506213449133789813592814987311317945254526089812759973269325202119618685930047599,0.536958334873363276001791306361890306459502403497086485033569447301277020416190977197474738430971687
+12.955684661865234375,14.2512531280517578125,141230735.8874254973009250665663136967557618612703682420576794746955312856987659231137965544806836993,0.3297411778030607998826961047847508828762412676958433501823084815947456559906204692400882833540571914,287077117.0425355379596192758259536407062947602349611858232976855955813479845493885757089046708960687,0.6702588221969392001173038952152491171237587323041566498176915184052543440093795307599117166459428086
+12.955684661865234375,25.91136932373046875,782663.7179885857699463656633848430264031052969771539557675230756095485493336709682441798241628222402,0.001827339173527996727830528639480721240580411776852898202182852341611686756472171024979973209292115479,427525189.2119724494905979767288824944356535162083522739252096372155030851339816407212612793274169458,0.9981726608264720032721694713605192787594195882231471017978171476583883132435278289750200267907078845
+12.955684661865234375,1295.5684814453125,0.3608905612956014718728360841492827803469208542262913410930444827586924022284529876190332295426303354e-525,0.8425961812906942803681327965776686513602182735742397059258730975433205218108675823256993369297423774e-534,428307852.929961035260544342392267337462056621505329427880977160291112633683315311689505459151579768,1.0
+13.02671527862548828125,0.13026715815067291259765625,512456131.8985713439314859419608942682232163312465814764055829216540810809686139697165303818929464912,0.9999999999999999999996089876375785556082730797020993512933501586157431890909903416996448292097006065,0.2003766827710156884109668719700088927792368234308933522173719858336365747396436227576944718509904221e-12,0.3910123624214443917269202979006487066498413842568109090096583003551707902993935349855742150116524265e-21
+13.02671527862548828125,6.513357639312744140625,504292381.474701294755093414572451066507117979650827675327943247721717397051500332708321678088535672,0.9840693672771079811296047831348781934315010146617578374281868772416224693552294962586520546484570965,8163750.423870049176592904071214217404509318467723809970418910755794577269331008994042340379150462875,0.01593063272289201887039521686512180656849898533824216257181312275837753064477050374134794535154290351
+13.02671527862548828125,11.72404384613037109375,312811511.370335737099981249504067629884221760261211771521346728405536483503354994366811296188166823,0.6104161739882340392601054170315919816474360234103221597660888635095434009477428140163224523528671548,199644620.5282356068317050691395976540274055378573397137770154300719754908174763473355527222795193118,0.3895838260117659607398945829684080183525639765896778402339111364904565990522571859836775476471328452
+13.02671527862548828125,13.02671527862548828125,237340275.6027451556138298054657455871810468338727042152922779419653686854991039505324284434247676821,0.4631426200783974405370941094794755868570526389877988716806381827967014116363337785340168914481043737,275115856.2958261883178565131779196967305804642458472700060842165121432888217273911699355750429184527,0.5368573799216025594629058905205244131429473610122011283193618172032985883636662214659831085518956263
+13.02671527862548828125,14.32938671112060546875,168847646.3349317777841126601706798558420196115600418111455114346072639519130067900201172194868835417,0.3294870249856844408300641114781382399843859209915639742593184635620302309477771038338395768606135993,343608485.5636395661475736584729854280696076865585096741528507238702480224078245516822467989808025932,0.6705129750143155591699358885218617600156140790084360257406815364379697690522228961661604231393864007
+13.02671527862548828125,26.0534305572509765625,914280.5548544152313447697527713571522430738687645775272692644719732005123160962050476620622257883637,0.001784114771867683680926146018659266869823838208792181637779845196865282058025525019741183868065175688,511541851.3437169287003415488908939267593842242497869077710928940055387738085152454973163564054603465,0.9982158852281323163190738539813407331301761617912078183622201548031347179419744749802588161319348243
+13.02671527862548828125,1302.6715087890625,0.5274845075196482758038095191814406458190839939289614665512784576361913542768287604269607416957925801e-528,0.1029326169959951705444305337097507872401946111420602895456564021725725915339783433545496866599037744e-536,512456131.8985713439316863186436652839116272981185514852983621584775119743208313417023640184676861348,1.0
+13.13518810272216796875,0.131351888179779052734375,674462743.149046021333390617481295959023056986603542715040607449857491437739458385055464991102676626,0.9999999999999999999997369080074745518228972214981883535468573358653548249895577011421471030914587901,0.1774457469792620895637286596897675892819508337779648920502389182467829092033972469924933804244251644e-12,0.2630919925254481771027785018116464531426641346451750104422988578528969085412098813617471539843505748e-21
+13.13518810272216796875,6.567594051361083984375,663976926.1089374238943691132089675858087901675766470056460066856592084102466099092517459591908307117,0.9844530818838848876935027066618934383202331954767309237438114406387621679702882223974106888092838142,10485817.04010859743919895001930763530383054768658547698388271503206099238489871472196581482104931156,0.01554691811611511230649729333810656167976680452326907625618855936123783202971177760258931119071618575
+13.13518810272216796875,11.82166957855224609375,412204696.8307228050226802056656929347987682947430983234210100097034419624393912194117092522454628402,0.6111600692814426197272298752058182998679453431437421326863094888154883792517219522694163434483279862,262258046.3183232163108878575625822863138524205201341592088793909878274401921174045620025217664171831,0.3888399307185573802727701247941817001320546568562578673136905111845116207482780477305836565516720138
+13.13518810272216796875,13.13518810272216796875,312475356.5824610108259197670087841857841677515456614597483364235579229992958904626165438099339229377,0.4632952075655403599296609250301929956592682160503649373632741625393833157586404593759340018391217222,361987386.5665850105076482962194910353284529637175710228815529771333464033356181613571679640779570856,0.5367047924344596400703390749698070043407317839496350626367258374606166842413595406240659981608782778
+13.13518810272216796875,14.44870662689208984375,221965306.4670367895193649944193082058184659433738135892152877254368739610191574173118140847631220421,0.3290994331735620100541463324249882725381274772589466481096043917775520409559812138661513849624454252,452497436.6820092318142030688089670152941547718894188934146016752543954416123512066618976892487579812,0.6709005668264379899458536675750117274618725227410533518903956082224479590440187861338486150375545748
+13.13518810272216796875,26.2703762054443359375,1160144.237126138624187141036000326831571587831367159333885546778122263569600144913457664578892051587,0.00172010129382308129961759508663594167621919741616388826502029075371462769318294133239408670606225463,673302598.9119198827093809221922748942810491274318653232960038539131471390619084790602541094329879717,0.9982798987061769187003824049133640583237808025838361117349797092462853723068170586676059132939377454
+13.13518810272216796875,1313.518798828125,0.2470999421474821597235308289076325123722724994380264375823050668524525489555593662545862037094478454e-532,0.366365591958096973621356895786731892565071702842932462698171708959737407171613677057820056708003288e-541,674462743.1490460213335680632282752211126207152632324826298894006912694026315086239737117740118800232,1.0
+13.97996234893798828125,0.1397996246814727783203125,5910654223.190215788712221244871743080011197576752925099373275489303262915640348520934061734994150573,0.9999999999999999999999879657225377205875821928652771785191473449506712055920921533669426197462676218,0.7113045290546464179234042403712777588894648193088517664505293313012094595346443734096983315932600523e-13,0.1203427746227941241780713472282148085265504932879440790784663305738025373237822347500872273073455932e-22
+13.97996234893798828125,6.989981174468994140625,5834591455.204726395692966509334949983448949816609165568973206349678278441343056643384796214613337078,0.987131243833032871289435934724229856545636807331228828080240151990052328357325478870385325351915856,76062767.9854893930193258659896985612040401005677966581759580861069153594739369304823956413267669592,0.01286875616696712871056406527577014345436319266877117191975984800994767164267452112961467464808414404
+13.97996234893798828125,12.581966400146484375,3645682417.055270454909039050896463482121995407579205967853528083906892713884167560195360975199787665,0.6167984590862346659620227837574966526888365201825142428286346309357175181938035409936078191562891425,2264971806.134945333803253324428185062530994509597756259295636351878301086932826013671830880740316372,0.3832015409137653340379772162425033473111634798174857571713653690642824818061964590063921808437108575
+13.97996234893798828125,13.97996234893798828125,2745038337.187854045315426210338854801937918819786231725118964785963145351775581938865427692338810608,0.4644220814707457863066850889417751896925992503532795557288541594665052367354920088452455876392165752,3165615886.002361743396866164985793742715071097390730502030199649822048449041411635001764163601293429,0.5355779185292542136933149110582248103074007496467204442711458405334947632645079911547544123607834248
+13.97996234893798828125,15.3779582977294921875,1927484556.644093124630203748371939369194765925990182162651410153287629164154294410760321585479953314,0.3261034200041146790989240264695734427314492477291489582445757583647475157176232002651402312794889128,3983169666.546122664082088626952709175458223991186780064497754282497564636662699163106870270460150724,0.6738965799958853209010759735304265572685507522708510417554242416352524842823767997348597687205110872
+13.97996234893798828125,27.9599246978759765625,7654483.186801090100537714035584375193497829795309590853892322241194318416741649436494892589707636116,0.001295031463144812467127192586077620504138884124885789866256689374017177058012435430963859346037459526,5902999740.003414698611754661289064169459492087381652636295272113543999482400251924430696963350396401,0.9987049685368551875328728074139223794958611158751142101337433106259828229419875645690361406539625405
+13.97996234893798828125,1397.9962158203125,0.4904055013445335192081644569377050869408725751456187962087537739151806712693260228909162408012585564e-566,0.8296974968023795406403636046332098503901341147128570365381899499874129277768061303222081786262785186e-576,5910654223.190215788712292375324648544652989917176962227149164435785193800816993573867191855940104038,1.0
+14.6176910400390625,0.1461769044399261474609375,31519660692.46732869024507548930255355037911967853982013619073232752287228676685262808266616357023475,0.9999999999999999999999988262022081047083637867115105431672767937099294804939606827117361373440617719,0.3699770812210696935052738468272719392639976126676660909447300836125736319652385357274634161244738223e-13,0.1173797791895291636213288489456832723206290070519506039317288263862655938228112823005203089694088953e-23
+14.6176910400390625,7.30884552001953125,31167676066.53819320268775033554383183668915678842267327077390827766233702619851138225770041728674243,0.9888328548532486607187315154742385428946975992906366683009569310574627106952660842066882798361149288,351984625.9291354875573621514668438206593134175018295926107504496218020271774357188333270036466888455,0.01116714514675133928126848452576145710530240070936333169904306894253728930473391579331172016388507115
+14.6176910400390625,13.15592193603515625,19570099125.17619591839157549727399135699664622021454089386800376892678575276928964259150260565678158,0.6208854630802901388078823599882107695046878069749612390348018710748344169356894334952666853220906794,11949561567.2911327718535369897366843003518239857099619695166549583573533006066574584995248152766497,0.3791145369197098611921176400117892304953121930250387609651981289251655830643105665047333146779093206
+14.6176910400390625,14.6176910400390625,14663174041.62329589286157476555665532316684047736790110136618108283672007259962930914321076294643401,0.4652072300108087472989370315496163171674553210918711166218977367743499765120963404563966124119965452,16856486650.84403279738353772145402033418162972855660176201847764444741898077631779194781665798699727,0.5347927699891912527010629684503836828325446789081288833781022632256500234879036595436033875880034548
+14.6176910400390625,16.07946014404296875,10208254949.95474011323030351891374929422125927587483711019999378034427865583445953237712100199414539,0.3238694429345282315849777562083497540056373466077788064582305202611175575489044591459168374933849395,21311405742.51258857701480896809692636312721093004966575318466494693986039754148756871390641893928588,0.6761305570654717684150222437916502459943626533922211935417694797388824424510955408540831625066150605
+14.6176910400390625,29.235382080078125,32971860.19730178971973540202322703289367756075704569326375433484278668485265826215878064441900777299,0.001046072815281971369803623292538810967586955544013035650202721488810712223514607317283434291440339657,31486688832.2700269005253770849874486244547926451674571701209043924413523685232888389322467765144235,0.9989539271847180286301963767074611890324130444559869643497972785111892877764853926827165657085596603
+14.6176910400390625,1461.76904296875,0.1837274079575618742766879005299834658627116636844600755320690895283356083117515247134201226837863009e-591,0.582897797505382567251331463700908656294340864527281077988266795290426761472904565814301996724821859e-602,31519660692.46732869024511248701067565734847020592450286338465872728413905337594710109102742093343128,1.0
+15.336841583251953125,0.153368413448333740234375,215436787840.6498033688917411866254554010770010131069213759384360723674889461686630652718805258804018,0.9999999999999999999999999148485315207308540004075712638988833762504006371042308450906072774722223372,0.1834475884908808615605608835896651292613264330272229633202545339026271260427924082770171227467220434e-13,0.8515146847926914599959242873610111662374959936289576915490939272252777766282781701203107405425700438e-25
+15.336841583251953125,7.6684207916259765625,213384824992.9052364637114384909819338645548208970293503896610050350679660061831289096487146448490807,0.9904753367875948658270835237141575556584719960813703255231980192119260412752367578246294012965590539,2051962847.744566905180321040402370624608336172165929952790357169942825662281866181076556143743925379,0.009524663212405134172916476285842444341528003918629674476801980788073958724763242175370598703440946086
+15.336841583251953125,13.803157806396484375,134720211860.4548611287388876929883995204139312197219408661949178622718381989099790865809877468741051,0.6253352234350158986935261816939058679169668330549521716353734259576857532926282315296200027359765981,80716575980.19494224015287183839590496874922584947333947625644434273895346955501600414428304171890089,0.3746647765649841013064738183060941320830331669450478283646265740423142467073717684703799972640234019
+15.336841583251953125,15.336841583251953125,100400688935.4222160975494486837492402074062990767741539099850036046124232390446875671072780594417965,0.4660331689018901135802494246196675916860931081624262487549716442041703786207708749685033937059692576,115036098905.2275872713423108476350642817568579924211264324663586003983684294203075236179927291512095,0.5339668310981098864197505753803324083139068918375737512450283557958296213792291250314966062940307424
+15.336841583251953125,16.870525360107421875,69237106647.76667230123541673252468882864012136830942283792768861865827159001615589439706354373051019,0.3213801474749923490073107293069496826347224116190437754824150484504253858384552328328361273362056147,146199681192.8831310676563427988596156605230357008858575045236735863525200784488391963282072448624958,0.6786198525250076509926892706930503173652775883809562245175849515495746141615447671671638726637943853
+15.336841583251953125,30.67368316650390625,177275987.6165810846503610228623973761521339712590722174965710791805742989978957836823604406599922882,0.0008228677627133264929670679883746045178882045392737923039990478413887702709616184713423333253791173162,215259511853.0332222842413985085219071130110230979362081249547911258302173694670993070429103479330137,0.9991771322372866735070329320116253954821117954607262076960009521586112297290383815286576666746208827
+15.336841583251953125,1533.6842041015625,0.404464971677354272300312220400653389892978951222954756005578734194759082033914650851922271652032288e-620,0.1877418317137745528841881453283099269043893205561465806855915096531083786826342825765137005225113593e-631,215436787840.649803368891759531384304489163157069195280342451362205010791668464995090725270788593006,1.0
+16.18250274658203125,0.1618250310420989990234375,2158821770372.760492818531138994384948323849490402693726980347001345582980390894754178152171031601257,0.9999999999999999999999999961010732691950286045901776596055486399684852587368833826176713268209631473,0.8417087907550067722276208204313839886834638697186402224853742973341766008353683275179408690029515547e-14,0.3898926730804971395409822340394451360031514741263116617382328673179036852725515582430054001252022724e-26
+16.18250274658203125,8.091251373291015625,2141750209371.305202091498934496242286308211662574211398048139906248448123258204898804563229174115229,0.9920921860082467252095808788320879153859780477499772959531205779656919515545937024681454219890877306,17071561001.45529072703221291523056956570555010469053324604698193177355431909208022733191519925203623,0.007907813991753274790419121167912084614021952250022704046879422034308048445406297531854578010912269402
+16.18250274658203125,14.5642528533935546875,1360858112519.11770959272117011110830051237670082704028845884983028217042655756237417415371631155484,0.6303707564910003644000428910349335363366072855445841823546700278535404517411162913828376104377948771,797963657853.6427832258099773003645553615405118518616428353370578980512510197346048577414280618124251,0.3696292435089996355999571089650664636633927144554158176453299721464595482588837086171623895622051229
+16.18250274658203125,16.18250274658203125,1008025207970.736016611948955570053217411708930912428823729132515630634645797146716506518297999359619,0.4669330381065602405955418804269019949740065661653284725645578514064708368349014252152857519514215627,1150796562402.024476206582191841419638462208281766473107565054372549587031780150262525376846374007646,0.5330669618934397594044581195730980050259934338346715274354421485935291631650985747847142480485784373
+16.18250274658203125,17.8007526397705078125,687572394496.3031782527459531220190303451118625676319160738265510184883521202155279934965281443755715,0.3184942842120686470147880341335042298919296648800830120898213997841380658494716464595008296937157405,1471249375876.457314565785194289453825528805350111270015220360337161733325457081451038398616228991694,0.6815057157879313529852119658664957701080703351199169879101786002158619341505283535404991703062842595
+16.18250274658203125,32.3650054931640625,1340862835.725343546823295587257195519136834019322215899876049580106186155682030269341039343331260904,0.000621108631628176876872856832760800140394059673621695572899081410018010235255016938583221304233983816,2157480907537.035149271707851824215660354780378659579715394310838600115491421614948762554105030036004,0.9993788913683718231231271431672391998596059403263783044271009185899819897647449830614167786957660162
+16.18250274658203125,1618.250244140625,0.8477830782213465246834241939733263939261338923487334014954714154489361608016838198284525527372969536e-654,0.3927063780142262979318856942808714825925943568720830323175673050066581928234662944018129377557184899e-666,2158821770372.760492818531147411472855873917212678901931294186888180221677577296979031895144373367265,1.0
+17.5330753326416015625,0.17533075809478759765625,94051279987102.18240100970431758631441533829310428405713805017162899803812623206166505735813511025627,0.9999999999999999999999999999716034587743025834800824170171602368605198026245240473954300019197475383,0.2670731049483357507220140573333117984431086609013328724469456734788177791595601485431326302655048162e-14,0.2839654122569741651991758298283976313948019737547595260456999808025246171320964993773699874743842056e-28
+17.5330753326416015625,8.76653766632080078125,93497547863659.07722039785226223028714331545562702021759056200180857223823978275130959130428261619045,0.9941124445779042901218357810374043201815580779053361690362653129258981513148183766689522504912880174,553732123443.1051806118520580267583215061949844839801208212878048568864954626390799355105872822436161,0.005887555422095709878164218962595679818441922094663830963734687074101848685181623331047749508711982648
+17.5330753326416015625,15.7797679901123046875,60006363191958.3292818654714899614130430648346482739289287159800255661862984512939543376891681604771,0.6380175070470849807968725056236757821464310875191331742100862408557012330808747477813289851549781403,34044916795143.85311914423283029563242175681596323026878266730958786293843679409643518912570173795697,0.3619824929529150192031274943763242178535689124808668257899137591442987669191252522186710148450218597
+17.5330753326416015625,17.5330753326416015625,44037888978906.34684387846920881212924616053256036287639647433879321031866848102807760372923542128727,0.4682327447850313932993828335410870586032071435047259332378295727500660901707161112470028546600613071,50013391008195.83555713123511144491621866111805114132131490895082021880606676436231192308563447714679,0.5317672552149686067006171664589129413967928564952740667621704272499339098292838887529971453399386929
+17.5330753326416015625,19.2863826751708984375,29530141813960.42656850685810703152052830500714463230437061872585081744272408591424715281482663234952,0.3139791592204813426677123217826187660692401178453588792006692049305906342075970449768646948919463738,64521138173141.75583250284621322552493651664346687189334076456376261168201115947614237400004326608454,0.6860208407795186573322876782173812339307598821546411207993307950694093657924029550231353051080536262
+17.5330753326416015625,35.066150665283203125,37346685887.93827009294925888421582759248665981153275145062666956660207048145812234463982422912873696,0.0003970885446009862461399919517100665674364097972275273057162087441642416739350927905627756072859887306,94013933301214.24413091675506137282963722916395169266495993266294386252266476393226718217504566930533,0.9996029114553990137538600080482899334325635902027724726942837912558357583260649072094372243927140113
+17.5330753326416015625,1753.3074951171875,0.1525078674926712724325046135741316924285483407797196656709319277016079224940323060664025421446207901e-707,0.1621539520925027212845478789663506069130441581883635322256007695028305593694715194917682290402460012e-721,94051279987102.18240100970432025704546482165061150419771138328961342912473524539038952681486989843406,1.0
+17.79958343505859375,0.1779958307743072509765625,200646434548288.1803732973648961756822217969899666454361919174953042770888400047118860268601562133222,0.9999999999999999999999999999892454348802443717831552661537772430284126739903635373642751586509937069,0.2157865146396350693356620837526451991071983648079243830231212124951443152724517908855699547463650661e-14,0.1075456511975562821684473384622275697158732600963646263572484134900629308198853962196314394464478562e-28
+17.79958343505859375,8.899791717529296875,199531613707392.420295729526162639748722194516455867844793882680954915912649536831507942385837030595,0.9944438542184637529261020525075591701925199375937988328943008080172006538667582596992366567184852758,1114820840895.760077567838735693798645998824204134212235561266340433159838547124208315686444134170286,0.00555614578153624707389794749244082980748006240620116710569919198279934613324174030076334328151472422
+17.79958343505859375,16.0196247100830078125,128308172215146.9082888540822000688521035773074374380083354439536973477570117441495750735201969422105,0.6394739707386520932461292690760976255973410271066454985062704736291831592470151764994413295070242544,72338262333141.27208444328269826469526461603322256404869399999359800131547633980614118455208422255483,0.3605260292613479067538707309239023744026589728933545014937295263708168407529848235005586704929757456
+17.79958343505859375,17.79958343505859375,93997151021443.71328197824764512308243094877481642668850193518342693734196547989100964529017163657909,0.4684715740554167356222208384955043010759465579672255407962438903792897989589173368784890741660060397,106649283526844.4670913191172532104649372445658435753685275087638684117305226040647066127821095281862,0.5315284259445832643777791615044956989240534420327744592037561096207102010410826631215109258339939603
+17.79958343505859375,19.5795421600341796875,62822753804144.17601615406480343788265946264743062279962351628667799379086001085251637107778842382228,0.3131017700143834914270597043128924556480747470294779182930053239846043011264116005124142060364253504,137823680744144.004357143300094895664708730693229379257405927660617355281628073103199886994492740943,0.6868982299856165085729402956871075443519252529705220817069946760153956988735883994875857939635746496
+17.79958343505859375,35.5991668701171875,72961078040.61425158004818541310957182039210099959885814982678790179322047742655887173823939436135636,0.0003636300749867310347343015995928063130823651645686545844986292907129182227159103343325792832558191183,200573473470247.566121717316712920437796372948559002458171294120507447279267606529157386334041770404,0.9996363699250132689652656984004071936869176348354313454155013707092870817772840896656674207167441809
+17.79958343505859375,1779.9583740234375,0.3833077727689090440442197603122110810470910413352603510498977710837199705333820052849363068763279513e-718,0.1910364236632677523143350442450627110286028423745128398727891350021040842917926379486406410372408591e-732,200646434548288.1803732973648983335473681933406600020570294439472953490724880839557162580722811647653,1.0
+19.0938243865966796875,0.19093824923038482666015625,8420554991157188.622117441589298392239929979579651790644845706657614936299648483183291532515113833871,0.9999999999999999999999999999999035097147668922316044591924481748386859242891570852861242692222360591,0.8125017529178263925874543405159918263431563290973423565824164184553393998473459664322214972276802618e-15,0.9649028523310776839554080755182516131407571084291471387573077776394088495776256660776941454172484893e-31
+19.0938243865966796875,9.54691219329833984375,8385201272724382.68546065520869263213751421631459844371769498644098772157435311761895932726283502618,0.9958014978264576979252494756949449800479635061284621136295897294488942078199256252363065371529112978,35353718432805.93665678638060657260416868109144593438149123620845355788162446290668878766869726303042,0.004198502173542302074750524305055019952036493871537886370410270551105792180074374763693462847088702226
+19.0938243865966796875,17.1844425201416015625,5442403854975547.720138801765720501736563708768580729209495067288277403216769713131776749613276713112,0.6463236521453592863088470647933202536217943254964650256271813657109922628322831807423097872821133995,2978151136181640.901978639823578703005119188637463648889691155361163876239207867393871365318255576098,0.3536763478546407136911529352066797463782056745035349743728186342890077371677168192576902127178866005
+19.0938243865966796875,19.0938243865966796875,3953950392845518.673914055855861565915481212881042711148188138494710502216249245571393873043320444407,0.4695593576667741620927637372758890247156458143610874105297122246958103199068566455714092515132956316,4466604598311669.948203385733437638826201684525001666950998084154730777239728334954254241888211844804,0.5304406423332258379072362627241109752843541856389125894702877753041896800931433544285907484867043684
+19.0938243865966796875,21.0032062530517578125,2601146605661370.641672635311073248847566616975198349337624254336189260418619173464950543110725118264,0.3089044140668820652630859920083949304594747006273677663242119384848088219995792270946218097439270492,5819408385495817.980444806278225955894116280430846028761561968313252019037358407060697571820807170947,0.6910955859331179347369140079916050695405252993726322336757880615151911780004207729053781902560729508
+19.0938243865966796875,38.187648773193359375,1999053759679.564972373240387984591540801142416633090734820183985585999106626058006740475524514130264,0.0002374016631657726955698024479273050293551709771839963340497860640248008475706025592191812399818887277,8418555937397509.05714506834891122015014209626362774500845140246545569345687095446764137445600777508,0.9997625983368342273044301975520726949706448290228160036659502139359751991524293974407808187600181113
+19.0938243865966796875,1909.3824462890625,0.1360733516606079588038269985399818714801767774194133654815920263827438527585305061735104663204259128e-769,0.1615966546189708783008559120800700270335519388348121960241325600976405816373252643533128864683136716e-785,8420554991157188.622117441589299204741682897406044378099186222649441279455977580525648114931532289211,1.0
+19.2440052032470703125,0.19244004786014556884765625,13069110641816150.3089434811630667756967353692600753672076252015144340755982652498049001752167375191,0.9999999999999999999999999999999441520588384130978199003752936786676413101430836332446149341137773325,0.7298829221584175981610526121546044339042398556150649586818554471146774289377984346124737601805167021e-15,0.5584794116158690218009962470632133235868985691636675538506588622266753747314459400875018285411934269e-31
+19.2440052032470703125,9.62200260162353515625,13015988822643621.78579271188567536709723836383436344908166519117107297777955023022180950431470347737,0.9959353149094507593771652152507084116713191756674345391294137025403474019425159238700342659705648733,53121819172528.52315076927739213848241916384331007917857216494779500205857063464804935275748115640221,0.00406468509054924062283478474929158832868082433256546087058629745965259805748407612996573402943512673
+19.2440052032470703125,17.3196048736572265625,8456967416687222.510426831494319897463223822973254467022837672035207206070091511438453352245531882014,0.6470958620266144721146187618525383336428262946094855322381705095559628781131224878034600750806836747,4612143225128927.798516649668747608116433704704419061237399684083660773768029353431405504826652751762,0.3529041379733855278853812381474616663571737053905144677618294904440371218868775121965399249193163253
+19.2440052032470703125,19.2440052032470703125,6138279273650026.415028984756172784378581695921527331247681119707043186315129168707920013272823387391,0.4696784228002388234702590328550799422410372364188997363359818163396204888210813105347086476526344755,6930831368166123.893914496406894721201075831756146197012556236411824793522991696161938843799361246386,0.5303215771997611765297409671449200577589627635811002636640181836603795111789186894652913523473655245
+19.2440052032470703125,21.1684055328369140625,4030828044735867.37884957879726243520334205996203475132177936182672833902623422104762056486379730542,0.3084240508178698029348923333144799163671134468781880964846137144684650208070169431371142202784441316,9038282597080282.930093902365805070376315467715638776938457994292139640811886643822238292208387328356,0.6915759491821301970651076666855200836328865531218119035153862855315349791929830568628857797215558684
+19.2440052032470703125,38.488010406494140625,2953180921674.746802955943278264540059550458310508566621762262633670725792099426951970839069856789339,0.0002259664794806846712437218310717178154627222780711796677094948858206874466548651950840976303445936347,13066157460894475.56214052521978924103959797721936301969361559385623430911232876544290688623311477699,0.9997740335205193153287562781689282821845372777219288203322905051141793125533451348049159023696554064
+19.2440052032470703125,1924.4005126953125,0.1466609950283553788446384788489708049238072785060906049463106594174037106216256843002105464382538672e-775,0.1122195679934764241436958705141835112427296627087805355770888659886154622261761769611565474651347825e-791,13069110641816150.30894348116306750557965752767767352826023735611886797983812086486985885707218463378,1.0
+21.415802001953125,0.21415801346302032470703125,8578100717704568958.950750579193544917015876855009838268353140359095818665346877826082916544400362727,0.9999999999999999999999999999999999793854805915313516418244276012262407972237650053285737086176164576,0.1768334237329196788321815486225929115876308756269492387003445914405926488960985050397152851710879457e-15,0.2061451940846864835817557239877375920277623499467142629138238354236700066865252477198346432974660145e-34
+21.415802001953125,10.7079010009765625,8556219969859071202.942823532050255083404391359585458284576918395999601844674596387414742473343624908,0.9974492316463086634327235747476015372975205174402555282668015656239023129142979298229118421800396269,21880747845497756.00792704714329001044490922834405881595777058568912840830315706561741277140132925895,0.00255076835369133656727642525239846270247948255974447173319843437609768708570207017708815781996037308
+21.415802001953125,19.415802001953125,5538865683370335292.295376928284531802603651071079443655352875677176341168953414060741170607210641392,0.6456983737598841556361249125807783897458640120095432967022330551108070386392127589927515056886264504,3039235034334233666.655373650909013291245649516850073445181813304512389084024339392290984637534312775,0.3543016262401158443638750874192216102541359879904567032977669448891929613607872410072484943113735496
+21.415802001953125,21.415802001953125,4042495476106347398.294017957424417412754963065287157014015596761378936187605883027986358316018979076,0.4712576372253282201042473456698877375385491227661972555332527962603208542876169820813140428437371982,4535605241598221560.656732621769127681094337522642360086519092220309794065371870425045796928725975092,0.5287423627746717798957526543301122624614508772338027444667472037396791457123830179186859571562628018
+21.415802001953125,23.415802001953125,2673968890830578422.058367201050951723352515671960335239029170215767145963242887903494491846749684106,0.311720388793256216117540305541549884099043555829254586252886254957529582541265342749542669955078227,5904131826873990536.892383378142593370496784915969181861505518765921584289734865549537663397995270061,0.688279611206743783882459694458450115900956444170745413747113745042470417458734657250457330044921773
+21.415802001953125,42.83160400390625,951451812956222.6472243729039496310027883903245646555775681429973370726675922206629398402219944193385,0.0001109163723145026829663592413499705715148479728656815606384723869380652672857771408680624626611632234,8577149265891612736.303526206289595462846512197604952444957120838691393180310161232369215404522959748,0.9998890836276854973170336407586500294284851520271343184393615276130619347327142228591319375373388368
+21.415802001953125,2141.580078125,0.8459796636187519800418145873795062251467281610474861875349573565744753185353255818108959162374209711e-862,0.9862085926232040811098033295689058289712120988868448187364677975736340132742113289638000844236226325e-881,8578100717704568958.950750579193545093849300587929517100534688981688730252977753453032155244744954167,1.0
+21.5864715576171875,0.215864717960357666015625,14423296405753588374.31622060821671685071129398016123777268665736650024318310125439716647851132748548,0.9999999999999999999999999999999999889208787698677032130816214395302005948074986110680724121518084306,0.1597974494174754308778206243140915550845390395821100976846141713492205016872754808257971880891925677e-15,0.1107912123013229678691837856046979940519250138893192758784819156939127090654746689755410156227589298e-34
+21.5864715576171875,10.79323577880859375,14387822199074430186.87755724699870662757552572659477474303694643515589932286116664676615520412427879,0.9975404924310501451468881464595852302854521319942516024246469084468227494829716736002163294809025083,35474206679158187.43866336121801038293321767104189390747033524543589894477912733251042099181737803857,0.002459507568949854853111853540414769714547868005748397575353091553177250517028326399783670519097491657
+21.5864715576171875,19.5864715576171875,9304544345262910887.717303030280171678486278436868264725213433930560031430843201747960622719952920889,0.6451052577378386799696222899748343841016458891199933849234545602262598928371001079962881938018215962,5118752060490677486.598917577936545332022464960768403925293847750031766836797092231315953475988735941,0.3548947422621613200303777100251656158983541108800066150765454397737401071628998920037118061981784038
+21.5864715576171875,21.5864715576171875,6798731326972677099.902162856104311991684091028600360440988413299366457091493040475287577287958719379,0.4713715322567037679352113072240563206011946337854579156489628256083353908928398870472795342258263785,7624565078780911274.414057752112405018824652369036308209518868381225341176147253503988998907982937451,0.5286284677432962320647886927759436793988053662145420843510371743916646091071601129527204657741736215
+21.5864715576171875,23.5864715576171875,4505454584308582032.507647659020312015392697546368261694685418172426081404589312887182692775805326342,0.312373430980126976491665160933586417387678955045636924697508666679270127258021889605691137597158818,9917841821445006341.808572949196404995116045851268406955821863508165716863050981092093883420136330488,0.687626569019873023508334839066413582612321044954363075302491333320729872741978110394308862402841182
+21.5864715576171875,43.172943115234375,1513029361880580.902228477847806409180932847665297124409112963705204028868513011157388497245176298484,0.000104901772751270595956247924767189218209312480123275352067837133211371218089014732065313036242688236,14421783376391707793.41399213036891060132781054997137152609816871688659423877178096811918769869648053,0.9998950982272487294040437520752328107817906875198767246479321628667886287819109852679346869637573118
+21.5864715576171875,2158.647216796875,0.1427648233502627959496585660087676101080514976426381347155595034526767776129415400541405530355360755e-868,0.9898210459941221711342321295923195685805006437127147382161768965795277929692200357084730639836213432e-888,14423296405753588374.31622060821671701050874339763666865050728168059179826764029397927657619594165683,1.0
+22.4928874969482421875,0.22492887079715728759765625,233098849551075865909.5219273596764853282414017704925733939182004213277285076356681267884387926839414,0.9999999999999999999999999999999999995902382644161135711592314958480001374454490998034931763961912647,0.9551498915465607276298231993497285552429842391698728775935233439205820751146358484384285537826251796e-16,0.4097617355838864288407685041519998625545509001965068236038087352614722903784953342151684399843292495e-36
+22.4928874969482421875,11.24644374847412109375,232626210271430785587.4831851160044087660372447629218825917484720295593639402181079757338286574882907,0.9979723654554480453069430870728453265704300432368733160470276236620279964087875385997742803412115584,472639279645080322.0387422436720766577191461622267635651520483267412200917159840680418978945479851381,0.002027634544551954693056912927154673429569956763126683952972376337972003591212461400225719658788441576
+22.4928874969482421875,20.4928874969482421875,149666294797804717369.1414901435349358094585038767669253728218646917466291084618683339121532017932808,0.6420722156546307749070890329436715732822454058549210058761503888535899429008821794639361541712107524,83432554753271148540.38043721614154961429788704838172078407865566455395492347222370986357335024299501,0.3579277843453692250929109670563284267177545941450789941238496111464100570991178205360638458287892476
+22.4928874969482421875,22.4928874969482421875,110012057613202911310.980067577295036208179363747203392415042632514826487976318413219324136953446032,0.4719545284117647483387905549151521064170726804878337974316965704138170068447133550864995545921450276,123086791937872954598.5418597823814492155770271779452537418578878414740960556156788244515895985902438,0.5280454715882352516612094450848478935829273195121662025683034295861829931552866449135004454078549724
+22.4928874969482421875,24.4928874969482421875,73596654410339793320.16698769515655147647656375595404541052511140899587371004211961115443376851015751,0.3157315214214025216312278817071697813211476676867346556571833886482845723375362496896867203409386668,159502195140736072589.3549396645199339472798271691946007463754089473047103218919724326212927835261183,0.6842684785785974783687721182928302186788523323132653443428166113517154276624637503103132796590613332
+22.4928874969482421875,44.985774993896484375,18192580016803568.98339405390590602337741213743633239167202937185878273748883674818583416323941737536,0.7804663151208418854762718726422370443692937526168145959428757124340835008118172234590722760657034012e-4,233080656971059062340.5385333057705794003789787877123137652284909844418012944452552955898923887968585,0.9999219533684879158114523728127357762955630706247383185404057124287565916499188182776540927723934297
+22.4928874969482421875,2249.288818359375,0.1568833336621902570020366846489865687945210704188898330999168557130384593942102761459263399670369862e-904,0.6730334961512304178060720014327721663719727764134073825836090692963692587263351540589523224202972032e-925,233098849551075865909.5219273596764854237563909251486461569005203563005840319340920437757265520362758,1.0
+28.0538349151611328125,0.2805383503437042236328125,13016472338795340864664462105.71336711468853331730440114768018693498605643792353168998716302832137117,0.9999999999999999999999999999999999999999999993177303170307216457230323141415178142973714281217257956,0.888074445596827836185544815545410682822787386903319575404261023659654369707081334324013108790543015e-17,0.6822696829692783542769676858584821857026285718782742044398483647022377252442298463360949755901334172e-45
+28.0538349151611328125,14.02691745758056640625,13008297730060067004160158935.39983984286451578774600570528738318647496191266374283006811093893719343,0.9993719797098243278037005094434595639815735135031567450729018248266312085436512022611759417513473682,8174608735273860504303170.313527271824017538439139898361082110366542680713895688146925958417373495896,0.0006280202901756721962994905565404360184264864968432549270981751733687914563487977388240582486526318029
+28.0538349151611328125,26.0538349151611328125,8159760722143660844277247719.957031160083574272344585354505472266327094210104913243552288721773020997,0.6268795807158636852250188550135852607372300166363965630106924363036497354054055025561399460346211535,4856711616651680020387214385.756335954604959053840560249142993030514410383272725274662748175581545927,0.3731204192841363147749811449864147392627699833636034369893075636963502645945944974438600539653788465
+28.0538349151611328125,28.0538349151611328125,6181373660551204248658414434.227667565267633915312811828998936935726105037277050612081608515616386518,0.4748885488833822603380585394117637546589972534585818236587871263478620162938973458887121399466902973,6835098678244136616006047671.485699549420899410872333774649528361115399556100587906133428381738180406,0.5251114511166177396619414605882362453410027465414181763412128736521379837061026541112878600533097027
+28.0538349151611328125,30.0538349151611328125,4334664970468520260458883537.311127295557982255868255677744748778845854433995304467756925337852455601,0.3330138041740492325933826573103160030786870023398759765529241889225481700183478423834684141807917733,8681807368326820604205578568.402239819130551070316889925903716517995650159382334050458111559502111323,0.6669861958259507674066173426896839969213129976601240234470758110774518299816521576165315858192082267
+28.0538349151611328125,56.107669830322265625,167522406810849340438294.7816712301681616282244463884632695362625248464413051818002839220147056630157,0.1287003133034378969474674225209564271478529891974352215534482385183499320651538935723467004533913475e-4,13016304816388530015324023810.93169588452037169796069921518519576057897974693633333641475297533986126,0.9999871299686696562103052532577479043572852147010802564778446551761481650067934846106427653299546609
+28.0538349151611328125,2805.383544921875,0.8375808751313834428308966132045551916984390355221461935110998403861107897297390570657875592842740142e-1125,0.6434776284469871682454384730763281220946748862619746060422267822913440203668755774461446847109472175e-1153,13016472338795340864664462105.71336711468853332618514560364846529684150459337763851821503689735456692,1.0
+28.2105731964111328125,0.282105743885040283203125,21898880550056087068968035017.59416941780136486571433175547658781294427446592383248702557164470340528,0.9999999999999999999999999999999999999999999996139282857719128389730879280942656608896007590725826153,0.8454538353636269825179481028802528021893470080517673827466031735159184154422098980551745505475876308e-17,0.3860717142280871610269120719057343391103992409274173847090024779040342362394720372905923391922869608e-45
+28.2105731964111328125,14.10528659820556640625,21885570976025369328112028737.69826354190672918994894772302626517805590936530992948558159566149576381,0.9993922258263250057965172845329206209035083082149061051813680717695947200899972589220233076104730815,13309574030717740856006279.8959058758946356842199223860865924600678461294164310233374460637253153021,0.000607774173674994203482715467079379096491691785093894818631928230405279910002741077976692389526918475
+28.2105731964111328125,26.2105731964111328125,13720067509675558873959292369.08099460613013360800699931616588510938354384779470961600620792762935032,0.6265191263231224507734672472442363727301014406921633041260299583158768073078653602459238294899416418,8178813040380528195008742648.51317481167123126616187079294697252874021164693165089291283379759172879,0.3734808736768775492265327527557636272698985593078366958739700416841231926921346397540761705100583582
+28.2105731964111328125,28.2105731964111328125,10401057901876465747305537667.68504177010797475790348486843467753528193252803432883528342198797407188,0.4749584289526537794254474170027959914657938131002753676446858742159062226972312223385711560090583274,11497822648179621321662497349.90912764769339011626538524067818010284182296669203167363561973724700723,0.5250415710473462205745525829972040085342061868997246323553141257840937773027687776614288439909416726
+28.2105731964111328125,30.2105731964111328125,7301809930976113853730149066.320407614550964811616801156820883523247959076512783262131632363041298592,0.3334330224910703288347527898452622100398967524554017163459220316912367929480297811622444274667543315,14597070619079973215237885951.27376180325040006255206895229197411487579641821357724678740936217978052,0.6665669775089296711652472101547377899601032475445982836540779683087632070519702188377555725332456685
+28.2105731964111328125,56.421146392822265625,267946564709036710471756.5284428460347671829927143190882765811708334876926494085672881871937895397723,0.122356283964638754074585246940066876712921646138102380197275979481465503817657951397451201722947896e-4,21898612603491378032257563261.06572657176659769117615579002458105695292200703371110035175353802728957,0.9999877643716035361245925414753059933123287078353861897619802724020518534496182342048602548798277052
+28.2105731964111328125,2821.057373046875,0.5275257237991324125218565753928236252506872123663506084087843539695188643810439168162205617325491417e-1131,0.2408916394576988191856445728086465820896433922843433314497769550718002612864736936932726956056510062e-1159,21898880550056087068968035017.59416941780136487416887010911285763812375549472636050891904172522107911,1.0
+30.0544281005859375,0.3005442917346954345703125,10630687771914156232192522990611.66667924454995714139881457097700388414217517357019771306054631935899,0.999999999999999999999999999999999999999999999999523496846153063620678068212341170375568864490521835,0.5065556250879156501221247004640051982429757838907001969446439966555904012942616055792550404643351327e-17,0.4765031538469363793219317876588296244311355094781650050057589850584780746435754859969723430881978368e-48
+30.0544281005859375,15.02721405029296875,10626289475468348291892398624261.3137097882218921770593544869432359470206711363529328455974578918585,0.9995862641683985809245921297689007183962490308476994378806988966128113170066940590059085674947605952,4398296445807940300124366350.352969456328064969405016334912924438342751041857316849892846266407493841,0.0004137358316014190754078702310992816037509691523005621193011033871886829933059409940914325052394047864
+30.0544281005859375,28.0544281005859375,6617571477131695205924751951310.914360479658252249109655117208748625035003045867945688986949184769617,0.6224970217463304024992288057729766180469000983101496979431198684380443903248256270035513270287112756,4013116294782461026267771039300.752318764891704897354715704647411760328419132342304006503354973496379,0.3775029782536695975007711942270233819530999016898503020568801315619556096751743729964486729712887244
+30.0544281005859375,30.0544281005859375,5057432674955197628248810746272.516427030808472514321350400639156523906034160847086352123303030583263,0.475738991066667257936178346973772274305223872588010478008237248782717814613025991177852317934602844,5573255096958958603943712244339.150252213741484632143020421217003861457388017363163343367001127682733,0.524261008933332742063821653026227725694776127411989521991762751217282185386974008822147682065397156
+30.0544281005859375,32.0544281005859375,3594651411312654984354910178187.669555577983800201676737292477233757779206987900735621890688181694257,0.3381391202937572382390191801518397931134172276602009028391127187902769337080613236003651771896237114,7036036360601501247837612812423.997123666566156944787633529378926627584215190309514073599615976571739,0.6618608797062427617609808198481602068865827723397990971608872812097230662919386763996348228103762886
+30.0544281005859375,60.108856201171875,71830926550022368739160864.1549330881569974852363286113993864374563634871882440705602102583317945106,0.6756940669426558527005153388969285418796228099523822290005761371112542054043543075595207414857536131e-5,10630615940987606209823783829747.5117461563929596612280422104567739479070586910220056249300938999342,0.9999932430593305734414729948466110307145812037719004761777099942386288874579459564569244047925851425
+30.0544281005859375,3005.44287109375,0.6391527195245049025413093179558230079188094384012206330962942146840926431426512530775297468530536636e-1204,0.6012336485068448106739821397729627476807906457390751616958028995501634222109472524489597132633102005e-1235,10630687771914156232192522990611.666679244549957146464370821856160385363422178210249695490304158266,1.0
+30.5403537750244140625,0.305403530597686767578125,55323542538198664629008006807946.54428687634080173736167777365188318815509486676117772514834417734427,0.9999999999999999999999999999999999999999999999999184025276459341154818149297049679325027824257759316,0.4514261232789653490969618961903151339482817752508086614682397407864259088092804522998499404057721921e-17,0.8159747235406588451818507029503206749721757422406836575553885196967947470609632268971724278240177342e-49
+30.5403537750244140625,15.27017688751220703125,55302853839860222166198586806368.81539415744782500419116309768217581150131107179696411265204297147692,0.9996260416923923887406182377865544022389061754871340424846900555538489894507643607309397549538019988,20688698338442462809420001577.7288927188929767376847759087593608676234027568673649519791189583754309,0.000373958307607611259381762213445597761093824512865957515309944446151010549235639269060245046198001236
+30.5403537750244140625,28.5403537750244140625,34383546252121214206917852301252.88984011454685951895533652396117056057206788134549036719509931218776,0.621499359488426985793184603790969450020073269076592138184145110900525820658429590195441116932913502,20939996286077450422090154506693.6544467617939422229206024824803661185526459473188386974360626176646,0.378500640511573014206815396209030549979926730923407861815854889099474179341570409804558883067086498
+30.5403537750244140625,30.5403537750244140625,26330290328526345844084130397228.3541540333735952440845277108287629507477594758367547501390226656153,0.4759328329408108161664521667310343436109256340616918372887474914855057834498301516156908166176271368,28993252209672318784923876410718.19013284296720649779141129561277372837695435282757431449213926423706,0.5240671670591891838335478332689656563890743659383081627112525085144942165501698483843091833823728632
+30.5403537750244140625,32.54035186767578125,18772082740947083819880984263251.1107093867959726414180315160973691819128620122791948095998992334882,0.3393145463883792556965654371397306895857639412163940813527488691639789166612794328550718897854791964,36551459797251580809127022544695.43357748954482910045790749034416749721185181638513425503126269636416,0.6606854536116207443034345628602693104142360587836059186472511308360210833387205671449281102145208036
+30.5403537750244140625,61.080707550048828125,319750323893161501547364871.9471324441271532775826666381053065114146222455009560919394791163942737225,0.5779642973375879860404401701327458421116422508373668948833372781514111241715798106032773118594522845e-5,55323222787874771467506459443074.59715443221364846429327236833623016771009158316337297269168281345808,0.9999942203570266241201395955982986725415788835774916263310511666272184858887582842018939672268814055
+30.5403537750244140625,3054.035400390625,0.3961965192787088984378813914974873969117566017019571029955121349210008593552086028374670167947824519e-1223,0.7161445220272206072300793452176234815783276759662760025607804603387748936425726088632166714558739941e-1255,55323542538198664629008006807946.54428687634080174187593900644153667912471382866432906463116192985235,1.0
+31.16262054443359375,0.3116261959075927734375,462624699113536846626017964322050.649795271710471005992846910940200142218543513602870177746629176643,0.9999999999999999999999999999999999999999999999999914820705735093686211754549779174556362394141508231,0.3940604538000569814815372089763812896188968295852802534369064254725795864375460623004512660433445425e-17,0.851792942649063137882454502208254436376058584917693031771280152106125612010327710841990555290851904e-50
+31.16262054443359375,15.581310272216796875,462472679022930944149999456680562.1306105485603427156764842032800000136313582701687717914585428655053,0.9996713965101794232737366783645916467900204715247164813334845460874316518996447350687063567484021154,152020090605902476018507641488.5191847231501282942569672456607699434025573331979112824770546069904561,0.0003286034898205767262633216354083532099795284752835186665154539125683481003552649312936432515978846218
+31.16262054443359375,29.16262054443359375,286946049873905810015180277182786.1464574167194882882489814121725489111366603067646804307929701108701,0.6202566582020814780235590166968321221400109807688055430887100332528169469320428807570689614241158865,175678649239631036610837687139264.5033378549909827216844700367682210458972552966020026431426273616256,0.3797433417979185219764409833031678778599890192311944569112899667471830530679571192429310385758841135
+31.16262054443359375,31.16262054443359375,220290042968042406374974814947222.8095473829577341359711594853072205747672082037667306935872993126172,0.476174409602758942761661147551475181775264029268271962657270752444394359227020415739092631410077918,242334656145494440251043149374827.8402478887527368739622919636335493822667073995999523803482981598786,0.523825590397241057238338852448524818224735970731728037342729247555605640772979584260907368589922082
+31.16262054443359375,33.16262054443359375,157654541578516148308646650651632.2951976448619167431172265215886965104983850165282499539154206582642,0.3407828027353652890497680640062128634244574604446298344895961975907000988843356219592519766777621756,304970157535020698317371313670418.3545976268485542668162249273520734465355305868384331200201768142316,0.6592171972646347109502319359937871365755425395553701655104038024092999011156643780407480233222378244
+31.16262054443359375,62.3252410888671875,2189310528184656785283050037.843196407451515748345696540993716032241786317858830857836694202382519624,0.4732368445480163597816816189318208582557462605760362740641908553054689158798284682823277539388591067e-5,462622509803008661969232681272012.8065988642589552615877549079470539247921292855078522160989032701133,0.9999952676315545198364021831838106817914174425373942396372593580914469453108412017153171767224606114
+31.16262054443359375,3116.261962890625,0.1013919443759329192692218628975848528482816536544267588192958557394280842230221240818421160246154661e-1247,0.2191667340075360295553155695217247481431906133894579613057691001221515578083520290277880482861073039e-1280,462624699113536846626017964322050.6497952717104710099334514489407699570339156033666830739355974724958,1.0
+31.996768951416015625,0.319967687129974365234375,8131687260818805862245797820874541.721649761415405030755407418994569883627242661436334086413390859908,0.9999999999999999999999999999999999999999999999999995879227931512656110115521739097127909502731361732,0.3350882973405649410726863419053300130357013862326157163284966274439845101072486414613665552382985803e-17,0.4120772068487343889884478260902872090497268638267653147339322162452153031976748137223232810773565659e-51
+31.996768951416015625,15.9983844757080078125,8129439785636440597403650712505420.639050901677298327344910029550456944532458250343252392481521176987,0.999723615147720405653566091809971319116875855673455609646448352264151517410556716897680064815473706,2247475182365264842147108369121.082598859738106706761380362849762349821647830146381824288883545246905,0.0002763848522795943464339081900286808831241443265443903535516477358484825894432831023199351845262940115
+31.996768951416015625,29.996768951416015625,5030660939716144494990365515138840.049120816436136707464189074209960005346290094688681426207171577273,0.618649091924077635008542039031859800931879068100503637381030751433958543327863337093338028285629916,3101026321102661367255432305735701.672528944979268326642101318190259289007815985800952790563233144962,0.381350908075922364991457960968140199068120931899496362618969248566041456672136662906661971714370084
+31.996768951416015625,31.996768951416015625,3874644227718806677497967114342847.816130085832855443765330676782997537227469326660232000590880198953,0.4764871180410664529124225629254370242257817306879099084512541146226349247396397481631249409954350422,4257043033099999184747830706531693.905519675582549590340959715617221757126636753829402216179524523281,0.5235128819589335470875774370745629757742182693120900915487458853773650752603602518368750590045649578
+31.996768951416015625,33.996768951416015625,2786643940817371536441585713377836.793511032003262701271843316192119518636999426324391506815632093708,0.3426895122054626772399508130487163734138308659612294674415426488148719531583766081766494000982831144,5345043320001434325804212107496704.928138729412142332834447076208099775717106654165242709954772628526,0.6573104877945373227600491869512836265861691340387705325584573511851280468416233918233505999017168856
+31.996768951416015625,63.99353790283203125,29442987317192965566728245708.84014112014619973032980766155911971510528018931425416707227032574873801,0.362077221772400726205487523182727472465292314585680163890154637266853685108861864353603192662640749e-5,8131657817831488669280231092628832.881508641269205303776482730841099579248825891175380049698134396485,0.9999963792277822759927379451247681727252753470768541431983610984536273314631489113813564639680733736
+31.996768951416015625,3199.677001953125,0.1119762009638676714302046624197882089173119539217445349737201580054624865895556463979852751733105453e-1280,0.1377035261838050889097804901648914306214864152567979357671443381818466611457123269059549866491213953e-1314,8131687260818805862245797820874541.721649761415405034106290392400219294354106080489634216770404722234,1.0
+32.05139923095703125,0.3205139935016632080078125,9818675716055357228155203818677279.285256945198103332492245808102812674592080605634867478315732705061,0.9999999999999999999999999999999999999999999999999996620610304345820966860690344443966206097465324844,0.331811315398073920530089721434668430411075002373773608414156223246795294768347163626334762856514246e-17,0.3379389695654179033139309655556033793902534675155903088494387993844377990933661909125439046096719795e-51
+32.05139923095703125,16.025699615478515625,9815992539490497621590662655533830.032212296575553051737720920350835346450307211576541210063009732466,0.9997267272448491078221606403386774910108349082393710917755543222432822802621476490253077975955922758,2683176564859606564541163143449.253044648622550284072638041732716533442670608405010572363472996332674,0.0002732727551508921778393596613225089891650917606289082244456777567177197378523509746922024044077242358
+32.05139923095703125,30.05139923095703125,6073303024560840658530975896530421.265480151513796851744905238861090622061746884035134402922359753882,0.6185460443132736276256735065385282025387056993061891718744085602196197532130049805368108310212120092,3745372691494516569624227922146858.019776793684306484065453723222461257831230935946417379504122974917,0.3814539556867263723743264934614717974612943006938108281255914397803802467869950194631891689787879908
+32.05139923095703125,32.05139923095703125,4678669387719540278612423224451050.768137047368336968785924830610348881987815957111753963967391353122,0.4765071709282594421141341686730183212502035595546146038374903558461429885630667825728516648077503354,5140006328335816949542780594226228.517119897829766367024434131473202997905161862869797818459091375677,0.5234928290717405578858658313269816787497964404453853961625096441538570114369332174271483351922496646
+32.05139923095703125,34.05139923095703125,3365959972731823332609113054894362.082494817925516232963516514081742638109004541116316374271321718434,0.3428120115249202115387170085641820173445661430816344363477117870587273142568357225870758321730054538,6452715743323533895546090763782917.202762127272587102846842448001809241783973278865235408155161010365,0.6571879884750797884612829914358179826554338569183655636522882129412726857431642774129241678269945462
+32.05139923095703125,64.1027984619140625,34933576489643598627658350324.95005438750111341914848309327867955325552160022783305451344768029843887,0.355787048069229102745855493000967403320047426057697126500260818047854209781158956042733366277932277e-5,9818640782478867584556576160326954.335202557696989916661875868804872326637456219753718727913035048501,0.9999964421295193077089725414450699903259667995257394230287349973918195214579021884104395726663372207
+32.05139923095703125,3205.139892578125,0.7782373393559598965981747130732658364753868663457687446985337237977346471146436976890013042085303316e-1283,0.7926092701925142502357565925376385947899297820341263599295539228188224717616815405859583881721623736e-1317,9818675716055357228155203818677279.285256945198103335810358962083551879892977819981551782426482728799,1.0
+36.44875335693359375,0.36448752880096435546875,51420445329652109014719459254376563172188.32366319245704729763363307630270870350604200323760830740377,0.9999999999999999999999999999999999999999999999999999999999604621528329854642446028882912584308766297,0.2033053708703611454518923311581406170645213325893876433947373848438158114894159371143476560895229522e-17,0.39537847167014535755397111708741569123370272514212617752145993215148237020868341487906296324676533e-58
+36.44875335693359375,18.224376678466796875,51414776814402041673283991251670059227937.03686947501492506443464226574597328875919899795145699746404,0.999889761451622463176503202008568401950448379465384649529918324281208838529578900721599500075107085,5668515250067341435468002706503944251.286793717442122235232044519260346869265766316867557480584945096,0.000110238548377536823496797991431598049551620534615350470081675718791161470421099278400499924892914981
+36.44875335693359375,34.44875335693359375,31419961216887244186891196057259357744056.14989478323963364758080349466277437402325862146629359297562,0.6110402392561274143631005300563093577972117730879944658665792838707094563165162003582587225740326937,20000484112764864827828263197117205428132.17376840921741365208588329034354578400170669335272088507337,0.3889597607438725856368994699436906422027882269120055341334207161292905436834837996417412774259673063
+36.44875335693359375,36.44875335693359375,24577443048176826290807425729125280009989.89806914115785861854608908164525660040289464046415377829471,0.4779702488108168982985547789404222036232251733980413390161813024950437400378683177514884972375117106,26843002281475282723912033525251283162198.42559405129918868112059770336106355762207067435486069975428,0.5220297511891831017014452210595777963767748266019586609838186975049562599621316822485115027624882894
+36.44875335693359375,38.44875335693359375,18090890995770080236169389671579583132029.73847835026012061784890419554242085396940114132168126763483,0.3518229155696905018794243453022403618689316334967674745046502945047768724581195390144413925922183878,33329554333882028778550069582796980040158.58518484219692668181778258946389930405556417349733321041416,0.6481770844303094981205756546977596381310683665032325254953497054952231275418804609855586074077816122
+36.44875335693359375,72.8975067138671875,44794680330610173790325904871286231.4620528231519159945977388426491694323930467505355470404843506488,0.8711453205711323891838789066843775586996671839701640699167707900947970508081024297207206827005633679e-6,51420400534971778404545668928471691885956.86161036930513130506894794235715072563191856428346743756464,0.9999991288546794288676108161210933156224413003328160298359300832292099052029491918975702792793172994
+36.44875335693359375,3644.875244140625,0.2052333634608248219980577195057580211016968449761099685665601238068322199794065980732846098630791333e-1456,0.399127938595418913141037228785291251911102190488312264491205030828651058011038455881523456296831284e-1497,51420445329652109014719459254376563172188.32366319245704729966668678500632015802496531481901447804899,1.0
+38.46506500244140625,0.384650647640228271484375,74476097961717736707311283690297342332640635.36828527513831761263423020098285675319043072376838506452,0.9999999999999999999999999999999999999999999999999999999999999737171591666092260969748612110146801584,0.1957443428619846316633847000085545945278630730464330492832414282635303960636943114598488847353331592e-17,0.2628284083339077390302513878898531984157013156072764487802905004186189368583596223709956211045867208e-61
+38.46506500244140625,19.232532501220703125,74470671615104430708019858002669903107825265.43541100343301703784190837164882341226188891290728507243,0.9999271397567566542717257180570594693345157632435967577481630263036187764612216531692693658186431452,5426346613305999291425687627439224815369.932874271705300576749765257953879657562388810946645937368386,0.7286024324334572827428194294053066548423675640324225183697369638122353877834683073063418135685483289e-4
+38.46506500244140625,36.46506500244140625,45284764068480704266436983806916789500344890.34333950265956591896839074526771939756199637058151093573,0.6080442626271587808203732945953276193884525828877170814104986257359448216684380012490224834049623064,29191333893237032440874299883380552832295745.02494577247875169562328288433498367226228135327242007407,0.3919557373728412191796267054046723806115474171122829185895013742640551783315619987509775165950376936
+38.46506500244140625,38.46506500244140625,35640951011207567576511223496938478818114920.08854367148220352219252461742135974563330277014306819674,0.4785555632832396462325558547156730388446319349095560891771750900522238183809963254426455682172064331,38835146950510169130800060193358863514525715.27974160365611409239914901218134332419097495371086281306,0.5214444367167603537674441452843269611553680650904439108228249099477761816190036745573544317827935669
+38.46506500244140625,40.46506500244140625,26473831399532651160030688980409433397456023.5388010732147518462983916570177583732676013476938272969,0.3554674872083222069089889485735308279452981834706649299929936062561219738535502425333916621181020558,48002266562185085547280594709887908935184611.8294842019235657682932819725849446965566763761601037129,0.6445325127916777930910110514264691720547018165293350700070063937438780261464497574666083378818979442
+38.46506500244140625,76.9301300048828125,34104300946544617920962692297574039275.85730427191012670106412036032404395874777953899771382520592097,0.4579227682427043627144211522493769523300348756892813630883230360181496589572891134745259522852117399e-6,74476063857416790162693362727605044758601359.51098100322819091352755326927865911107649818485621718459,0.9999995420772317572956372855788477506230476699651243107186369116769639818503410427108865254740477148
+38.46506500244140625,3846.506591796875,0.6344698375148891978318953694464850822255164730179298739810260812671355972495791867411120280975535882e-1536,0.8519106866219278699362768240955413679390366943000933299898028077399325357167063246778052166325384945e-1580,74476097961717736707311283690297342332640635.3682852751383176145916736296027030698242777238539310098,1.0
+39.52658843994140625,0.395265877246856689453125,3588963314116707873190446531102509723131836488.566699586405422159688100732294410319129725282925294645,0.9999999999999999999999999999999999999999999999999999999999999994413425037442482559090495542064250511,0.2005001259218185099263846061650302487405890709034819657867246183956963807422721600712381503343952107e-17,0.5586574962557517440909504457935749489254593778564333127652828107846518527700077379392333322331169109e-63
+39.52658843994140625,19.763294219970703125,3588752942961210623579147228611774569788300390.173615040926411068669762348749528382088966070267968551,0.9999413838657336555190727057480746442916662079890450472838459587230914719720212116869946926785590296,210371155497249611299302490735153343536098.3930845454790110930233396427630670363046052743076285820272,0.5861613426634448092729425192535570833379201095495271615404127690852802797878831300530732144097042883e-4
+39.52658843994140625,37.52658843994140625,2176926332123041471652359455849982518759650439.664746147586599923793277400021946569116111917367862322,0.6065613219172211883500503201931108646583852309925343298117418343317772491146614395752639792377229902,1412036981993666401538087075252527204372186048.901953438818822237899824591490648849277459427207734811,0.3934386780827788116499496798068891353416147690074656701882581656682227508853385604247360207622770098
+39.52658843994140625,39.52658843994140625,1718559114930389402365116545582781030067050069.670905329737336887065422344272857700882033772416932418,0.478845550794756426018221647797646042795415707871750662265780850038803276415249164853764818320195487,1870404199186318470825329985519728693064786418.895794256668085274627679647239737717511537572158664715,0.521154449205243573981778352202353957204584292128249337734219149961196723584750835146235181679804513
+39.52658843994140625,41.52658843994140625,1282269703300467478998957438405346680980309491.471855691358950660836887984542870737672895404348891523,0.3572813626310502685276829446211331746156740790347101192649689399707434825724495595398828412020051764,2306693610816240394191489092697163042151526997.09484389504647150085621400696972468072067594022670561,0.6427186373689497314723170553788668253843259209652898807350310600292565174275504404601171587979948236
+39.52658843994140625,79.0531768798828125,1171984262615086272436925774213134455225.080561852545683875484950190010014226695613974410537154834002,0.3265523105252267972305331530905466429660756200777455296446363626766092337625348242932184525276610451e-6,3588962142132445258104174094176735509997381263.486137733859738286208151801502581191697957370165059978,0.9999996734476894747732027694668469094533570339243799222544703553636373233907662374651757067815474723
+39.52658843994140625,3952.658935546875,0.9165655452725188131936353964945234196751456316829463618558966733914701143200131653887872022563731868e-1578,0.2553844843348859690185933024039368127233065990964138730843062737185193776991267902666556619314473834e-1623,3588963314116707873190446531102509723131836488.566699586405422161693101991512595418393571344575597133,1.0
+40.1744842529296875,0.401744842529296875,38755671301264757235165505802180986445852673110.63366908473899680511163068596862378918614753221667189,0.9999999999999999999999999999999999999999999999999999999999999999467396388930498977140988253765012606,0.2064141048447623736751307197431756738511310678385305427209004540018544626350349336944306873171657679e-17,0.5326036110695010228590117462349873943473287993051473068627989413701510220976334195069405084875790471e-64
+40.1744842529296875,20.08724212646484375,38753681739688963742162950174895334141999519136.43348007739953815561603152538016865585883935029703771,0.9999486639888049477442293162512901782233651407941165877100024494719547560529604638924021331177915066,1989561575793493002555627285652303853153974.20018900733945865155974020903607887007861537935139091987,0.5133601119505225577068374870982177663485920588341228999755052804524394703953610759786688220849341566e-4
+40.1744842529296875,38.1744842529296875,23473754866981740564555486055108018485222914840.89532642432922923677689389951361970679094125439301889,0.6056856733175899143047735897428789338443720945815721939828003090822229775480176381535315155613375295,15281916434283016670610019747072967960629758269.73834266040976757039887783490262781914651347525540974,0.3943143266824100856952264102571210661556279054184278060171996909177770224519823618464684844386624705
+40.1744842529296875,40.1744842529296875,18564620196126416583824924960812700619298333372.43503017151698110378592881334042054748819013683566141,0.4790168657334178736602681696601428580148630898071515336667084778109915747025016755472166027968034456,20191051105138340651340580841368285826554339738.19863891322201570338984292107582697844926459281276722,0.5209831342665821263397318303398571419851369101928484663332915221890084252974983244527833972031965544
+40.1744842529296875,42.1744842529296875,13888306771198703528421483388743752303473940039.4102895562521427143332987616776131260865041010771322,0.3583554691451176296889241779765488985250327905320915942322545065258820371877960981371943111488811587,24867364530066053706744022413437234142378733071.22337952848685409284247297273863439985095062857129643,0.6416445308548823703110758220234511014749672094679084057677454934741179628122039018628056888511188413
+40.1744842529296875,80.348968505859375,10297453142424702584860814468459300310714.26581298933898996634652706129685599333458805088014430853806,0.2657018391547936949654387140441327114368138897647303719002191428216298823431619777993151352447966925e-6,38755661003811614810462920941366517986552362396.36785609540000684082924467311939153260286667876828432,0.9999997342981608452063050345612859558672885631861102352696280997808571783701176568380222006848647552
+40.1744842529296875,4017.448486328125,0.2700477350407812016018325548647399119476191175927851658124516865191402053916788194164832727604714857e-1603,0.6967954004501231058803493451541279071457936604459712842319233523248254214931231564886775795838955157e-1650,38755671301264757235165505802180986445852673110.63366908473899680717577173441624752593745472964842863,1.0
+41.168750762939453125,0.41168749332427978515625,1524258603069265638743278312423780744130625018590.686165238612013968583442924585101825830212085904134,0.9999999999999999999999999999999999999999999999999999999999999999985543189618875330036628692360705089,0.2203591759637034721244346759822017892316646987063867858400490586901496518963689871966743469246620057e-17,0.1445681038112466996337130763929491133443604338109110730911692777822616154900423152471680813557074612e-65
+41.168750762939453125,20.5843753814697265625,1524194748986895939156748068594470617840101808542.147883921369726677855394627154080363588612453382105,0.9999581081043327410252978678033412655104043809687323781225330629606153568393178382780136588887519966,63854082369699586530243829310126290523210048.5382813172422872929316400570680561834859463923440476599,0.4189189566725897470213219665873448959561903126762187746693703938464316068216172198634111124800341377e-4
+41.168750762939453125,39.168750762939453125,921235832221207999894436234073217083769592391359.6367764729780647438573463877860202466651684393573161,0.6043828982603059202815090516192595596663242557967821462984970751314593449396962059754752775156110268,603022770848057638848842078350563660361032627231.0493887656339492269296882964361163004093904063688362,0.3956171017396940797184909483807404403336757442032178537015029248685406550603037940245247224843889732
+41.168750762939453125,41.168750762939453125,730534252406374013683152885251306441118544771229.5780837527804079903647704402323945156895778195318329,0.4792718577643986191255396729946647050226502718656690724878496065119580358902563096555433826366021708,793724350662891625060125427172474303012080247361.1080814858316059804222642439897420313849810261943195,0.5207281422356013808744603270053352949773497281343309275121503934880419641097436903444566173633978292
+41.168750762939453125,43.168750762939453125,548668567949485117299998089976314174637006606649.3558065210126974974653263152368532751670060638810415,0.3599576652181456768842813574348807638230264962726768429237893522425321974313715404978628431571321193,975590035119780521443280222447466569493618411941.3303587175993164733217083689852832719075527818451108,0.6400423347818543231157186425651192361769735037273231570762106477574678025686284595021371568428678807
+41.168750762939453125,82.33750152587890625,295194151561481442539883184817579927163593.185261637429442582745079888962317546805108318050677448853,0.1936640875551398648158013681401567369985181153948799089903491694490277067975544317324447372139193959e-6,1524258307875114077261835772540595926550697854997.500903601182571388041954795259819000269450527675475,0.9999998063359124448601351841986318598432630014818846051200910096508305509722932024455682675552627861
+41.168750762939453125,4116.875,0.1823183208486564649755902033103732767509437711098764678941584076934788183130309281845347251782807613e-1642,0.1196111476632233398205596072066382297314675492619930892102829251666369007875620560936819123776857662e-1690,1524258603069265638743278312423780744130625018590.686165238612013970787034684222136547074558845726152,1.0
+42.46524810791015625,0.4246524870395660400390625,189826116208112223374427708716952062262555313430053.0581376558616480180572702552664721584979197550157,0.9999999999999999999999999999999999999999999999999999999999999999999868838410400578319132217190804235,0.248978951493405435581825791863767232391819941401534608748931768758315062249939998035433608403527693e-17,0.1311615895994216808677828091957652628287183331760047625485569591332527650331876930587546923009175046e-67
+42.46524810791015625,21.232624053955078125,189820013558825525413856451277124302722534888018895.5949328854530526624360500962295996242200863846981,0.9999678513715151426370708901040324345699634151844983814304977600782977945314620725113350584413611004,6102649286697960571257439827759540020425411157.463204770408595358111009673970926890096091288955325974,0.3214862848485736292910989596756543003658481550161856950223992170220546853792748866494155863889964229e-4
+42.46524810791015625,40.46524810791015625,114418509469147666618059763730225993904197929287012.7658071312781962775517922244974783993141906654385,0.6027543088102120114128560801755924306710305322450205040752823481499426851367728588029526240884331002,75407606738964556756367944986726068358357384143040.29233052458345174299526754570304811500198700821485,0.3972456911897879885871439198244075693289694677549794959247176518500573148632271411970473759115668998
+42.46524810791015625,42.46524810791015625,91038860601073319555031191320147622356965732166863.27570185908875239864710546014332004091709923594325,0.479590808786629812456920525708786660803436610293434862004471959968413641666478882385419840449504671,98787255607038903819396517396804439905589581263189.78243579677289562189995431005720647339907843771015,0.520409191213370187543079474291213339196563389706565137995528040031586358333521117614580159550495329
+42.46524810791015625,44.46524810791015625,68710885357270162173435573275602262281533441424085.69231057841556932928819252521522739727101779206907,0.3619675033647124732769363399463223410648460945809521431099493385666606665468411278891661772541151576,121115230850842061200992135441349799981021872005967.3658270774460786912588672449852991170451598815843,0.6380324966352875267230636600536776589351539054190478568900506614333393334531588721108338227458848424
+42.46524810791015625,84.9304962158203125,24348327108521101518414501008666294609723236.61824098477188140644477599895081557232651747139912370585,0.1282664766834679368955418038597182009370967953321035999631116697702154437085777266511155557205717818e-6,189826091859785114853326190302451053596260703706816.4398966710897666141022837712497109419896602022543,0.9999998717335233165320631044581961402817990629032046678964000368883302297845562914222733488844442794
+42.46524810791015625,4246.52490234375,0.1582138976529834669433177680858588062216552879141295278678516348608211028079490742605004732613922258e-1693,0.833467495481647495481160914000063543822730002585076733409460509982719856414211333368378429831102885e-1744,189826116208112223374427708716952062262555313430053.0581376558616480205470597702005265143161776736534,1.0
+42.497722625732421875,0.4249772131443023681640625,214320796587885406489458353728508854097873289394904.6024158630527288917218602076036150242028043390557,0.9999999999999999999999999999999999999999999999999999999999999999999883411956140219450400432290945474,0.2498724243265148933181472014474271661064356718503270820032139724307779458620504172510254476937240104e-17,0.1165880438597805495995677090545256446620949551376648046928037362511313906278612645727943391506149808e-67
+42.497722625732421875,21.2488613128662109375,214313951967646903484275152390899015742965720544957.0244003475522738138072843627099232296750479851478,0.9999680636674206449787401653783054044121775659544962496092997854430722825546991266056094615440876975,6844620238503005183201337609838354907568849947.578015515500455080413300088158840727709228368382151053,0.319363325793550212598346216945955878224340455037503907002145569277174453008733943905384559123024965e-4
+42.497722625732421875,40.497722625732421875,129174249361023537107331876987310933122091042366831.2645618937047613242717506127419300674429383707532,0.6027144888296163515772252070453834692480092311566955326953291599058029767926908124663436695625012203,85146547226861869382126476741197920975782247028073.33785396934796756994883383812683388994133798277675,0.3972855111703836484227747929546165307519907688433044673046708400941970232073091875336563304374987797
+42.497722625732421875,42.497722625732421875,102787956119288975126093723648829399785804945587883.9803151682835690979042911457085841852094068383049,0.4795986099143638463567892055723837634276116729234156335106960194337764297212436073008822394018180986,111532840468596431363364630079679454312068343807020.6221006947691597963162933051601797721748695152251,0.5204013900856361536432107944276162365723883270765843664893039805662235702787563926991177605981819014
+42.497722625732421875,44.497722625732421875,77587716348964293578465407640649663151883390246322.89493559759560806796522105015336899577361192607823,0.3620167411852088050793255261572635397474417290529254386212890191099213379494954290219523059157586597,136733080238921112910992946087859190945989899148581.7074802654571208262553634007153949616106644274517,0.6379832588147911949206744738427364602525582709470745613787109808900786620505045709780476940842413403
+42.497722625732421875,84.99544525146484375,27208070530448802765802909580562168163995461.77254579478951131116041462644391236698700521687109732357,0.1269502118488614883135844698362221668980787971129111358877071664099451873870630359704078903509597235e-6,214320769379814876040655587925599273535705125399442.8298700682632175830601698244248515903972711366588,0.999999873049788151138511686415530163777833101921202887088864112292833590054812612936964029592109649
+42.497722625732421875,4249.7724609375,0.8326144286328681511297509911312044136597406528821339926238202082943488422887032281482269721890781093e-1695,0.3884897974851648675353071909446415031550976071737151800482655820055346640598305675474382338414838097e-1745,214320796587885406489458353728508854097873289394904.6024158630527288942205844508687639573842763535299,1.0
+44.155063629150390625,0.4415506422519683837890625,108477114678077093078697695322659091260698084784137369.110002963121029559199090947909271120281219104,0.999999999999999999999999999999999999999999999999999999999999999999999971405835691531463436772501,0.3101812440813520419483393002469302629985608179508771094556858171811451827514217878742256926755929311e-17,0.2859416430846853656322749899999994037199837561279552079800218535906471678278076452067456339118630281e-70
+44.155063629150390625,22.0775318145751953125,108474643430185028249549503850872916519826391393005797.430328383897984547126631643749528279128196121,0.9999772187165984397158403431700925824058753412351532475246527059570351643018381108199138172896039085,2471247892064829148191471786174740871693391131571.679674579223045015174271744973263260636415985468981,0.2278128340156028415965682990741759412465876484675247534729404296483569816188918008618271039609146006e-4
+44.155063629150390625,42.155063629150390625,65166733607384328109686174934992652095056623924479329.71630731218031381629055903769763393120666968009,0.6007417675219041750822628400919139150659383390950652539443606929164707374961076769162586172886969385,43310381070692764969011520387666439165641460859658039.39369565094071574601034435102515760855794242637,0.3992582324780958249177371599080860849340616609049347460556393070835292625038923230837413827113030615
+44.155063629150390625,44.155063629150390625,52067413750779344514119345276186742921186293772746499.41380384213826580730156316210705897365261918615,0.4799852384099410068415064305992278477407571638288250246591103967747364965706434447092705239015834618,56409700927297748564578350046472348339511791011390869.69619912098276375499934022661573256611199292031,0.5200147615900589931584935694007721522592428361711749753408896032252635034293565552907294760984165382
+44.155063629150390625,46.155063629150390625,39535757049385602447041006385754985944643699206637761.09264139802081605784331062412697787405216533363,0.3644617315524494040054148120284369212099063236559308483685850590153452830990755538609910522536928245,68941357628691490631656688936904105316054385577499608.01736156510021350445759276459581366571244677283,0.6355382684475505959945851879715630787900936763440691516314149409846547169009244461390089477463071755
+44.155063629150390625,88.31012725830078125,8137413449512315740698282975266611386652928396.043112228062756547178254908982430306893053990429077622,0.7501502481570763190138780452890031775330360096985795411810658666744412583681565686527092252128233038e-7,108477106540663643566381954624376115994086698131208973.066890735058273015122648479740361232871558116,0.9999999249849751842923680986121954710996822466963990301420458818934133325558741631843431347290774787
+44.155063629150390625,4415.50634765625,0.471616374294560277944461078335500447468289615585971440027982546549067486843462830019440340283459081e-1760,0.4347611712333574492131230726637439063324039886060442151202797559933361183474801399051158585639811607e-1813,108477114678077093078697695322659091260698084784137369.1100029631210295623009033887227915397646121065,1.0
+44.835826873779296875,0.4483582675457000732421875,1425978933609371600254458545091031314924821988225992007.557234079964693407661705427270692856772618663,0.9999999999999999999999999999999999999999999999999999999999999999999999975782049885832827770176393437,0.3453428667800506345586379402470304713295120863379305752115250295842367161856972936119639096916324187e-17,0.2421795011416717222982360656263756591421154877670003395133154316227366187748464697721629599772812851e-71
+44.835826873779296875,22.4179134368896484375,1425950651713633889105666908760918881400866742496260282.113179056753909833420877276347905848622289105,0.999980166680537050201167214079127526076483317084996681897910004842606091655157227350710452797377076,28281895737711148791636330112433523955245729731725.44405502321078357769425681872329335373670896079778,0.1983331946294979883278592087247392351668291500331810208999515739390834484277264928954720262292402961e-4
+44.835826873779296875,42.835826873779296875,855535678182104766414101538607812051948212691408357581.4462739593052650716693109932594932935460042787,0.5999637568393893599087315525330780934527760671826708937832493979646943082931183806407797393962321876,570443255427266833840357006483219262976609296817634426.1109601206594283394458231018117059088129937868,0.4000362431606106400912684474669219065472239328173291062167506020353056917068816193592202606037678124
+44.835826873779296875,44.835826873779296875,684666388653978411093045829488133146997666675192448887.548528078215404828846865562619004725827358265,0.4801378004378947380266451988338181755814166171016997601902346821704416371646920497258774389818801572,741312544955393189161412715602898167927155313033543120.0087060017492885822682685324521944765316398005,0.5198621995621052619733548011661818244185833828983002398097653178295583628353079502741225610181198428
+44.835826873779296875,46.835826873779296875,521094130933416047837079183573472533059338367837325116.5799720069159845395376546564897521165798171593,0.3654290527381402493626935887566776833495382792235610396067617960985112005638177611240789255072658853,904884802675955552417379361517558781865483620388666890.9772620730487088715774794385814470857791809061,0.6345709472618597506373064112433223166504617207764389603932382039014887994361822388759210744927341147
+44.835826873779296875,89.67165374755859375,86195751040333604857084573714314451948245512370.79235789734733534050631501122476697460359002262506887,0.6044672120236652165734581570628687563255578813023631070319335842563478393717628809723536588107406485e-7,1425978847413620559920853688006457600610370039980479636.764876182617358070608819083846432227755408043,0.9999999395532787976334783426541842937131243674442118697636892968066415743652160628237119027646341189
+44.835826873779296875,4483.58251953125,0.7605491057948708736924073253960663000703660831533174820826097811656785980099961747730783148348354065e-1787,0.5333522732133246357469507632120627536627389505909703958332558281193272201000164939932160014407258852e-1841,1425978933609371600254458545091031314924821988225992007.557234079964693411115134095071199202358998065,1.0
+46.069919586181640625,0.46069920063018798828125,156229578645430029892693280469938894161099847723443430447.8937329526294770773514461975762040960485434,0.999999999999999999999999999999999999999999999999999999999999999999999999972414536373073821020386629,0.430966535917351299246823445116747633882755453793598188924370382185860462468582139997307910457170432e-17,0.2758546362692617897961337099106494794692271397414639378058001876362927589908259563322719332609135106e-73
+46.069919586181640625,23.0349597930908203125,156227167802482030291019955950849717986542276783577097596.7764187512164019070117619873055446230194126,0.9999845685882986913965954484603299408671471664544313095838757262758837338039566255031179892326667966,2410842947999601673324519089176174557570939866332851.117314201413075174649349569444172465497365238143,0.1543141170130860340455153967005913285283354556869041612427372411626619604337449688201076733320338164e-4
+46.069919586181640625,44.069919586181640625,93518739167256001160965508843623557287049283164262706802.08206238317796027550427531938997001220645491,0.598598165456881470526785542920476560627052846085107740656990795501163393325018781713583372398113095,62710839478174028731727771626315336874050564559180723645.81167056945151680615683623735974707631032292,0.401401834543118529473214457079523439372947153914892259343009204498836606674981218286416627601886905
+46.069919586181640625,46.069919586181640625,75053579006905291972845878009168891776075391934208005221.27770122160681576900920027778915844077444459,0.4804056930681655629591455827282010092249885224965548489268707311023785623924484916861804903328450513,81175999638524737919847402460770002385024455789235425226.61603173102266131265191127896055864774233324,0.5195943069318344370408544172717989907750114775034451510731292688976214376075515083138195096671549487
+46.069919586181640625,48.069919586181640625,57356732535777750826101726953433302049059639079849857461.90725107209455149651293551223027861293511609,0.3671310710371395400688098470264602078755856799586471251333558549032032640968970520939771044797009879,98872846109652279066591553516505592112040208643593572985.98648188053492558514817604451943847558166174,0.6328689289628604599311901529735397921244143200413528748666441450967967359031029479060228955202990121
+46.069919586181640625,92.13983917236328125,6386261777959473426463268613298083779201778180875.963636401171364540171862037153434000929449897273151,0.4087741792131039588147504168641433115263864467545102514308424422207845266372182224750302862122549557e-7,156229572259168251933219854006670280863016068521665249571.9300965514581125414892495195962830875873279,0.9999999591225820786896041185249583135856688473613553245489748569157557779215473362781777524969713788
+46.069919586181640625,4606.9921875,0.2103364288773543767991509542870335920129305151787917372994954838606983292825200444922887881847471441e-1835,0.1346329105544874108038106920532274902902258224702979771700801449163515518919323368752942104778867365e-1891,156229578645430029892693280469938894161099847723443430447.8937329526294770816611115567497170885167778,1.0
+47.73848724365234375,0.477384865283966064453125,94297871782126531667698757690457880775688953913143478158783.4026371124564849066620969800384558927427,0.9999999999999999999999999999999999999999999999999999999999999999999999999999349491816884125540004068,0.6134153724468481696276626044323259403012657381341431694954157745658077001183420287143157095875836147e-17,0.6505081831158744599959323819852673084068016573338617816115596248891966884813541934905939397700390915e-76
+47.73848724365234375,23.869243621826171875,94296834823245807652969045967500639423686913863045283825866.12092678998463588262427567075517041016733,0.9999890033692051938476305602120476157955869002397150769041542477718912839914002884896529349163695651,1036958880724014729711722957241352002040050098194332917.281710322471849030171975033751767178851992382,0.1099663079480615236943978795238420441309976028492309584575222810871600859971151034706508363043494305e-4
+47.73848724365234375,45.73848724365234375,56280529723473313322772954173137164595518203073213855235385.45619029103223562820004377606088660146763,0.5968377510524142493503249212629070417341066991315400614686976736813838796351206883152067091509543647,38017342058653218344925803517320716180170750839929622923397.94644682142424928459620692844605098755169,0.4031622489475857506496750787370929582658933008684599385313023263186161203648793116847932908490456353
+47.73848724365234375,47.73848724365234375,45333819229102433455254827525534048742879689999947486539951.19954532498841582752257288476676363338733,0.480751244671198672827310863786147702830011497912631764613704226381736485766138504104714358349333159,48964052553024098212443930164923832032809263913195991618832.203091787468069085273677819740173955632,0.519248755328801327172689136213852297169988502087368235386295773618263514233861495895285641650666841
+47.73848724365234375,49.73848724365234375,34827306725858276966117445978915340810575352880081770694703.4605605862527481970966869862156645736762,0.3693329029347143432647220290012258387000367719450912937969606556838290008738547030598297130035940408,59470565056268254701581311711542539965113601033061707464079.94207652620373671569956371829127301534313,0.6306670970652856567352779709987741612999632280549087062030393443161709991261452969401702869964059592
+47.73848724365234375,95.4769744873046875,2272453501227737595672809400559769771223684974377983.827976395269020528779174166766882031804331639098,0.2409867219992195465527592924565649658742240559501080492032913406249111902612657779532496540897954508e-7,94297869509673030439961162017648480215919182689458503780799.57466071718746438401707653774005555721499,0.999999975901327800078045344724070754343503412577594404989195079670865937508880973873422204675034591
+47.73848724365234375,4773.8486328125,0.4930699700361143527972140765160232135500591407875671436014018474055318469318842911777409267112490955e-1901,0.5228855760131504268371997964833577252463985153824819644786388969005802260327733579808010387320073253e-1960,94297871782126531667698757690457880775688953913143478158783.40263711245648491279625070450693758901933,1.0
+48.7948760986328125,0.48794877529144287109375,5601572122098061051259791642269275646923022713836767611816339.1137889913367940628079996713078961603,0.9999999999999999999999999999999999999999999999999999999999999999999999999999985876655788824192282825,0.7911293120411743533001376111343001937295274002968810106768363279940895381585075390096587193008694434e-17,0.1412334421117580771717536205560869187212298090709774667602193820952283548749621069654359532291337091e-77
+48.7948760986328125,24.39743804931640625,5601522402139792886638498079287725791823205121779703966794601.016615862491090543010529121958589696189,0.999991123927857320512363083686512750338327837341403865193132290293173625226193417093316263644182252,49719958268164621293562981549855099817592057063645021738.09717312884570352770876366976104999711212453,0.8876072142679487636916313487249661672162658596134806867709706826374773806582906683736355817747966447e-5
+48.7948760986328125,46.7948760986328125,3337252972618945238853345843103427263009076595580958815239085.917364310448605943882838936122588050498,0.5957707764671218367298061078886198032271253720656163155156411853611522701054849762534337523550633538,2264319149479115812406445799165848383913946118255808796577253.196424680888188126836453855597051642803,0.4042292235328781632701938921113801967728746279343836844843588146388477298945150237465662476449366462
+48.7948760986328125,48.7948760986328125,2694136564790500482748260777423500420852012948687403792505394.16676815034093075792922204727697680055,0.4809607920894563752724322425856259987941807214874355947391297070165003153642341702847879913264921532,2907435557307560568511530864845775226071009765149363819310944.947020840995863312790070744442662892751,0.5190392079105436247275677574143740012058192785125644052608702929834996846357658297152120086735078468
+48.7948760986328125,50.7948760986328125,2076343764684620073166086419044050262016135013176153464440846.664429231610555519468550009162785276707,0.3706716113666547602264918798884556302564009821822648843191020496528632303627131612767514362854816721,3525228357413440978093705223225225384906887700660614147375492.449359759726238551250742782556854416594,0.6293283886333452397735081201115443697435990178177351156808979503471367696372868387232485637145183279
+48.7948760986328125,97.589752197265625,96633720783328303798352010014189600454943867848270215.47055760089377523289780774911933669460249883556,0.1725117854005855020842370419366583086762499064870270317383869431514356647748290788156579276766810871e-7,5601572025464340267931487843917265632733422258892899763546123.643231390443018837821485042600302998698,0.9999999827488214599414497915762958063341691323750093512972968261613056848564335225170921184342072323
+48.7948760986328125,4879.48779296875,0.142902764516403185294728217767227941951713037297670494882890420551091468476013775233803109173853481e-1942,0.2551118889510596062852710063746790917638079926789072602114635625355302609430843127363392446485128694e-2003,5601572122098061051259791642269275646923022713836767611816339.113788991336794070719292791719639693301,1.0
+49.0131072998046875,0.490131080150604248046875,13061864686300908920803719163179816963237677037051715665276991.24303425192689419132654400708683577008,0.9999999999999999999999999999999999999999999999999999999999999999999999999999993597665573432272928705,0.836264259562735739627584621018775264415451920404592899346755679500865071935186794232489730130344795e-17,0.6402334426567727071295084550402072098866010960149830297834331520992735700400049855174658417403349245e-78
+49.0131072998046875,24.50655364990234375,13061753764458253693889131231633966917056697244809076726567854.48561655813426357616271131753200856525,0.999991507962659300849474722779311188992029309392573691814886457299231043087112170534288979616810278,110921842655226914587931545850046180979792242638938709136.7574176937926306235264752851821846011056054,0.849203734069915052527722068881100797069060742630818511354270076895691288782946571102038318972203823e-5
+49.0131072998046875,47.0131072998046875,7779055177224531433847873356756550880745643673160067434883264.175524243200545787554424699998699886704,0.5955547208648616454908563451934368284777868953754228840242479213047790283151801262424758509649431696,5282809509076377486955845806423266082492033363891648230393727.067510008726348412134761902715493279651,0.4044452791351383545091436548065631715222131046245771159757520786952209716848198737575241490350568304
+49.0131072998046875,49.0131072998046875,6282799159117711650413155559190223007042393328845967305871549.376765107501095387327816026904935607209,0.4810032342248208072042698066580552453179272398068159449689453325312924253220975980845696118149472746,6779065527183197270390563603989593956195283708205748359405441.866269144425798812361370575809257559146,0.5189967657751791927957301933419447546820727601931840550310546674687075746779024019154303881850527254
+49.0131072998046875,51.0131072998046875,4845208239695453672310499194053447053092715720355790929554960.433543251225737318347763865778378682507,0.3709430740602478166121936161323102049305485691941792020654326044473795475903974477495853857611723314,8216656446605455248493219969126369910144961316695924735722030.809491000701156881341422736935814483848,0.6290569259397521833878063838676897950694514308058207979345673955526204524096025522504146142388276686
+49.0131072998046875,98.026214599609375,210302546324079617042666137317355910679338721332923180.7011094632185992140992419400883752605588168246,0.161004995362294501955781899433447647910794848223030498056618820371527992069100268591557647156092188e-7,13061864475998362596724102120513679645881766357712994332353810.5419247887082949855899446626258179058,0.9999999838995004637705498044218100566552352089205151776969501943381179628472007930899731408442352844
+49.0131072998046875,4901.310546875,0.3762759202371411607906182163728630489436731159784447719530250581881585367181454133780748766860948066e-1951,0.2880721315630943547874313385040782195852595290301301095111354119874378149376461073017779801557087002e-2012,13061864686300908920803719163179816963237677037051715665276991.24303425192689419968918660271419316635,1.0
+49.231555938720703125,0.4923155605792999267578125,30513621371784093137907492178483728526708751385403785887891548.23854827764774923684709064035148648646,0.9999999999999999999999999999999999999999999999999999999999999999999999999999997099978963833420028762,0.8849014386779600512060918409202638110571377119277677306756900527895703405248910547011395073678119164e-17,0.2900021036166579971238497856762868731798590837906482108761044532802848110442112916452863099138439806e-78
+49.231555938720703125,24.6157779693603515625,30513373469024151077427407466748464253916093262945790568081786.96468838116647238895631811451178316184,0.9999918756690029818667536660677441010658447041407899302655904960908028819952123731430693041660260175,247902759942060480084711735264272792658122457995319809761.273859896481276856739786912619303836679277,0.8124330997018133246333932255898934155295859210069734409503909197118004787626856930695833973982461035e-5
+49.231555938720703125,47.231555938720703125,18165976531026817699694075872139940080858090169269377566790729.18049740095257364251337317300270303058,0.5953399076985622259376744449097626597320408517357455652989455255522387615460499030573249546917648582,12347644840757275438213416306343788445850661216134408321100819.05805087669517560318273185412838396794,0.4046600923014377740623255550902373402679591482642544347010544744477612384539500969426750453082351418
+49.231555938720703125,49.231555938720703125,14678438286187132704549611673975659053997461881768925114598324.54023317355898087685865946286072013889,0.4810454356545259460226648234226421578585333714355594346042312300451980308766843304950525841893354252,15835183085596960433357880504508069472711289503634860773293223.69831510408876836883744556427036685963,0.5189545643454740539773351765773578421414666285644405653957687699548019691233156695049474158106645748
+49.231555938720703125,51.231555938720703125,11327056074316051728317464973826531163156542845237827110031967.79109381718475434769618838452002397804,0.3712131030369986195606978160531938715384914963649215103746762677583232808809154482681745158093446569,19186565297468041409590027204657197363552208540165958777859580.44745446046299489799991664261106302048,0.6287868969630013804393021839468061284615085036350784896253237322416767191190845517318254841906553431
+49.231555938720703125,98.46311187744140625,458487525192315340840770286858890259374330205634710765.9988768621277089725207826487810563589003265197,0.1502566737674336393528638656732338483304684381381084127396773752730019404675626466336475080971018729e-7,30513620913296567945592151337713441667818492011073580253180782.23967141552004027317532237835003063962,0.9999999849743326232566360647136134326766151669531561861891587260322624726998059532437353366352491903
+49.231555938720703125,4923.15576171875,0.9717321242756456827191901001352849353556786219798769841406587556238286163318346298612203221364212635e-1960,0.318458472180625909505605899807483871295648097053185716425474836108328454194480870818140154208789747e-2021,30513621371784093137907492178483728526708751385403785887891548.23854827764774924569610502713108699852,1.0
+49.313610076904296875,0.493136107921600341796875,41977462250047053621278529477326524770382434246777810317301271.50355312924884894059528324863289768382,0.9999999999999999999999999999999999999999999999999999999999999999999999999999997846166238980781349222,0.9041247539606111811561301659776818578488689362946063791809098998694084062604014379692784132080132169e-17,0.2153833761019218650777897073040746888619415685741883415747598184105013419478470021362496143382514766e-78
+49.313610076904296875,24.6568050384521484375,41977126834111098802325476057585044641461610329312651133657817.80438041334181472191041470716898161388,0.999992009618543473456957953827788227898425858640141642904158702373742555202893589905204560663320144,335415935954818953053419741480128920823917465159183643453.6991727159070342277261160810700278815059985,0.7990381456526543042046172211772101574141359858357095841297626257444797106410094795439336679855990441e-5
+49.313610076904296875,47.313610076904296875,24987487076314225090859455285460119707445499455299404530418239.95789704471690970870041620817722242819,0.5952595925754472204052306290824436181794875104709120322748544232982499815973709574172989348541860406,16989975173732828530419074191866405062936934791478405786883031.54565608453193924093611458006178706719,0.4047404074245527795947693709175563818205124895290879677251455767017500184026290425827010651458139594
+49.313610076904296875,49.313610076904296875,20193728989961464156407400427712716826877199356621370752578181.00940429055827926222557408902306356367,0.4810612149365658350199096657185796598997839581312059611269089898075494261587237385701322394433743991,21783733260085589464871129049613807943505234890156439564723090.49414883869056968741095669921594593172,0.5189387850634341649800903342814203401002160418687940388730910101924505738412762614298677605566256009
+49.313610076904296875,51.313610076904296875,15586823406579095014352178767892338209924728088557566605812326.27035014833144003135287498797910150214,0.3713140950192057725345167846810657523567871031455454878884239259485793829239381364071945398866452464,26390638843467958606926350709434186560457706158220243711488945.23320298091740891828365580025990799324,0.6286859049807942274654832153189342476432128968544545121115760740514206170760618635928054601133547536
+49.313610076904296875,98.62722015380859375,614582434878766631658381755290327694839226731674591511.4439373352808898253364458766736410914439707921,0.1464077154588061669542294492075360765560256682717113973689794974636505127774814401769897990679495622e-7,41977461635464618742511897818944769480054739407551078642709760.05961579396795912430008491156536840394,0.9999999853592284541193833045770550792463923443974331728288602631020502536349487222518559823010200932
+49.313610076904296875,4931.36083984375,0.5781374421410369483050943901670173138935377941438834462093143122446551440529941418555199448394287663e-1963,0.137725677340199120569492006946235910213477616632694978279574736604970959505980571279012260573630228e-2024,41977462250047053621278529477326524770382434246777810317301271.50355312924884894963653078823900949539,1.0
+50.61444091796875,0.50614440441131591796875,6714188046232440418685030023377617773603001027074053478294994042.204646644051537335902300746519907618,0.9999999999999999999999999999999999999999999999999999999999999999999999999999999980715363415791268913,0.1294806764296310636318173346859335327241054167055133004392944644877422244201183535072458036592003221e-16,0.1928463658420873108652804777026377451373877260124550558001117332744510315505278162911918594962705467e-80
+50.61444091796875,25.307220458984375,6714146820546485816210964392746809241641339557308203649194458429.81834063847038356985374879819165094,0.999993859914903971804826160490836859357383212078582155689027432935121621190536804019545464384514836,41225685954602474065630630808531961661469765849829100535612.38630600558115377899661959129136304102089,0.614008509602819517383950916314064261678792141784431097256706487837880946319598045453561548516398687e-5
+50.61444091796875,48.61444091796875,3988313956145632916566663762336571620536279896513960331887006459.167227525169321876011864521792547979,0.5940128469269805020475397278656733185177834722866262153069773700644041051113597931821515140004607074,2725874090086807502118366261041046153066721130560093146407987583.037419118882215472838503867690466002,0.4059871530730194979524602721343266814822165277133737846930226299355958948886402068178484859995392926
+50.61444091796875,50.61444091796875,3231580463151548830516154806912916051190670333620249597297205901.021990540164873600299658797918958768,0.4813062191436384758388250043654343574286693186475618754553011841019147867069570438343251387511825629,3482607583080891588168875216464701722412330693453803880997788141.182656103886663748550709591564055213,0.5186937808563615241611749956345656425713306813524381245446988158980852132930429561656748612488174371
+50.61444091796875,52.61444091796875,2503613809043348826074455346249509284449404807156470871472444827.438146871104786877235935571082287603,0.3728840764965187117746424485085442369500169196675495454176896266215341707615979829805709488435240308,4210574237189091592610574677128108489153596219917582606822549214.766499772946750471614432818400726378,0.6271159235034812882253575514914557630499830803324504545823103733784658292384020170194290511564759692
+50.61444091796875,101.2288818359375,65157090661144176686930404729589898612925199880024698927.79274861109795689024903768341745546080942518,0.9704388708282610485660341164426108672165668055174493744243968577985313828355455148136453870853589378e-8,6714187981075349757540853336447213044013102414148853598270295114.41189803295358045860133070606555852,0.9999999902956112917173895143396588355738913278343319448255062557560314220146861716445448518635461291
+50.61444091796875,5061.4443359375,0.4289812536466745246255732966601129510431435781396240051532903497325943684690874971818157697955959851e-2014,0.6389175440020487899249233587686281673752734749390701447354800554184726072346876273924109482210533211e-2078,6714188046232440418685030023377617773603001027074053478294994042.204646644051537348850368389483013981,1.0
+54.914707183837890625,0.549147069454193115234375,164151310522993759069795066972687396443103420991679884830848715223699039.1653106566475602886411567813,0.9999999999999999999999999999999999999999999999999999999999999999999999999999999999999996719495846733,0.5384990559349759171681441333454699105568520939738433355014750224830539512407632661747323173299402731e-16,0.3280504153267450125172471989136226939862161886184417111761738657190547864708487501819152013725201312e-87
+54.914707183837890625,27.4573535919189453125,164150887731298655188038651562491593455570836870325079905734706617590366.5972755127311180833858260057,0.9999974243781925538844289635804501882857438295912247848668748219088743426660381706768477071244500074,422791695103881756415410195802987532584121354804925114008606108672.5680351439164422591052363691705433,0.2575621807446115571036419549811714256170408775215133125178091125657333961829323152292875549992583763e-5
+54.914707183837890625,52.914707183837890625,96884578938958210997376202956674290839773847199735668357379347723709372.39625989326147265466419377192,0.590215080405263944811319921890712084248273030272297085126732257678891723123563893072502749049830431,67266731584035548072418864016013105603329573791944216473469367499989666.76905076338608768782686860291,0.409784919594736055188680078109287915751726969727702914873267742321108276876436106927497250950169569
+54.914707183837890625,54.914707183837890625,79129667267047147526717119118995088355831259181129876934354432191582853.77653680202639544058251024707,0.4820532167238648515239777182823065099496881627515239823294463925310285574100982896450873030840569627,85021643255946611543077947853692308087272161810550007896494283032116185.38877385462116490190855212777,0.5179467832761351484760222817176934900503118372484760176705536074689714425899017103549126969159430373
+54.914707183837890625,56.914707183837890625,61998698233085757229493527411137482480537560623537872923270337904981139.91599151236753006190384612575,0.3776923744047793622088152487925424046936010452307012286644065629232030935629673512651414067339507712,102152612289908001840301539561549913962565860368142011907578377318717899.2493191442800302805872162491,0.6223076255952206377911847512074575953063989547692987713355934370767969064370326487348585932660492288
+54.914707183837890625,109.82941436767578125,409887797602967570461851681889828802007684874925098320507959771.5715434779624004447688690016653063067,0.2497012032965474725110186547475795550820769743457111426043609148765376435274603693329847732145409736e-8,164151310113105961466827496510835714553274618983995009905750394715739267.5937671786851598977221933732,0.9999999975029879670345252748898134525242044491792302565428885739563908512346235647253963066701522679
+54.914707183837890625,5491.470703125,0.5165113766416084345161388194893437492127905673992045258572355165738821959725822506156487309956784915e-2183,0.3146556521516514313547899769529902715440568138637626889248921733720231539084951313300316259223236421e-2254,164151310522993759069795066972687396443103420991679884830848715223699039.1653106566475603424910623748,1.0
+54.94844818115234375,0.5494844913482666015625,187851168756962008518943585197155939239197451550074484378447714368658665.2380183083961816911607133335,0.9999999999999999999999999999999999999999999999999999999999999999999999999999999999999997097092642134,0.5453145399682577866129223201000569205154674653231300863472075774659456902236400591754309838804134088e-16,0.2902907357865707827052086134526239861006169237323449091651043766816683560186739143948897058595964204e-87
+54.94844818115234375,27.474224090576171875,187850688204754556675259030571735333383262932952997517257249277514417744.3674666108961266782574975188,0.9999974418460601990063741194487108136798967754558587780131350787376230409100342878319683058714681691,480552207451843684554625420605855934518597076967121198436854240920.870551697500055067434669811554025,0.2558153939800993625880551289186320103224544141221986864921262376959089965712168031694128531830910458e-5
+54.94844818115234375,52.94844818115234375,110867332077426050430170113462157612347487429352825641994332385851947222.233911692886205435906040664,0.5901870763490640405017843227129827156929426843403059593921350219170041223755765166141042849834084803,76983836679535958088773471734998326891710022197248842384115328516711443.00410661550997630978612666635,0.4098129236509359594982156772870172843070573156596940406078649780829958776244234833858957150165915197
+54.94844818115234375,54.94844818115234375,90555295593671555882056125352107820301243760681827977424997667068714409.28854900998522407279115121804,0.4820587286887213413001143913452364408800882507714759540697120562191766618525011812570522720775708377,97295873163290452636887459845048118937953690868246506953450047299944255.94946929841095767290101611228,0.5179412713112786586998856086547635591199117492285240459302879437808233381474988187429477279224291623
+54.94844818115234375,56.94844818115234375,70956641203163086936978696616478734493599092913380748575928433966808218.65193597391433636996316283525,0.3777279730155170598106878915865848184309466262864013694659475230887023301322530086576178253354594503,116894527553798921581964888580677204745598358636693735802519280401850446.5860823344818453757290044951,0.6222720269844829401893121084134151815690533737135986305340524769112976698677469913423821746645405497
+54.94844818115234375,109.8968963623046875,464102201043865833557216906582828066994755225561277803369375097.9754584615902564830459384037959935776,0.2470584580947227152441614199965658460018276150506352260350268803453851765854228808608987929910805107e-8,187851168292859807475077751639939032656369384555319258817169910999283567.2625598468059252626462289265,0.9999999975294154190527728475583858000343415399817238494936477396497311965461482341457711913910120701
+54.94844818115234375,5494.8447265625,0.2445298890493541408008467785454571259883344621206772579885985213851975119760419015604019740185833505e-2184,0.1301721414178273752294907378127263551002731231502211006847882185446847655446946323738171949854707235e-2255,187851168756962008518943585197155939239197451550074484378447714368658665.2380183083961817456921673303,1.0
+63.41974639892578125,0.6341974735260009765625,178781775582555322831393459001548236824080056881981997135875096380855128931018811384607.8263867610159,1.0,0.2419755692515371515173584094950612592700908218521955459597516726810661567670404063127525834621512633e-14,0.1353468878262712472782977862087874621871057321340893800289611779258406507229157512362295404649566625e-100
+63.41974639892578125,31.709873199462890625,178781692342142170785409780820515383634926532408086873914117894912676684365389019767752.7790978582308,0.9999995344021342174868290258262038710262198353109634411194483106961237383691635096796115414028455356,83240413152045983678181032853189153524473895123221757201468178444565629791616855.04728890278507809948,0.4655978657825131709741737961289737801646890365588805516893038762616308364903203884585971544643507025e-6
+63.41974639892578125,61.41974639892578125,104388333133949398433671787908270687938056375083765771453773799137973989914779780509815.5199712670318,0.5838868799339473422094395385799267211052253663811901143993747449946945861354588975918358898317080505,74393442448605924397721671093277548886023681798216225682101297242881139016239030874792.30641549398414,0.4161131200660526577905604614200732788947746336188098856006252550053054138645411024081641101682919495
+63.41974639892578125,63.41974639892578125,86405254208785822498227842199061501037983747988368704154857210974591637094015848346466.45268598991196,0.4833001234451149344512694365288854307321929521337507679336835174464874355761806559738848052848309181,92376521373769500333165616802486735786096308893613292981017885406263491837002963038141.37370077110394,0.5166998765548850655487305634711145692678070478662492320663164825535125644238193440261151947151690819
+63.41974639892578125,65.41974639892578125,68971970365143646446038678095639125733682362723815819661774560317848098111087911901313.26750485990136,0.3857885969663319753685565262495054110135097416380730697356245827738402699182051967042563691350925875,109809805217411676385354780905909111090397694158166177474100536063007030819930899483294.5588819011145,0.6142114030336680246314434737504945889864902583619269302643754172261597300817948032957436308649074125
+63.41974639892578125,126.8394927978515625,30691980971237319028432377167557319780941716621634262788261966299504612911976.01558503915900095553956,0.1716728725354045363246736295952678021288539135443891582221118897564061608073873578322466586191962822e-9,178781775551863341860156139973115859656522737101040280514240833592593162631514198472631.8108017218569,0.9999999998283271274645954636753263704047321978711460864556108417778881102435938391926126421677533414
+63.41974639892578125,6341.974609375,0.1131375337335908502067153840311730674421577259558430438955710189241642025307830133905323542841378212e-2516,0.632824757249084362495991804315761507899299220479402442817501455851991753739628539547072013471685414e-2603,178781775582555322831393459001548236824080056881981997135875096380855128931018811384607.8263867610159,1.0
+64.15645599365234375,0.641564548015594482421875,3796435425063500659242313572638614372926115135269320819795223684466906909303368976530175.122451407014,1.0,0.3561664430749769036027482269146899004189751759660599438999688134522266198395501963955535988740201181e-14,0.9381601507656870649864913343266641376431807844052367907407753504569837108658752233482747677717175015e-102
+64.15645599365234375,32.078227996826171875,3796433900242956980688155158722538505241057205030970671838901774015999554644043025490295.635505813503,0.9999995983546740682282471759269639979078560500343554366709084460883989623621626228190293213646921447,1524820543678554158413916075867685057930238350147956321910450907354659325951039879.486945593510789982,0.4016453259317717528240730360020921439499656445633290915539116010376378373771809706786353078553392674e-6
+64.15645599365234375,62.15645599365234375,2214837906124932528128325425520561459324051607422165451016896221684228033014617351940846.565743533083,0.5833993359936805156355843233031200457341264817230711049983675821663794766359727700788132399993569834,1581597518938568131113988147118052913602063527847155368778327462782678876288751624589328.55670787393,0.4166006640063194843644156766968799542658735182769288950016324178336205233640272299211867600006430166
+64.15645599365234375,64.15645599365234375,1835182831180570409914708629671457763648714041584640291801144804519041877323209225292723.814233700998,0.4833962982920681250090980397015585499087385229065810522163504847965098050218325264821795143425437337,1961252593882930249327604942967156609277401093684680527994078879947865031980159751237451.308217706016,0.5166037017079318749909019602984414500912614770934189477836495152034901949781674735178204856574562663
+64.15645599365234375,66.15645599365234375,1467005652324336015906818546758285433114296416846523551637245253829911651877029717627645.184366720173,0.3864165955884257684548349803381523125565843035816766982692567090746627380615657140747703389524461245,2329429772739164643335495025880328939811818718422797268157978430636995257426339258902529.938084686841,0.6135834044115742315451650196618476874434156964183233017307432909253372619384342859252296610475538755
+64.15645599365234375,128.3129119873046875,517058479756301509601783283211190974417854638395221192100589177873826660470571.1434643133022531163644,0.1361957788990057661406623390290227662213212373635212449111954036803864924518024633802358205729655158e-9,3796435424546442179486012063036831089714924160851466181400002492366317731429542316059603.978987093712,0.9999999998638042211009942338593376609709772337786787626364787550888045963196135075481975366197641794
+64.15645599365234375,6415.6455078125,0.1501972817374904189947192006751610811566378120199453667459490453040374982588451571443047819412729202e-2545,0.3956271210249234272035512872107835510491067746256581794926752836254227375420570012656191632901861478e-2633,3796435425063500659242313572638614372926115135269320819795223684466906909303368976530175.122451407014,1.0
+64.80814361572265625,0.64808142185211181640625,57064303530430383996729458229257130231801588273800388697126125108151088365381775714781145.95985879319,1.0,0.5049774538054909199584092677118062653666933701505046003708884127507004677678223741124772310809781312e-14,0.8849270429388562022862722730475310480595182237631208674201045321741549884233443793981741970390437303e-103
+64.80814361572265625,32.404071807861328125,57064283417933883221970238789084305216792101206464811754288528323627940734515192893465592.08684760924,0.9999996475467979724054120652922043059124000828270789331017697272074390052504823272149944165329867989,20112496500774759219440172825015009487067335576942837596784523147630866582821315553.87301118395144131,0.3524532020275945879347077956940875999171729210668982302727925609947495176727850055834670132010959105e-6
+64.80814361572265625,62.80814361572265625,33267066351092621357557801726432026358661364649112280492241559461668010708553935629603600.64360322167,0.5829750701040706842898845713314486965142088106269133431003371650265263525010185764209656929781262825,23797237179337762639171656502825103873140223624688108204884565646483077656827840085177545.31625557152,0.4170249298959293157101154286685513034857911893730866568996628349734736474989814235790343070218737175
+64.80814361572265625,64.80814361572265625,27589449645371862123113533511696817712950177448901812103904222740979949068100159476483178.64080817411,0.4834800030575923874253729319974034966635835312330768614990931555871329733879043648167080009582767187,29474853885058521873615924717560312518851410824898576593221902367171139297281616238297967.31905061908,0.5165199969424076125746270680025965033364164687669231385009068444128670266120956351832919990417232813
+64.80814361572265625,66.80814361572265625,22081806621146139055171477960369436441741722947552119646792081319310182857054289976264452.51802025126,0.3869635701305052995758522155643032051724326397433195289354322121529371737951138727752313566162150975,34982496909284244941557980268887693790059865326248269050334043788840905508327485738516693.44183854193,0.6130364298694947004241477844356967948275673602566804710645677878470628262048861272247686433837849025
+64.80814361572265625,129.6162872314453125,6333069303558022755471401584057186796783754151767482065777881718486350969284051.207123983670851908655,0.1109812774667585290988500580232166290175194254736216733559281573355525708028349000552975379833083416e-9,57064303524097314693171435473785728647744401477016634545358643042373206646895424745497094.75273480952,0.999999999889018722533241470901149941976783370982480574526378326644071842664447429197165099944702462
+64.80814361572265625,6480.814453125,0.4318663435349180480771605832754060841663126038498941314495328213246217229719803389910472016804776487e-2571,0.7568064741289954268654103373011425276871650316179022296676779264925390727199244910390007532872691374e-2660,57064303530430383996729458229257130231801588273800388697126125108151088365381775714781145.95985879319,1.0
+65.7200469970703125,0.65720045566558837890625,2559334550193453458047928045143681115995090699028390076702073278152157048485934530589741019.993329575,1.0,0.8322935909245563296496052903098445485056609705917670879371842756568484537065699035714913548976504698e-14,0.3251992166720233650696134882963952235228517897458966941875070780887225768671085910687092858643365674e-104
+65.7200469970703125,32.86002349853515625,2559333798806136046903336846253865446432868075946183012282547839132061159157676016077590697.883689677,0.9999997064130137443933723045808171802671092117497975520038458170100784225411626966942287198503258944,751387317411144591198889815669562222623082207064419525439020095889328258514512150322.1096398981007926,0.2935869862556066276954191828197328907882502024479961541829899215774588373033057712801496741056349697e-6
+65.7200469970703125,63.7200469970703125,1490536274964613671595815806108988693018968387950980022211614580566253330891740694197166613.670925398,0.5823921201907534526914623237640265941667710613191372790718040782800847758518161432917761081775805404,1068798275228839786452112239034692422976122311077410054490458697585903717594193836392574406.322404177,0.4176078798092465473085376762359734058332289386808627209281959217199152241481838567082238918224194596
+65.7200469970703125,65.7200469970703125,1237681478333021299436036260772704189939039726424468025791236592392221839972793647760404305.069112678,0.4835950338104364542144764339636365461226890386503558396710241559827473710343276447133329329080310481,1321653071860432158611891784370976926056050972603922050910836685759935208513140882829336714.924216897,0.5164049661895635457855235660363634538773109613496441603289758440172526289656723552866670670919689519
+65.7200469970703125,67.7200469970703125,992294582857096673020436107615735633555491858668260413925488485824429265079937609704722392.1639511719,0.3877158548037776851676686582318276647538773116889477970463296988557626867776214215469071342508886513,1567039967336356785027491937527945482439598840360129662776584792327727783405996920885018627.829378403,0.6122841451962223148323313417681723352461226883110522029536703011442373132223785784530928657491113487
+65.7200469970703125,131.440093994140625,213300886950808367827748848163362418229652992448625125251021922855379214016709603.3541253196642483556,0.8334232307952295928887744983382544562611331340725414464157591127627065655955495457938285035431948473e-10,2559334549980152571097119677315932267831728280798737084253448152901135125630555316573031416.639204255,0.9999999999166576769204770407111225501661745543738866865927458553584240887237293434404450454206171496
+65.7200469970703125,6572.0048828125,0.7951110665801895186597449581938208498866077147902395876490462398033742287094703422089437391907177183e-2607,0.3106710166203512300411342022708193644206022181944519266725115058420432680872285730281665183332651508e-2697,2559334550193453458047928045143681115995090699028390076702073278152157048485934530589741019.993329575,1.0
+65.7462005615234375,0.65746200084686279296875,2854841366740655335749682711589405018617970255237657756653413289530476724094493897679244812.123014988,1.0,0.8444683280417830620909648362271240036135499334739793886760751528289379268614864246438558387232915288e-14,0.2958021898799597230685257872041095903545541336863801310149315080230457436391504684629229689145194224e-104
+65.7462005615234375,32.87310028076171875,2854840532976636690616123908905006010146740361518023308401225712007615174805725753744721184.244032938,0.9999997079473387353098914999058508099490747926743722046001226817425283756021315976509474394410258526,833764018645133558802684399008471229893719634448252187577522861549288768143934523627.8789820501151716,0.2920526612646901085000941491900509252073256277953998773182574716243978684023490525605589741474447032e-6
+65.7462005615234375,63.7462005615234375,1662589901978145349245492139292009919605672053551106941400828015313014944751529712675425485.872785929,0.5823755818265685614824870041971820963274359402029669131075613669423048624582759616275806290001338387,1192251464762509986504190572297395099012298201686550815252585274217461779342964185003819326.250229059,0.4176244181734314385175129958028179036725640597970330868924386330576951375417240383724193709998661613
+65.7462005615234375,65.7462005615234375,1380596424766725998343913761207864541236223769538290252632704764663009433071898936669504936.275679433,0.48359829756248051328495419810768024737755427516852003106702603082970574141263350210054939794092891,1474244941973929337405768950381540477381746485699367504020708524867467291022594961009739875.847335555,0.51640170243751948671504580189231975262244572483147996893297396917029425858736649789945060205907109
... 7438 lines suppressed ...