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 2022/01/21 15:04:09 UTC

[commons-statistics] branch master updated: STATISTICS-52: Add a high precision PDF to the normal distribution

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-statistics.git


The following commit(s) were added to refs/heads/master by this push:
     new f931dd5  STATISTICS-52: Add a high precision PDF to the normal distribution
f931dd5 is described below

commit f931dd5c6946f505495262beb5ad36603b4ab5bc
Author: aherbert <ah...@apache.org>
AuthorDate: Fri Jan 21 15:01:00 2022 +0000

    STATISTICS-52: Add a high precision PDF to the normal distribution
    
    Exploit information in the round-off from x*x to increase the precision
    of exp(-0.5*x*x) when x is large.
    
    Add a benchmark to demonstrate this has minor impact on the runtime
    performance. Accuracy is increased to within 3 ULP (down from hundreds)
    for large x values.
---
 .../statistics/distribution/ExtendedPrecision.java |   90 ++
 .../distribution/NormalDistribution.java           |   10 +-
 .../distribution/ExtendedPrecisionTest.java        |   44 +
 .../distribution/NormalDistributionTest.java       |   32 +-
 .../commons/statistics/distribution/expmhxx.csv    | 1038 +++++++++++++++++++
 .../commons/statistics/distribution/normpdf2.csv   | 1039 ++++++++++++++++++++
 commons-statistics-examples/examples-jmh/pom.xml   |    5 +
 .../jmh/distribution/NormalPDFPerformance.java     |  204 ++++
 8 files changed, 2454 insertions(+), 8 deletions(-)

diff --git a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/ExtendedPrecision.java b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/ExtendedPrecision.java
index 4fdbec2..fd7c401 100644
--- a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/ExtendedPrecision.java
+++ b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/ExtendedPrecision.java
@@ -54,6 +54,12 @@ final class ExtendedPrecision {
     private static final double SQRT2PI_L;
     /** Round-off from sqrt(2 pi) as a double. */
     private static final double SQRT2PI_R;
+    /** X-value where {@code exp(-0.5*x*x)} cannot increase accuracy using the round-off
+     * from x squared. */
+    private static final int EXP_M_HALF_XX_MIN_VALUE = 2;
+    /** Approximate x-value where {@code exp(-0.5*x*x) == 0}. This is above
+     * {@code -2 * ln(2^-1074)} due to rounding performed within the exp function. */
+    private static final int EXP_M_HALF_XX_MAX_VALUE = 1491;
 
     static {
         // Initialise constants
@@ -180,6 +186,72 @@ final class ExtendedPrecision {
     }
 
     /**
+     * Compute {@code exp(-0.5*x*x)} with high accuracy. This is performed using information in the
+     * round-off from {@code x*x}.
+     *
+     * <p>This is accurate at large x to 1 ulp until exp(-0.5*x*x) is close to sub-normal. For very
+     * small exp(-0.5*x*x) the adjustment is sub-normal and bits can be lost in the adjustment for a
+     * max observed error of {@code < 2} ulp.
+     *
+     * <p>At small x the accuracy cannot be improved over using exp(-0.5*x*x). This occurs at
+     * {@code x <= sqrt(2)}.
+     *
+     * @param x Value
+     * @return exp(-0.5*x*x)
+     * @see <a href="https://issues.apache.org/jira/browse/STATISTICS-52">STATISTICS-52</a>
+     */
+    static double expmhxx(double x) {
+        final double z = x * x;
+        if (z <= EXP_M_HALF_XX_MIN_VALUE) {
+            return Math.exp(-0.5 * z);
+        } else if (z >= EXP_M_HALF_XX_MAX_VALUE) {
+            // exp(-745.5) == 0
+            return 0;
+        }
+        // Split the number
+        final double hx = highPartUnscaled(x);
+        final double lx = x - hx;
+        // Compute the round-off
+        final double zz = squareLow(hx, lx, z);
+        return expxx(-0.5 * z, -0.5 * zz);
+    }
+
+    /**
+     * Compute {@code exp(a+b)} with high accuracy assuming {@code a+b = a}.
+     *
+     * <p>This is accurate at large positive a to 1 ulp. If a is negative and exp(a) is close to
+     * sub-normal a bit of precision may be lost when adjusting result as the adjustment is sub-normal
+     * (max observed error {@code < 2} ulp). For the use case of multiplication of a number less than
+     * 1 by exp(-x*x), a = -x*x, the result will be sub-normal and the rounding error is lost.
+     *
+     * <p>At small |a| the accuracy cannot be improved over using exp(a) as the round-off is too small
+     * to create terms that can adjust the standard result by more than 0.5 ulp. This occurs at
+     * {@code |a| <= 1}.
+     *
+     * @param a High bits of a split number
+     * @param b Low bits of a split number
+     * @return exp(a+b)
+     * @see <a href="https://issues.apache.org/jira/projects/NUMBERS/issues/NUMBERS-177">
+     * Numbers-177: Accurate scaling by exp(z*z)</a>
+     */
+    private static double expxx(double a, double b) {
+        // exp(a+b) = exp(a) * exp(b)
+        // = exp(a) * (exp(b) - 1) + exp(a)
+        // Assuming:
+        // 1. -746 < a < 710 for no under/overflow of exp(a)
+        // 2. a+b = a
+        // As b -> 0 then exp(b) -> 1; expm1(b) -> b
+        // The round-off b is limited to ~ 0.5 * ulp(746) ~ 5.68e-14
+        // and we can use an approximation for expm1 (x/1! + x^2/2! + ...)
+        // The second term is required for the expm1 result but the
+        // bits are not significant to change the product with exp(a)
+
+        final double ea = Math.exp(a);
+        // b ~ expm1(b)
+        return ea * b + ea;
+    }
+
+    /**
      * Implement Dekker's method to split a value into two parts. Multiplying by (2^s + 1) creates
      * a big value from which to derive the two split parts.
      * <pre>
@@ -238,4 +310,22 @@ final class ExtendedPrecision {
         // low = lx * ly - err3
         return lx * ly - (((xy - hx * hy) - lx * hy) - hx * ly);
     }
+
+    /**
+     * Compute the low part of the double length number {@code (z,zz)} for the exact
+     * square of {@code x} using Dekker's mult12 algorithm. The standard precision product
+     * {@code x*x} must be provided. The number {@code x} should already be split into low
+     * and high parts.
+     *
+     * <p>Note: This is a specialisation of
+     * {@link #productLow(double, double, double, double, double)}.
+     *
+     * @param hx High part of factor.
+     * @param lx Low part of factor.
+     * @param xx Square of the factor.
+     * @return <code>lx * lx - (((xx - hx * hx) - lx * hx) - hx * lx)</code>
+     */
+    private static double squareLow(double hx, double lx, double xx) {
+        return lx * lx - ((xx - hx * hx) - 2 * lx * hx);
+    }
 }
diff --git a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/NormalDistribution.java b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/NormalDistribution.java
index af8dae7..883757e 100644
--- a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/NormalDistribution.java
+++ b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/NormalDistribution.java
@@ -110,9 +110,8 @@ public final class NormalDistribution extends AbstractContinuousDistribution {
     /** {@inheritDoc} */
     @Override
     public double density(double x) {
-        final double x0 = x - mean;
-        final double x1 = x0 / standardDeviation;
-        return Math.exp(-0.5 * x1 * x1) / sdSqrt2pi;
+        final double z = (x - mean) / standardDeviation;
+        return ExtendedPrecision.expmhxx(z) / sdSqrt2pi;
     }
 
     /** {@inheritDoc} */
@@ -131,9 +130,8 @@ public final class NormalDistribution extends AbstractContinuousDistribution {
     /** {@inheritDoc} */
     @Override
     public double logDensity(double x) {
-        final double x0 = x - mean;
-        final double x1 = x0 / standardDeviation;
-        return -0.5 * x1 * x1 - logStandardDeviationPlusHalfLog2Pi;
+        final double z = (x - mean) / standardDeviation;
+        return -0.5 * z * z - logStandardDeviationPlusHalfLog2Pi;
     }
 
     /** {@inheritDoc} */
diff --git a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ExtendedPrecisionTest.java b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ExtendedPrecisionTest.java
index 9378cdf..6784249 100644
--- a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ExtendedPrecisionTest.java
+++ b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ExtendedPrecisionTest.java
@@ -42,6 +42,10 @@ class ExtendedPrecisionTest {
     private static final RMS SQRT2XX_RMS2 = new RMS();
     /** The sum of the squared ULP error for the first computation for x * sqrt(2 pi). */
     private static final RMS XSQRT2PI_RMS = new RMS();
+    /** The sum of the squared ULP error for the first computation for exp(-0.5*x*x). */
+    private static final RMS EXPMHXX_RMS1 = new RMS();
+    /** The sum of the squared ULP error for the second computation for exp(-0.5*x*x). */
+    private static final RMS EXPMHXX_RMS2 = new RMS();
 
     /**
      * Class to compute the root mean squared error (RMS).
@@ -186,6 +190,46 @@ class ExtendedPrecisionTest {
         assertPrecision(XSQRT2PI_RMS, 1.2, 0.6);
     }
 
+    @ParameterizedTest
+    @ValueSource(doubles = {0, 0.5, 1, 2, 3, 4, 5, 38.5, Double.MAX_VALUE, Double.POSITIVE_INFINITY, Double.NaN})
+    void testExpmhxxEdgeCases(double x) {
+        final double expected = Math.exp(-0.5 * x * x);
+        Assertions.assertEquals(expected, ExtendedPrecision.expmhxx(x));
+        Assertions.assertEquals(expected, ExtendedPrecision.expmhxx(-x));
+    }
+
+    /**
+     * Test the extended precision {@code exp(-0.5 * x * x)}. The expected result
+     * is an extended precision computation. For comparison ulp errors are collected for
+     * the standard precision computation.
+     *
+     * @param x Value x
+     * @param expected Expected result of {@code exp(-0.5 * x * x)}.
+     */
+    @ParameterizedTest
+    @Order(1)
+    @CsvFileSource(resources = "expmhxx.csv")
+    void testExpmhxx(double x, BigDecimal expected) {
+        final double e = expected.doubleValue();
+        final double actual = ExtendedPrecision.expmhxx(x);
+        Assertions.assertEquals(e, actual, Math.ulp(e) * 2);
+        // Compute errors
+        addError(actual, expected, e, EXPMHXX_RMS1);
+        addError(Math.exp(-0.5 * x * x), expected, e, EXPMHXX_RMS2);
+    }
+
+    @Test
+    void testExpmhxxHighPrecision() {
+        // Typical result:   max    0.9727  rms   0.3481
+        assertPrecision(EXPMHXX_RMS1, 1.5, 0.5);
+    }
+
+    @Test
+    void testExpmhxxStandardPrecision() {
+        // Typical result:   max   385.7193  rms   50.7769
+        assertPrecision(EXPMHXX_RMS2, 400, 60);
+    }
+
     private static void assertPrecision(RMS rms, double maxError, double rmsError) {
         Assertions.assertTrue(rms.getMax() < maxError, () -> "max error: " + rms.getMax());
         Assertions.assertTrue(rms.getRMS() < rmsError, () -> "rms error: " + rms.getRMS());
diff --git a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/NormalDistributionTest.java b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/NormalDistributionTest.java
index 4f8e42b..cf5c608 100644
--- a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/NormalDistributionTest.java
+++ b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/NormalDistributionTest.java
@@ -177,13 +177,41 @@ class NormalDistributionTest extends BaseContinuousDistributionTest {
         }
     }
 
+    /**
+     * Test the PDF using high-accuracy uniform x data.
+     *
+     * <p>This dataset uses uniformly spaced machine representable x values that have no
+     * round-off component when squared. If the density is implemented using
+     * {@code exp(logDensity(x))} the test will fail. Using the log density requires a
+     * tolerance of approximately 53 ULP to pass the test of larger x values.
+     */
     @ParameterizedTest
     @CsvFileSource(resources = "normpdf.csv")
     void testPDF(double x, BigDecimal expected) {
+        assertPDF(x, expected, 2);
+    }
+
+    /**
+     * Test the PDF using high-accuracy random x data.
+     *
+     * <p>This dataset uses random x values with full usage of the 52-bit mantissa to ensure
+     * that there is a round-off component when squared. It requires a high precision exponential
+     * function using the round-off to compute {@code exp(-0.5*x*x)} accurately.
+     * Using a standard precision computation requires a tolerance of approximately 383 ULP
+     * to pass the test of larger x values.
+     *
+     * <p>See STATISTICS-52.
+     */
+    @ParameterizedTest
+    @CsvFileSource(resources = "normpdf2.csv")
+    void testPDF2(double x, BigDecimal expected) {
+        assertPDF(x, expected, 3);
+    }
+
+    private static void assertPDF(double x, BigDecimal expected, int ulpTolerance) {
         final double e = expected.doubleValue();
         final double a = STANDARD_NORMAL.density(x);
-        // Require high precision. Currently this does not work at 1 ULP.
-        Assertions.assertEquals(e, a, Math.ulp(e) * 2,
+        Assertions.assertEquals(e, a, Math.ulp(e) * ulpTolerance,
             () -> "ULP error: " + expected.subtract(new BigDecimal(a)).doubleValue() / Math.ulp(e));
     }
 }
diff --git a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/expmhxx.csv b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/expmhxx.csv
new file mode 100644
index 0000000..1e99112
--- /dev/null
+++ b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/expmhxx.csv
@@ -0,0 +1,1038 @@
+# 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.
+
+# High-precision test data for the normal distribution PDF.
+# Computed using using gcc 128-bit quadmath using Boost multiprecision.
+#
+# #include <boost/multiprecision/float128.hpp>
+# #include <iostream>
+# #include <limits>
+#
+# template <class T>
+# static T expmhxx(T x) {
+#    return exp(-0.5*x*x);
+# }
+#
+# // for x in ...
+#   std::cout.precision(std::numeric_limits<double>::max_digits10);
+#   std::cout << x << ',';
+#   std::cout.precision(std::numeric_limits<boost::multiprecision::float128>::max_digits10);
+#   std::cout << expmhxx((boost::multiprecision::float128) x) << std::endl;
+#
+# Random x values are approximately log-uniformly distributed in [1, 39).
+# This was done by mapping 1.0 and 39.0 to their raw long bits, sampling uniformly
+# in the range and mapping the bits back to a double.
+# Randomness uses the entire 52-bit mantissa and ensures x*x has a round-off component.
+
+1.0101902333655071,0.600350184134506140735949100984456163
+1.0154120431184623,0.597183520291586769941102228885691073
+1.0223549740899618,0.592973928415615713003074162178741029
+1.0228679748822307,0.592662935578931737987961273078871151
+1.0318127129220211,0.587241730503184128444956550009621773
+1.0458825032581571,0.57872081337276642053797892848751338
+1.0670967957042041,0.565894402785801451721903836978074707
+1.0792202567227871,0.558579580309306699436049530401513721
+1.0877499046412282,0.55344111035105972058869505746381021
+1.0926250030333955,0.550507500169084281496389377345545386
+1.1155860720241342,0.536726759322699111187853437756310151
+1.1170246538841311,0.535865523333506223781465540354237069
+1.1275945413640223,0.529546274541737802766950223995265179
+1.1329570121051589,0.526346364326609435551047609034560663
+1.136663461472698,0.524137139487582909879115151969076691
+1.1436347957206849,0.519987621243203524563198780555253661
+1.1449887664343363,0.519182594611141123169056677738591851
+1.1494451080377781,0.516535103682812262962213585289903884
+1.1521249483927241,0.514944604410931344353878486204714789
+1.1558455651639403,0.512738410327401034170119630468742329
+1.1628189416787347,0.508609907843553920847576756834701689
+1.171006940457437,0.503773444275356469369952594405328569
+1.1714749199456671,0.503497393282855342493190173500162038
+1.1810465986493097,0.497860414163844003614424852565243978
+1.18107210863277,0.497845414450681881603750654130707809
+1.1833486165183906,0.496507358874130634263548809574970811
+1.1850468970506409,0.495509836321356329736946910900946207
+1.1874852978720216,0.494078599411016680820997750100517133
+1.1915794981494192,0.491678195731900306607494822203706488
+1.1991507432106931,0.487248386290646827808012701494254518
+1.2011234870792109,0.486096159496599585464480217183690709
+1.2139665041835705,0.478615682479968044832959250124332295
+1.2201928962627848,0.475002433384879766409195100389580077
+1.2211785165696809,0.474431286114270952583916349736417883
+1.2294522724383585,0.469645818931161909297661696853499644
+1.2365838271336791,0.465534169652624932300338205765020387
+1.2439771428225732,0.461284833852039294614294486689571031
+1.2501945077778356,0.457722051456977335372928324693741948
+1.261300329363394,0.451382916716778571525143614185064572
+1.2636665363321495,0.45003651389404139066789519876278496
+1.2645202157972184,0.449551127684747195813467392744009089
+1.2812170216399226,0.440097701317560593943661362712627972
+1.2830354699387254,0.439072817413608048430772796743595616
+1.2944238126491805,0.432675825023076906482423656507440185
+1.29530289124021,0.432183596109190517167032659950802693
+1.3217346576000177,0.417491433881625437312811824018134885
+1.3220672421616066,0.41730792668303799180179379204479396
+1.3263225285980107,0.414963080676833206460427573035159882
+1.3301545481976331,0.412856352602075323999745677867309153
+1.330811137325443,0.412495846802889336537691391668777091
+1.3331953131937007,0.411187949253467546520754670347860767
+1.3335287753133844,0.41100516514816007140095006655161852
+1.335766578996741,0.409779455763657432032190042222114624
+1.3391238991231713,0.407943575860366167518822026866596338
+1.3425677050205918,0.406064192902153849972020428724621396
+1.3441288756349532,0.405213489109566856768144681521550895
+1.3523621595678113,0.40074029482495939431241282287428284
+1.3621111624675868,0.395472743994814823133352592011042424
+1.3645901967263934,0.394138384166792940066767578249989019
+1.3705986558986112,0.390912965745590670417866924161000655
+1.3714785541398387,0.390441662669877338091266687524440484
+1.3740530658254668,0.389064198664911449616704919494450254
+1.3754670326930667,0.388308644909131828457618170194458096
+1.3785866179038191,0.386644144769595812532986040314775218
+1.3806962741622946,0.385520426349594417363130589658504583
+1.3874045090426004,0.381957613538283022343559431344049593
+1.4090004863952246,0.37059658300959116033880192745862951
+1.4206577211593079,0.364534464079476456280241607398510857
+1.4318931984485523,0.358739397668747586764704828287862189
+1.4350433284052229,0.357123121967069574922930877624607025
+1.4367849558003136,0.356231134494265815528594217294216829
+1.4395549691590861,0.354814821700440320988955885130059942
+1.4516976316054393,0.348640837079162443637178896206329244
+1.4521468985902604,0.348413492560316735728187949741042547
+1.4654126394402409,0.341735886516234708309013025198685608
+1.4680961155885335,0.340393457568013180584147416569575602
+1.4734040039276277,0.337746495100933022631526331746088621
+1.4750629442962997,0.33692148943124354329184791914198097
+1.4753787076246656,0.336764580996484700673678445667205623
+1.4777178172788594,0.335603466979815321948905646414488043
+1.4797371154694738,0.33460285247061851114930094909292027
+1.4886862271207928,0.330187916910860313552679316689148951
+1.4895183606714608,0.329779023892421604968838881189910558
+1.489967668792781,0.329558358963641703706652781367671985
+1.496323880112687,0.326445398475415183872294831956169073
+1.499729215157886,0.324784348685912355778744563048839019
+1.5054698157686819,0.32199486425122065741697818984784388
+1.505612351281393,0.321925773798128281225346351541181481
+1.5057848892543151,0.321842151503500568745522852738024205
+1.5093165507038715,0.320133166284228476005682446043257825
+1.518261494529447,0.315827537152631833364095495067662138
+1.5239776121907407,0.313093352776115132743222239839462235
+1.5248295105405822,0.312687022096919281326652212171086623
+1.530293833027196,0.31008785832653360550645473397575231
+1.5307486552727578,0.309872076596365173474892879092939736
+1.5424060662209529,0.304370905753913551247455187252592206
+1.5535165222261687,0.299180923755870064625117639577703559
+1.5565924556037238,0.297753285488547765857248606976441768
+1.5573599054882417,0.297397712213175780643154898321980994
+1.559328756939502,0.296486650220553238498893306821376719
+1.5623788579691995,0.29507850248798634097522451499862674
+1.5797011386265811,0.287156520671288657578818740465903298
+1.5920582096025031,0.281583944559753382654317519832670327
+1.5921741910578378,0.281531953208250369010519401369695155
+1.6127172776916003,0.272415035757484635331126281266791245
+1.6161110378028547,0.270926572973162712631547746672467247
+1.621285222462221,0.268666918906213087385227784511181236
+1.6236515201707404,0.267637418782860605905600015015502129
+1.6277486699524164,0.265860680144327713281148639631993478
+1.6326439501208454,0.263747483905249953506464296760569909
+1.6375903759315587,0.261622901395027953132692232890056444
+1.6398254859163497,0.260666409903489749058547804253124322
+1.660161204490114,0.252065170339445803257704374875846819
+1.6738099283123973,0.246394877215951324448972575571519527
+1.6947416568891662,0.237859612736957367683711575572720886
+1.7003302244177352,0.235613757361413646283664867723508624
+1.7042941015944886,0.234029245102095997698657411815564748
+1.7134932440157999,0.230378988827511082051597963707567228
+1.7143810708102412,0.23002869246856457547199047228042932
+1.7144303988506004,0.230009240161313247203976074909300007
+1.7149256283622174,0.229814008612296129002850025703203031
+1.7273972800486024,0.224933453766896194583662697224897696
+1.735360659717643,0.221853436817979302688096913083263076
+1.7380015938765236,0.22083824463983620913705319587416522
+1.7407554902631071,0.219782943867933265960363218110711722
+1.7489532461212332,0.216661569903620173302696903605698696
+1.7614109110674925,0.211975580171761342270118333977110943
+1.7642668120134641,0.210911072437586186327115769646183244
+1.7672791182940439,0.209792204405006177774516956656423697
+1.7763310280843039,0.20645434911789986562367758455939375
+1.7775262115928623,0.206016355760264129740617077783832942
+1.7841907516750775,0.20358568235876274373366203307983926
+1.7843334660962615,0.203533847913861011024403226781883714
+1.7844499206388535,0.20349155786883996153999729125376561
+1.7973069975919096,0.198859601809853597485034794545358583
+1.805953135138652,0.195785939270265290774851942093794337
+1.8065583812509578,0.195572017303912072779396328344635528
+1.8105430376047529,0.194167702878850238510581365597332233
+1.8311693806548917,0.187010474500607204388736618503876347
+1.8349084573382153,0.18573311088788596080872153620770951
+1.8370693975623844,0.184997681626661485751956347535862105
+1.8472502097452803,0.181560441680075174430865453384349313
+1.852265847226181,0.179883765409774867653943606752069726
+1.8585211514618067,0.177808093762341405778910740109014374
+1.8675305512311511,0.174848537487609779639428692564384952
+1.8700898475644754,0.174014261761164506793896542301201206
+1.8707560539233616,0.173797559779168055238215567708148283
+1.8714376226768064,0.173576060296139766120811599066640245
+1.8727438157479044,0.173152131216505683899635584545606348
+1.8899932991745776,0.167623089407375260021677702762910234
+1.9011152770711115,0.164126197789046185417054796627507985
+1.9018066313085447,0.163910582018609779950340191599215043
+1.9079890359843825,0.161991554031269818461736817010209638
+1.9092481678015192,0.16160272294551598944868532110267068
+1.9173550382448088,0.159115460863627495691767286132554418
+1.9304040491609511,0.155170635015631881366283188355108871
+1.9332138560612464,0.15433064902627175836000343434810318
+1.933402102366097,0.154274492445061341014038535301510212
+1.9368545632235192,0.153247226909014143857463128254051784
+1.9409938557737423,0.152022221601325352370747162233615358
+1.9467064425972813,0.150343442285376505661496736602296369
+1.9494159451293553,0.1495519786110177436562657148942685
+1.9667080951368046,0.144573049580679299181897946093796054
+1.9686326441299657,0.144026604389339312118935127123560556
+1.9741158078398984,0.142478151849627883703684113232764194
+1.9788777105379254,0.141143454694662039564451261996323943
+1.9806968282147357,0.140636045595671281628192611320997462
+1.9851850363616275,0.139389958872050418209053107995836439
+1.9894454024590502,0.138214769251008207537180682374149342
+1.9948842718628614,0.136725279013131525702715976239391748
+1.9979175242176508,0.135899828907042171901955324441626575
+2.0193645484661475,0.13016966164992634233213779871299821
+2.0455441682775946,0.123424521439000622448601705004687564
+2.0472054053629543,0.123005650471320623912518047939203738
+2.0651122455141802,0.118559030674955407181263571770460785
+2.0675578641320524,0.117961407774643526140293999408087008
+2.0736119569532523,0.116491930553593368892717340932156899
+2.0737528407854064,0.116457902602282866319542940275035633
+2.0816997543585583,0.114550794571315305207813645463500993
+2.0853421738215787,0.113684752404637345767582096546531002
+2.086582823838774,0.113390922389321760937961963589263557
+2.0986548089347519,0.110562312434156368165204682303461404
+2.1062762371498809,0.108804803731488982501302556701084256
+2.1129471332005125,0.107284317694777381871023327648039548
+2.1131125780432423,0.107246818736735697736011767211373923
+2.1147472388313044,0.106876860672850438947774283764092342
+2.1209056464786391,0.105491976548351226929180373581036884
+2.1245432886133475,0.104680534782613517145668954774054312
+2.1352161753997803,0.10232778315088795828859738429189765
+2.1389827669972754,0.101507393706362392129734203664306854
+2.140954416722002,0.10108000901850149456371970091497625
+2.1414160226094059,0.100980152541232657573065410805219359
+2.1494060646207926,0.0992639102766750260397878089732778646
+2.1578908537590147,0.0974665079331887016366224509854302084
+2.1840381759031016,0.0920879318980302222533362700285237263
+2.185742690121689,0.0917456179720907745505601933283196781
+2.1896420807530506,0.0909662954355212094360612717468359273
+2.193191105698912,0.0902615589412977280744728994664968552
+2.2082352815217829,0.0873221147432534504278474006720900001
+2.2114757850639597,0.0866990308063627340189962803321196851
+2.2575209780557151,0.0782223017726589519128504324088013307
+2.2638736766283962,0.0771069382749730250981917191724335476
+2.2664620295056439,0.0766561788575101725228303741101321607
+2.2948045456629194,0.0718579553174039737970781540444732337
+2.3154459411738113,0.0685189483820954759856560084444192543
+2.3241110398091887,0.0671553919136690724419187354553487255
+2.3374421603491853,0.0651008334987778341842447317344719363
+2.3497461430524411,0.0632504226998718864534184336555887132
+2.3532210141250487,0.0627357028059869459566259116553905264
+2.3555035262983082,0.0623994741202800156693700251494198552
+2.3597474655441717,0.0617782418230947197020157280321000634
+2.3698165057145428,0.0603246098247417950068739028597116858
+2.4026556013537435,0.055777932130071423766825273902877593
+2.4050574559940969,0.0554568142183195061952994341455896212
+2.4188832680793637,0.0536379664534315550661337378340039625
+2.4242055619225993,0.052951106862827315422961893522228654
+2.4367258453130991,0.0513640677185831804961938236104456999
+2.4469475557520863,0.050097900883573407923710449869258885
+2.4486057041045908,0.0498949767768312911606232721582894715
+2.4641001469165862,0.0480316664916342117457027258669301605
+2.4669196085926295,0.047698936466823967764131649065668627
+2.4741030771170291,0.0468598982109362331968926320357826837
+2.4988005578662977,0.0440688491768538778291325829366410429
+2.5190160748816193,0.0418894617700405377016207263465877951
+2.5191380083750521,0.0418765969845379277767671922965866688
+2.5290967955141888,0.0408370590192448520131069457778355813
+2.5313239509132059,0.0406075823576690038273510620096450357
+2.5399470873057166,0.0397293288070190976146945315225950458
+2.5412429878594138,0.0395987407023790539860191850916561019
+2.5456064056800942,0.0391617025180106922420468390862899863
+2.5563899640040924,0.0380990921952214233249909608428358373
+2.5664926158953465,0.0371258356239755604328942595982327421
+2.5672989624687861,0.0370490717569782389985366621334474513
+2.5762066539172843,0.0362099852755954638138036555092618849
+2.5901585742329489,0.0349282011627480375864699190758420544
+2.5918549827275315,0.0347750144465069804216160652746614162
+2.59228456964397,0.0347363133492799501976835675943412644
+2.638725196595221,0.0307632239021837937958633031862939301
+2.6473171250963987,0.0300725049824638070657469502740378219
+2.6484467603926953,0.0299826882769326713406501620368930234
+2.6514799223712107,0.029742660319787223011874414942816518
+2.6542344625245993,0.0295261109247729904134304677354289527
+2.6597620883102513,0.0290956330462153979742782944572239114
+2.6714442049009497,0.0282035599413824322509996010762024567
+2.6767885553422723,0.0278033576999362711376960285000452957
+2.6874936561697291,0.0270164030796359492135673397892995852
+2.7057695615877679,0.0257172203173215779950331927368235275
+2.7087094782617975,0.0255133478463430364772445805009367604
+2.7228492961285387,0.02455219192252770724085090780774716
+2.7457119298147776,0.0230643532943464686598144937123596291
+2.7464287062494344,0.0230189999508090478944498618882984816
+2.7621126645816432,0.0220457996803689552582077778776804767
+2.7673809332869532,0.0217270203640519943157900305137193818
+2.7723238924181342,0.0214315770330151644722890964315259091
+2.7867965697353023,0.0205865452342966923772555352521603817
+2.7928822936972577,0.0202399733103198603376338328085319316
+2.7980409329465687,0.0199501916091791892868067713497271541
+2.8013694431595288,0.0197651423816339255587134029549090075
+2.8119858488681073,0.0191848915698706701908616224844216374
+2.8341191678695137,0.0180228347321686844128351456214855749
+2.8430395361688561,0.0175722047283296214427318974965626183
+2.8447931914708149,0.0174847859385304302223927212310946863
+2.8731547457121476,0.0161229896586533418370430834969296242
+2.8864554140285348,0.0155171032394982153563922407156311946
+2.8865299262354687,0.0155137661962715053098568548236944379
+2.8869757163457179,0.015493814590415145354554255061590762
+2.8959316075792016,0.0150977441873407224882039289091166103
+2.8998151990993355,0.0149287843438957767379808967333342752
+2.905823001960703,0.0146706899091380292463398167601875615
+2.9265388818939417,0.0138106545810975268633590775839614733
+2.9560719053310236,0.0126616118158297097676420574364454666
+2.9656799634853095,0.0123064861920337626248369025352520346
+2.9763577616730936,0.0119222036706135239904305222535020084
+2.9946316807756306,0.0112891922188771189513993838581871004
+3.0235991586631208,0.0103468212077144549722047849551703637
+3.0468355712532769,0.00964222392716985276115512182900989074
+3.0876182822027545,0.00850846840677666271814015778877892145
+3.0886616592419531,0.00848109743848840666051578135685356384
+3.0975210606122903,0.00825184588135032747181402205323103876
+3.0993909696936157,0.00820417431439616096430576664318100418
+3.1002016484001342,0.00818358360835684635708985124605266835
+3.1278746590304407,0.00750789653263066573495893124811468063
+3.1375777578094257,0.00728311158075648051687833067464275179
+3.1597663736251702,0.00679164724644751437327726116772618243
+3.1772279061763626,0.00642609275609526506347201324667183716
+3.1840600503467766,0.00628795612090498126616874637672635407
+3.1879471532793131,0.00621056424751503670319672038890588397
+3.1903205543057127,0.00616373336290971153526973071997328112
+3.1955044718149943,0.00606255218636842865299711016434230657
+3.1980356874469167,0.00601369368665816373955233960449288827
+3.2083230755761893,0.0058187577872474568902055076445182762
+3.212858038769093,0.00573465097713999371022478710668021756
+3.2162281497062897,0.00567286070208098067011130895957943682
+3.2237752588879416,0.00553666214939096122417158028501262639
+3.2249685582766547,0.00551539999175562434230277373029842959
+3.2294563956397995,0.00543609500593178743975996936236562491
+3.2457098357991909,0.00515743369517845710111162686728427366
+3.250611649962484,0.00507596791822855688053389335342856949
+3.2963194866410852,0.00437057334170864732872582589571452508
+3.3014209551127212,0.00429763605790340700449115185569510264
+3.3167214303046473,0.00408546174363253199376995423199428801
+3.3216893095809761,0.0040186472631191342199568191183900565
+3.3244050397428722,0.00398254413449340909683362611478857516
+3.3249771081503363,0.00397497673047358171405776762142011627
+3.3268791518098917,0.00394991015706880108424904001019877939
+3.3335542317690843,0.00386307450726949535501351133349870085
+3.3431963543510905,0.00374070593806825089365741830044426818
+3.3554865603786537,0.00358984939562652127489938626089177513
+3.3595310200155839,0.00354143120896824880838332059294086368
+3.3615363341895188,0.00351764600016533899520605608014414272
+3.379934257678749,0.00330612723871202902391631450582269347
+3.385600447027814,0.00324336083041324166334832620120632349
+3.3889826998182553,0.00320641473882884430667222014063963821
+3.3964087176409414,0.00312664076546234696275119725243278551
+3.3970640416982043,0.00311968871896840152423708578539195765
+3.4025640367224992,0.00306189580114131412804353920447612836
+3.421377704497611,0.00287152308477978953156663456253638057
+3.4433670460243353,0.00266277010069051990345126906371800604
+3.451351816955623,0.00259047329080814353880312011259574567
+3.4683759249850015,0.00244229824693832684703970499474684859
+3.4684742910620447,0.0024414651370532395299569720626658312
+3.4898703710132102,0.00226632069146206568781529222551282162
+3.4971840519639112,0.00220914846721537985394024082822256809
+3.5000434184040734,0.00218715872057163576748427976769351038
+3.5035657391496411,0.00216034695197302768642008344681410147
+3.5098971524021887,0.002112910263065445845841407484609688
+3.5197282533609231,0.00204114676624081234040298620165124078
+3.5310565324828045,0.00196123653826603783052549338192979487
+3.5369422768244227,0.00192086372986529645773585825202949375
+3.5390859070496408,0.00190635063143926311786601964627658337
+3.554147718417572,0.00180718841704907231249493786284636121
+3.5595955104116692,0.00177250744573252292273650111168055046
+3.5597208339395974,0.00177171689069952241333160973282225688
+3.5735048505454596,0.00168672169660750883461125209634005994
+3.5831909519576137,0.00162926106860217263835341794915106914
+3.5938909639829006,0.00156788746327678331907818454985869019
+3.6153702541666077,0.00145107439137404740573816438047491576
+3.6615288503096042,0.00122673788243125175240656371438677838
+3.6719983321645335,0.00118053698060247899260729381722212672
+3.6758481769830222,0.00116395695556163571098599462651473923
+3.688988057829317,0.00110897795907719595831009646165916667
+3.702097277985871,0.00105653337860885131980758214309112643
+3.7202287614866907,0.000987779543823437524152356639261942465
+3.7255696158760068,0.000968333038937893043134514976196189834
+3.7266996530893319,0.000964264279402286816507658191967981148
+3.7272586326639536,0.000962257513678050458572084541096511826
+3.7283723371744886,0.000958270805174549827551314124323686818
+3.7325577593392727,0.000943424975630693295832367966001688487
+3.7325639744526646,0.000943403090039285546317432921392861938
+3.7365848457072839,0.000929342552521210937629505481358976402
+3.7504952940143377,0.000882186145229771359945136175352896223
+3.7532485080199995,0.000873120325716757312572151701875041943
+3.763494575199966,0.000840136895325334566569210998051545233
+3.7639223614825883,0.000838785310477693175714290545693080243
+3.7700315893043657,0.000819702496915652887483276977487265315
+3.8092474225831627,0.000706503103386810908951953967548120589
+3.836899799398469,0.000635626116062782498733642240553581626
+3.8371650616980117,0.000634979492189319454845392832458181881
+3.8613025068056794,0.000578640874262823561728092640073655519
+3.8695426721700303,0.000560500599499725672778077305683379739
+3.8729016257760596,0.00055325944824278907700228242370184315
+3.873731182325626,0.000551484603884497807012078358910632871
+3.8784284088366299,0.000541534673510861917848107252065166489
+3.8813372381141442,0.000535457317044721904614842034777060212
+3.8820402442042203,0.000533998125766616996618310989790345219
+3.8942749890377901,0.0005091902469572527609660495834008748
+3.9071271224768389,0.000484292654657272291091406323169825742
+3.9163123852919539,0.000467200830147244005666372150279049615
+3.9200107278037608,0.000460479576918992005385941210868577588
+3.920505730158478,0.000459586865686916844000473565708927775
+3.9250966182000573,0.000451384184339675738159814376137371392
+3.9546510620999689,0.000401769301281868833455683152806668563
+3.9547858497877901,0.000401555196286953520098834920233929104
+3.9557527402236192,0.00040002245661553326807048930916421275
+3.9619315814033169,0.00039035619003883471230857569556494563
+3.9721128281291307,0.000374904151863689820138073974100220731
+3.9784134927800139,0.000365630623432934838854306666382533445
+4.0125068629045719,0.000319068207178500277680651414974937029
+4.0434349586037781,0.000281695704347867708923417793011748295
+4.1048678811937611,0.000219321874404533915781895445020635509
+4.1429613152378035,0.000187437663384948449833525020898654064
+4.1516563275946092,0.000180798911366343353082035333913998035
+4.2025840626876834,0.000146153020137468180052770768070590734
+4.2276712086340327,0.00013148708499222196013453332778811358
+4.2541480156530405,0.000117521687194607657882582310131193846
+4.2572005296187845,0.000116004894394354691575988518067777866
+4.3099896996388853,9.25274125463827665201830083797466562e-05
+4.3123871374946656,9.15759924480371965525989575266392942e-05
+4.3599666285543739,7.45042415193392607860951300169512846e-05
+4.3950727430860335,6.38909899730693124813478235595814315e-05
+4.4358133615572326,5.3372224419018022845870910000111004e-05
+4.4698095575734138,4.58746105734672976702038591145285996e-05
+4.4795526208280787,4.39175809257546978357433853388757841e-05
+4.4893644739080631,4.20270672133421745290115574385021364e-05
+4.5179854217205211,3.69444126635542155758672095283079856e-05
+4.5708834782260555,2.90501216879855716427536321297548988e-05
+4.5881591413565888,2.68404050898843389283471172646700116e-05
+4.6046174488113323,2.48848611596278932961887897052356246e-05
+4.6333451300675677,2.17925247759129421824109644865107957e-05
+4.6386306565514213,2.12650179755107659810375238662333006e-05
+4.6987099549649454,1.60638746050920148583068423106585778e-05
+4.7042425608863043,1.56514180348535082097448462168323799e-05
+4.7786601521890599,1.09980076416205478951421650362796571e-05
+4.792048367931212,1.03154913269614285584213588508157233e-05
+4.8745233430514601,6.92419394169556271070950717127628414e-06
+4.8853611431185398,6.567503717471861889572736241774218e-06
+4.9030634773750306,6.02245405375743357408582936065940031e-06
+4.9074327751676075,5.89475125145928029690664230438500387e-06
+4.9090532757375298,5.84805148310695937208165810754543112e-06
+4.9222262153964076,5.48137016707940454864751880854986836e-06
+4.9302255638033703,5.26956861767462892396915250592032202e-06
+4.9695085379606114,4.33838866372291405426360230745171269e-06
+4.9779249598979236,4.16052848046137580561569364614789043e-06
+4.9860099651576677,3.99627577688101532467336159367358648e-06
+4.9981010324743806,3.76219887087650097415829346280145358e-06
+5.0075572470646934,3.58836176919706283237169726684297493e-06
+5.0151756599669506,3.45394517881411659765423671792399307e-06
+5.0247249555918403,3.29227929023282855442170610327150325e-06
+5.0277135398582304,3.24319462216844470924874240927348997e-06
+5.0592524685965996,2.76625048431718977552196682508836933e-06
+5.0710892218167061,2.60527336987752546859447759908267566e-06
+5.0714018433837813,2.60114629205170534737868460384100473e-06
+5.1071564188161531,2.16839489653069627141205582411148675e-06
+5.1468523652885292,1.76909111955386782966391091720146834e-06
+5.1563013696807891,1.68503890149467078356931971631897784e-06
+5.1855485405381918,1.44853648324682008206397582245461576e-06
+5.2096126185478893,1.27823310844639326912443789853702288e-06
+5.2103446371401532,1.27336746565164286144843409790754624e-06
+5.2310298271182951,1.14302017075723566409998110974668112e-06
+5.2315287271982758,1.14004090827447727718827786485988038e-06
+5.2718906546384403,9.22281323127758523958940029683571675e-07
+5.2784592338251644,8.90871231203427933243157921952156817e-07
+5.3086603010740436,7.59248205834218469161758449780282549e-07
+5.3108381941129501,7.50518780633238069914198623666364037e-07
+5.331111601344408,6.73771062918965301784626680174918234e-07
+5.3477491853102928,6.16498051769716975493027451238391402e-07
+5.3711713347958883,5.43769303835763787360053893268405004e-07
+5.3889145960937803,4.94261917944210595446674609871315814e-07
+5.3992961300801099,4.67344412943031756064271375045778822e-07
+5.4037597869451464,4.56211227034653392469958611005968881e-07
+5.4310289418540094,3.93557882385632806667341466672655935e-07
+5.4564327135564534,3.4272790695091686631049595581382335e-07
+5.4696230987766974,3.18899949484521442003221586545225879e-07
+5.4730191580982801,3.130292023687984823284013906363469e-07
+5.4830298795361623,2.96325202104883242052561151002026631e-07
+5.5167920219186568,2.46107573351022059890896119976748906e-07
+5.5416856215589263,2.14460607364005836373819102548399952e-07
+5.5557554843258643,1.98354599626710013845975340309321769e-07
+5.5643384144369756,1.89111131905734686702456317826406372e-07
+5.5920631917467363,1.62013629871430583588089867697687632e-07
+5.6157376416525135,1.41884196461648975057720015368182101e-07
+5.61848277042745,1.39713167329914717610637577807334894e-07
+5.6518485158588057,1.15765895982377582740186939989910745e-07
+5.6632722734588388,1.08520534732733877220656861365502922e-07
+5.7152127917916218,8.07563994580499844759896743455674551e-08
+5.770238628230171,5.88763171220781005547740054126001114e-08
+5.7730701656593739,5.79219415141701211342206478857177683e-08
+5.7919358564658712,5.19356449099366880475826098763462324e-08
+5.8077170513089884,4.73931243804071149960871181559885024e-08
+5.8142989679241612,4.56146799182499770336176354176046388e-08
+5.8228936211622688,4.3389643138244398611208603161719976e-08
+5.8238857977191625,4.31396679763348889403300488063098172e-08
+5.8451724972830075,3.81011732434386210105358762781220986e-08
+5.8568138436754138,3.55923823921336063152230756743512852e-08
+5.8651607802912649,3.38930625063427414978425309787965348e-08
+5.8745277747959284,3.20798320784396787388686680209407181e-08
+5.8773854850582543,3.15456520146621782960378012753073527e-08
+5.944755428162245,2.11831761037352970931076155640515034e-08
+5.9689387849134246,1.83412152687667098019148486025609344e-08
+5.9821770519387778,1.69462182455277219185934465606479382e-08
+5.9877830313060345,1.63870767631817525292284867782690804e-08
+6.0225216517726636,1.33015731995258587469100621458590761e-08
+6.024457904423671,1.31473381471017177349080389399074093e-08
+6.1288238227297551,6.97285749898037812405070552065998959e-09
+6.1293188091339408,6.95173525189846738582232453844055342e-09
+6.1444993380340547,6.33335289638175869429064695935107061e-09
+6.1689060081802891,5.44972510560751856277196010842151785e-09
+6.1980097799377116,4.55216626037809750944462588056831578e-09
+6.2154450892084689,4.08526667812362109818783141282546406e-09
+6.2883235067483847,2.59026341243868179129881781003858765e-09
+6.3118911162399458,2.23285515546772271032706817197991846e-09
+6.366628828615049,1.57819930427514271074338364106085985e-09
+6.3866346846835285,1.38918124211647279792199675174820038e-09
+6.3927073186320129,1.33631043025759379733250417468987568e-09
+6.4113952736513289,1.18562630150866671038316821890706083e-09
+6.4381126610132968,9.98619472802163692054160752013337089e-10
+6.4563914596670147,8.87604069335372577335143729989634866e-10
+6.4581978942008931,8.77310603518758126405533861028428488e-10
+6.4620396144386643,8.55805496528822342077830913108862778e-10
+6.5060200346418844,6.43468304101621514794083743574300626e-10
+6.5212681703537294,5.82629711358608919047433165472628475e-10
+6.5252189245639132,5.67806169263505481910987334521069437e-10
+6.632432688846996,2.80462332760136577627984635461962921e-10
+6.6342252702525775,2.77147165278232550586685537087683012e-10
+6.6423872202451344,2.62530462807917893963948785145126022e-10
+6.6563446174167522,2.39262023257941218739576192090466019e-10
+6.6794099714240227,2.05154290523454047771820336971316833e-10
+6.7073705318625585,1.70138258206059153458384519662612535e-10
+6.7477108966054944,1.29699462073204329990730967030544592e-10
+6.8230866023847065,7.77707754797109521353788221621525444e-11
+6.8407157325368404,6.89461144322860425500433110087489226e-11
+6.8997516904750293,4.59582980335083948637278594320412595e-11
+6.9263189367892499,3.82473435759417751208245813974537109e-11
+6.9375927273413467,3.53721465813512858621915842556272804e-11
+6.9743210806465781,2.73972830016321852713564742150717458e-11
+6.9940207304868434,2.38756264959049401182194048793876284e-11
+6.9988434355873537,2.30834612522211530535452006680462361e-11
+7.0136272701373175,2.08121588022756570112423537279993976e-11
+7.0210385190647342,1.9757440860678920295211314623165295e-11
+7.0375539973013019,1.75918897022057484844277461259140671e-11
+7.0411563715567684,1.71513963748472626483819624555568367e-11
+7.1123635726709811,1.03621870628062634438329622932636125e-11
+7.1299791644984607,9.14054190263848115570880350377027055e-12
+7.1373683502261986,8.67120384137558190340807380857690445e-12
+7.1460972519823933,8.14714980193542800602504147918918178e-12
+7.1546923529807485,7.66151529230685772345356030412375146e-12
+7.1674552866809664,6.99232747302303031126538469948449998e-12
+7.1774687465514537,6.50774048377312527246304806273467138e-12
+7.1810816228077652,6.34111410413178305390266398115322993e-12
+7.1922291379722321,5.85292261841447965724211561496984353e-12
+7.213268081602159,5.02991410486527743844277251015127321e-12
+7.2144374591105223,4.98766163753922122364970115668868684e-12
+7.2229843924882573,4.68923449692318869404432880909498893e-12
+7.2427511836873153,4.06453262718144610446080480533557359e-12
+7.2584414946858731,3.62746715046457304474223231624828279e-12
+7.2641693005896091,3.47969032276064426761785580286360875e-12
+7.3216348221438103,2.28839999565638553159547596242456012e-12
+7.3237166421792415,2.25377905762056780517844375962853707e-12
+7.3346093565241031,2.08084468435051160402570298910378993e-12
+7.3402162368088355,1.99697575644502029981558347779759273e-12
+7.3462418046441149,1.91054165293303123993380325168920694e-12
+7.3640988351567156,1.67538885228189246669782948100070179e-12
+7.3673182215238127,1.6361275952241957645203498537867435e-12
+7.3737590276743186,1.56027176874780839077230455195905013e-12
+7.4018689202926904,1.26768114230229047405867079110340928e-12
+7.4118468222318041,1.17737155459825168844328280738385647e-12
+7.4245623680614123,1.07139114260886907367857082216297984e-12
+7.4567274918599082,8.43351598383358077025555376865288647e-13
+7.5178511891979429,5.33646237827855557870365617580712767e-13
+7.521440872517271,5.1943412377669731074094508943432471e-13
+7.5219625847447897,5.17399773383246203414399202540019662e-13
+7.5395773683375245,4.53122699366988397025309367196753481e-13
+7.5409082637347016,4.48598228838025359563501285228542357e-13
+7.6093092951536159,2.67195986310084533660048926185947938e-13
+7.6137205024480705,2.58373561426186899713105388225605825e-13
+7.6370708872623405,2.16231701821101852805054342243924819e-13
+7.637962578971174,2.1476409990939999572392596949119903e-13
+7.6385809333958852,2.13752126625197644291832973922699316e-13
+7.652311341247712,1.92451074545025277745157425239850961e-13
+7.6545516008346262,1.89179498145038438437580925191569568e-13
+7.6679113355505146,1.70774550753170214598481552277272878e-13
+7.6715634586594259,1.66057388886033487260210386797941712e-13
+7.6868031405650044,1.47718012296940633406928708789417668e-13
+7.6910510024651266,1.42971260373273974880033123506696606e-13
+7.6963698630962831,1.37238715732216545563700304148671757e-13
+7.7092518129822647,1.24274724724317584468949594223146082e-13
+7.7276759438707563,1.07801184695781243983999520935906303e-13
+7.7335067326882898,1.03049886161414546007995393741985901e-13
+7.7364531117715902,1.00727919910305082213040143276025883e-13
+7.7441641028536923,9.48918259821522901787052068964166132e-14
+7.7628926704311567,8.2066105620765996663221820629030992e-14
+7.7784817809161773,7.27033153663484709939112962797010393e-14
+7.8078723890546478,5.78203490281020656806897960809343928e-14
+7.9101510577470462,2.58815799469046782794509777456773902e-14
+7.923918327027522,2.32088940216445467606689138014958503e-14
+7.9276284805100072,2.25363538594423422909783549689159004e-14
+7.9548205039530586,1.81594624116940277458290313568807913e-14
+7.9755377131275287,1.53970431563604133020361912526417813e-14
+8.0099807854057108,1.16917130394854224527219706959912777e-14
+8.162821525172685,3.39719050849365598762488581318184191e-15
+8.2061693616549132,2.38254346263463289150672683641876466e-15
+8.2146254752114221,2.22273972624059491978334293285718065e-15
+8.2642782259136762,1.4764330792329394500404048007831545e-15
+8.2922218709365207,1.17152300558757793785256977983482108e-15
+8.3186528043161019,9.40620190199266474415422451372015096e-16
+8.421902788065978,3.96354252379881456187431596685762063e-16
+8.4236397328016395,3.90597844453679821250599144188234888e-16
+8.610127335746375,7.97889724461936914343503076443608659e-17
+8.6476030050900778,5.77436165332387079730272079835439048e-17
+8.6754083372997144,4.53847780892023320106285914882396863e-17
+8.8573928451809341,9.20574427529369006183859835130817098e-18
+8.964087479091944,3.55764748457172779104746622673083576e-18
+8.9799360797616146,3.08609233959230795340205449138286838e-18
+8.9893703712573245,2.8352832331806952354551766913992508e-18
+8.9913532583088003,2.78518685933604248571851737643283635e-18
+9.0644645306380163,1.43946722184314592415583204421685481e-18
+9.0650171177625154,1.43227487399082999696175856591229713e-18
+9.0666381010925559,1.41138070095407751954113789081953002e-18
+9.1275482877929104,8.10959471907212724225634430707404275e-19
+9.1850271090930704,4.79107719129063153025424514011954357e-19
+9.3151585260722083,1.43767551547672888717364293916038886e-19
+9.4101868573098617,5.90555548283188936786766951063020871e-20
+9.4369504360614425,4.58910535605920187423133604709879201e-20
+9.463460844931662,3.57210935877305140277793777049077145e-20
+9.5818526893482314,1.15690852134404687251293365381899126e-20
+9.5926015118823553,1.04362473644825819461344112535940957e-20
+9.6011289021737785,9.61619690888434969051957300533078236e-21
+9.6629032935547894,5.30387095363427599119021432429850536e-21
+9.6882823239806655,4.14905151822932748587827092469498574e-21
+9.7289075292463139,2.79677256375891083729603603494040531e-21
+9.8421687745082238,9.23249155385497961870797178173385469e-22
+9.8491881662828131,8.61597706934104796218693728375013106e-22
+9.9160603393777027,4.44929527638267473274390226059762873e-22
+9.98994497108486,2.13266374567871357335128903453900381e-22
+9.9917580435064153,2.09438016551421374820568666533991262e-22
+10.053397417975853,1.12915800198249127484695403040759648e-22
+10.070295941790418,9.52601961275963010896615264678566468e-23
+10.090241147320057,7.7910367111143868228778755066414692e-23
+10.148245529611716,4.33193131704066846474413743026394485e-23
+10.152181043197317,4.1622973604008903530001869535640642e-23
+10.240873947251593,1.68490222786493551023771681989354222e-23
+10.28896557970663,1.02844791659598888571739482061069163e-23
+10.327734583615344,6.89634400653048189573452677171974241e-24
+10.339444143342739,6.11038409902300878776465569250354757e-24
+10.398663953248183,3.30665209400997812396764210579053895e-24
+10.456904335890664,1.80149718185557932603947120751535347e-24
+10.484124779219838,1.35473523773180089953987783464520429e-24
+10.488643159549889,1.29204284641540143448234744765280397e-24
+10.520424183132912,9.25315734916130355666425019151112716e-25
+10.524731886699993,8.84309281482659498688155652451903994e-25
+10.584444918897894,4.70859802394556995018770632817411632e-25
+10.63090029355647,2.87659355036501735262134284416758468e-25
+10.707595107004783,1.26912899830275817443679728169956292e-25
+10.739063733460389,9.05636189153150680419936793429898411e-26
+10.834277035359298,3.24278645892836733887404364008567298e-26
+10.840589726103239,3.02835513685948643654291351315251236e-26
+10.998329159424232,5.40960112707448948967595794537937782e-27
+11.071304673659615,2.41791094705782030230332722351970922e-27
+11.073570001193282,2.35801750364082706296564580927946183e-27
+11.080690360721196,2.17917872844527495942493191098168072e-27
+11.167670353779902,8.2809031495880427470958427741834975e-28
+11.204365963219793,5.4929985201513743272498735466006307e-28
+11.21410651967977,4.92483162622498084617722243842799714e-28
+11.243342371477571,3.54666867924611141297327554513156183e-28
+11.34569956050213,1.11620366769632134355853004810186384e-28
+11.360975658655075,9.38472848191559874684025342320584148e-29
+11.379723723350656,7.58302113547068961035175982368541541e-29
+11.386189385860824,7.04496608638041423025268963857888907e-29
+11.420542764587008,4.76153063223281822324055643040078647e-29
+11.444092051211323,3.63768051916558459252859365815590398e-29
+11.491068096149752,2.12260626020700021939198685283305223e-29
+11.494634639103047,2.03736020674685689196147714451035317e-29
+11.499318307744796,1.93055383986266470692754200176435473e-29
+11.617876007495525,4.90390255072707372570119004719326668e-30
+11.673634519775561,2.56172622828938786683672866257174712e-30
+11.701129929176441,1.8576866555791735147797174662957552e-30
+11.752899805276712,1.01230091487879933052368767519963478e-30
+11.784754281027489,6.9582022997479550348719534725130639e-31
+11.789926979935103,6.54661935051872175870149865288236611e-31
+11.844376523349936,3.44013346766972437063023208819145918e-31
+11.883989056226715,2.15015501288587236885486917259009622e-31
+11.902477982384285,1.72572425828824805606282784936022979e-31
+11.917726918013349,1.4391180154162396910506476072892953e-31
+11.976657622071343,7.11751806053400733151597590989408462e-32
+12.035300180308401,3.52012943677054280157852565925065081e-32
+12.114047207576954,1.36022904649504639936103641777430273e-32
+12.330478370380405,9.65566452541924259850535355885873911e-34
+12.331989123080907,9.47745002997789308101437664975132658e-34
+12.387946217251674,4.74593005882704444224876594936725729e-34
+12.404988887601037,3.84209776745985300079126567672035296e-34
+12.411122263337463,3.56055077167526561969237295015336123e-34
+12.431115910626252,2.77755701586457449047816392345600034e-34
+12.456773798145118,2.0183622852878044793964241986447851e-34
+12.525197588553283,8.58649773487586791987946574338046557e-35
+12.536667598562675,7.43695147109191499746318199033819946e-35
+12.575176075309203,4.58574047570424238953687044489304999e-35
+12.629683572353926,2.30717696915955940723962016978324231e-35
+12.646574415794236,1.86368559100164913207511999004582163e-35
+12.646579530065392,1.86356505539862036451666845322597126e-35
+12.743762748125782,5.42663294340356325667687416745917954e-36
+12.750654782857014,4.97022272003324894396171333380498349e-36
+12.752772706804542,4.83778751916612583285412903885177902e-36
+12.77973724564157,3.42883760807079093663102052164131232e-36
+12.847987314091029,1.42999984554832174972698310984945276e-36
+12.876764181380194,9.87612817016506992469687708476780139e-37
+12.967624780130985,3.05262605450160363865771157686578086e-37
+12.993800494499483,2.17324794057525805950685512555596363e-37
+13.100520398242105,5.40009303105506632487242392408312859e-38
+13.101199637609255,5.35225282750128376680745128064601825e-38
+13.128647756847732,3.73421481185744632824602411814860726e-38
+13.153835485126567,2.68193768184392160937974271820356764e-38
+13.20617263631785,1.34545962547917730908345872694023543e-38
+13.219622138851879,1.12640234329824219700470657122081749e-38
+13.234471820261506,9.25530079326128965794545083862581062e-39
+13.239110068414185,8.70415871767963742337463527813166438e-39
+13.257253075789366,6.84445659882803405736505654768767028e-39
+13.273598376587827,5.51025937351584263265828743402262999e-39
+13.2836145330339,4.82403683730540134219650875994187888e-39
+13.337351221986397,2.35926426297735370877034774471450624e-39
+13.364500778599309,1.64193938692977436286087734550021854e-39
+13.425643187672138,7.23880558556354220524204059277217937e-40
+13.427276328870871,7.08180567360673217051590417014505574e-40
+13.437225204257608,6.19593309743558520677077414476001262e-40
+13.444683106265039,5.6049593599370440267290234268292922e-40
+13.462671153497132,4.4001842988968258172491887639696069e-40
+13.587759868727696,8.10417764734883176050074861444503578e-41
+13.657468100186824,3.1354457812290348673042274731493921e-41
+13.660715749577482,2.99939744665173199816538155580636301e-41
+13.708930774669858,1.55053079455737803255951288673699444e-41
+13.739684301506657,1.01666377757904450114176123946741039e-41
+13.742127807048769,9.83095000687338439990042032460185291e-42
+13.749765088958796,8.85120762908826764563920703756756719e-42
+13.769800571647609,6.71853425733707640159768097971993487e-42
+13.843664121583268,2.42311947697976024584794607107282387e-42
+13.902159330130676,1.07632976257348962979092918635744762e-42
+13.941622893561357,6.2135633863679102222820293432947932e-43
+14.000147494217968,2.74311481576898285895308384813376643e-43
+14.065844914628927,1.09107387487124040847489738701075461e-43
+14.113236700399176,5.59581507868965434186830733493960876e-44
+14.223521448060078,1.17288074756769183273771242337400175e-44
+14.232815075529198,1.02760577346229401826191639165315695e-44
+14.26633939295537,6.37324874881072099736290824984487896e-45
+14.287380563492464,4.71952189814415670408682035361411819e-45
+14.330135264272586,2.55982997061623261731002791335143736e-45
+14.410396670646159,8.07803116417567995267892152481819133e-46
+14.689231254945829,1.39757967938436070818329105960029301e-47
+14.696380092453742,1.25822935620061946212847983648475251e-47
+14.849055805778368,1.31897550431196652170075775045252866e-48
+14.854847037525275,1.21027088878037157510816792063581419e-48
+14.865753123846375,1.02919453775637845484937163412607621e-48
+14.904036750779611,5.82124305583014546366213028259623573e-49
+14.910667217291781,5.27337789649428571876695458298198308e-49
+14.915001879303519,4.94327974498751628567042640767465776e-49
+14.930149823523495,3.94316097777281701297015607590657084e-49
+14.942415995770787,3.2830460373571978724775082842349893e-49
+14.947120299052331,3.06015919627377920454270553933468458e-49
+14.952009425142579,2.84446964002676574520956804128002511e-49
+14.963689695500003,2.38849845047037988178377940188025819e-49
+15.011320468318448,1.16975983139919100152670437578833434e-49
+15.039045080285407,7.71229791233742295240927565291455966e-50
+15.043190184100302,7.2461420209886760928183329311227343e-50
+15.058264320357958,5.77531314291697505165372071050591272e-50
+15.097422666570933,3.20005841125855764421096957608007627e-50
+15.106272864551764,2.79970686479440896089141124345753732e-50
+15.13944813407387,1.69521529005069715250283067346782057e-50
+15.143166585577442,1.60240805217355192179740363493658112e-50
+15.145269159995706,1.55218821249183175649086405667483032e-50
+15.150320217128524,1.43785627856032646394652942785654594e-50
+15.185840139581028,8.3894030707396186184385478353875536e-51
+15.219361719674493,5.03973834746263531851650329115086957e-51
+15.229339923489851,4.32945855904554106957569912889699344e-51
+15.246753078577019,3.32044902788982520601990197240200042e-51
+15.284093701208002,1.87776005999611301890627082476671234e-51
+15.321610819654103,1.05755610851215966737049644184592891e-51
+15.381279390048665,4.23145962404241024883089127925513239e-52
+15.385897303671522,3.94128540933414737333532201804237406e-52
+15.390304727230031,3.68284310653981769179625114774608183e-52
+15.424884426219993,2.16170022781392773849776047872643085e-52
+15.512076903399983,5.61109002034043843636894480979515349e-53
+15.524980331290386,4.59285936386890674967157874204595453e-53
+15.545164740043143,3.35662676648159215755025856234496189e-53
+15.598875383498417,1.45434163506199830990533816521321408e-53
+15.610722741810459,1.20885988044142531480544985175034754e-53
+15.630619672345928,8.8592255484471327851567486127837373e-54
+15.702644801422316,2.86643226108992630398227946866376921e-54
+15.77757026972448,8.81379675331750010259350916926673213e-55
+15.781562170536617,8.27573586353435066699124599091238306e-55
+15.808303450162597,5.42463777960600730512268453613955748e-55
+15.857966079215732,2.47103237744750678705034046194612789e-55
+15.871535831564774,1.99243057587051475700210888928381096e-55
+15.9119112547619,1.04887716462346764715997460666207653e-55
+15.918226826139525,9.48576793730760138351562358160049226e-56
+16.008764744420443,2.23555805640985800276947273765983823e-56
+16.079128150828314,7.22949550176875762199346398506060248e-57
+16.10186406168776,5.01451732301410237183527828889905639e-57
+16.125569220648725,3.42245782654937890493851379817953508e-57
+16.277124043573906,2.93747928846111230477844050803567053e-58
+16.313579154430112,1.62174540496483451936871357314104275e-58
+16.408107051439995,3.45399655003174642454004083089191095e-59
+16.419596817749362,2.86034045491242233929178759942095886e-59
+16.44167191822477,1.99019525771583455957546028084522706e-59
+16.448951003080207,1.76566243240485713352761503582750527e-59
+16.451750262235521,1.6861994345480853792362474198973722e-59
+16.624890566744813,9.62339867127024948736146173058007284e-61
+16.67092656996228,4.47181480153076836527171019973952603e-61
+16.736394746554751,1.49815764476539184399094518297099382e-61
+16.766413442534716,9.06087689253127902839356737420280765e-62
+16.943550918140673,4.57635120653415578477069216356632986e-63
+17.092421547063516,3.63281845306058587355228541422137195e-64
+17.132039347854381,1.84422630637398365529042352664839872e-64
+17.193032045950655,6.47439766190374973329726335765416989e-65
+17.240150164437235,2.87669538173441450996374478248352257e-65
+17.253296993873828,2.29309507279913493356186581396759003e-65
+17.302523906088872,9.79575743571125605405954291476487847e-66
+17.445457694095353,8.17600914816697981601922632474471215e-67
+17.487270053132967,3.93887155528952317152048135621156534e-67
+17.620380350128478,3.8071637220243943342623244187308227e-68
+17.782418648176233,2.16228369002403104927337399321205874e-69
+17.91886443904276,1.89289067286716444364037804578591691e-70
+18.174050360843914,1.89283070540946085139414359092430066e-72
+18.189961912398338,1.41732247165312425049682241719856148e-72
+18.354959594624642,6.95197659574687186462545202059300116e-74
+18.378013944699894,4.55214525182804739152206444687857448e-74
+18.394843512270796,3.34064185637729335024669962537519074e-74
+18.414856347021651,2.31134531125505387675689215394111401e-74
+18.449532607095847,1.21977958136871290799960638471164158e-74
+18.516876748842765,3.51317331936982279733219821907266017e-75
+18.622802613985964,4.91395181211370342277712493582171073e-76
+18.670890176173145,2.00450486911203462925498821289534746e-76
+18.755346776720241,4.12693831112115652300958475447203745e-77
+18.840385532548421,8.34425890421168689868205124417020151e-78
+18.858591417851418,5.92038879047378487473437425859269005e-78
+18.914111229578168,2.07473918355073914512047278619363833e-78
+18.922967910623363,1.75466855282887424316811018048152178e-78
+19.031387325531252,2.24200505500688166125046747929104509e-79
+19.097558530366928,6.34988389908211624519786894194759563e-80
+19.17998767663126,1.31107026739087351021568937598853651e-80
+19.324466531964276,8.12117016684352313131714478486136155e-82
+19.386302331066275,2.45375275593174363193327285268266324e-82
+19.397185450809552,1.98690056385440761622892803459504353e-82
+19.435075459376502,9.52084554561976215079428674723331534e-83
+19.453815960423434,6.61331477835920567486750644330267299e-83
+19.482187258294339,3.806661410892801476973162382914049e-83
+19.533693714419076,1.39370776710449525036170201337218564e-83
+19.662199902384497,1.12310291090884546221731775267589291e-84
+19.685549338451764,7.09440557438924227209230034849421771e-85
+19.809798065170881,6.09987516407390897694963907604592911e-86
+19.817670214871978,5.21892595395181537992319823690633192e-86
+19.877631363833483,1.58756862509967713846784856106695677e-86
+19.917346435661631,7.20343914783382721206892086616320054e-87
+20.008916811237444,1.1578063196474024529597899549751742e-87
+20.365246398428685,8.70252338711638569020987873223865158e-91
+20.435135457706398,2.0914610213985649049449056219884161e-91
+20.442085849709606,1.81449377870403086740564592954827189e-91
+20.442308621620732,1.80624945593028690677022325565922012e-91
+20.462725258065781,1.18967596165977469132031485808273974e-91
+20.599664388458496,7.15153622223080242660084326184913613e-93
+20.639692004575274,3.13293613323023204803090069695790834e-93
+20.746364489686293,3.44587881966864999479496508687338028e-94
+20.793177934785795,1.30326731111014524139793893807216214e-94
+20.801515247004676,1.09579535999167368931414096113809671e-94
+21.015949943599157,1.23749962384333465694614865499540072e-96
+21.039967552122707,7.46807092807575940192745341854985507e-97
+21.1741331799523,4.39901719955814472026769308830714875e-98
+21.220752633208175,1.63749552141638293511226046066591822e-98
+21.221255229597194,1.62012345570074442463790889924102669e-98
+21.399866660817516,3.60154438398101828966874219634286654e-100
+21.795592754454187,6.99305778795084066696527033570741564e-104
+21.796573977140881,6.84508653608309132444264947458230856e-104
+21.892392870292628,8.44016595015366033521051321167799574e-105
+21.973450610453867,1.42642155560629031178368637554798434e-105
+21.976596314178316,1.3311483439353768722966711489701188e-105
+22.056372521703199,2.29845107242647161004759628366174411e-106
+22.186039839457457,1.3052871715139957194113307909347858e-107
+22.273194331156926,1.88061186992500642529035470491856543e-108
+22.408500524223797,9.15145018850326429192733203702185706e-110
+22.449009743211864,3.68894682462833053933604757073885866e-110
+22.508181480087927,9.75547388967994166752383899123424891e-111
+22.706011981130789,1.11409272230200759907091487838732148e-112
+22.763656587544144,3.00442105994585381386577448487645635e-113
+22.782745721880911,1.94519882283961466686287142357141448e-113
+22.80449540966853,1.18484274783288950610762489462472219e-113
+22.863615175644693,3.07176142561198085853182622276563966e-114
+22.873130377618946,2.47107669741627069258439748805603062e-114
+22.886933277208961,1.80190273864345285964114838791354356e-114
+22.964318949654128,3.05663086106210365094357283050068116e-115
+23.05758348675576,3.5743833185307072311158187926088099e-116
+23.101855702927026,1.28659903232736581297959448665581667e-116
+23.161680624760503,3.22434941656734658419547560597858541e-117
+23.174687380792982,2.38545118264131395400205343290321694e-117
+23.192164776560535,1.59074485489446748448250503079741676e-117
+23.244175558060807,4.75497903203841830083490487086094662e-118
+23.342198213558881,4.84776292399825157097848849311843375e-119
+23.362230563322761,3.03653669028114761024810126311000004e-119
+23.524186298257689,6.81499788437649844063747720108529574e-121
+23.568239076833603,2.41536317998867865415301557194656172e-121
+23.628792314524606,5.78615632392647761148391767700118738e-122
+23.659014775454256,2.83173974226891438207874747199192283e-122
+23.695423002696575,1.19583622067036466328402390139124675e-122
+24.140549420326447,2.84409140959423156834514125206816241e-127
+24.166843168541661,1.50704750765051502683820365231860713e-127
+24.206830478046523,5.72917193772088195529414102402655288e-128
+24.286691734642091,8.26293035763586889757865095740462407e-129
+24.311748341277784,4.4948095216538646655708255002501382e-129
+24.362782065609291,1.2981004557996139958841927850860871e-129
+24.441025810023724,1.92358525697370745225525577976168069e-130
+24.506141653389104,3.90851620293729580677360706386052686e-131
+24.575452225626439,7.1335301791741891067037833117066291e-132
+24.665906281959511,7.69330917654649407192087164779232337e-133
+24.778505459822778,4.75518713181501539178388759706403836e-134
+25.128571264616379,7.64610167299451519768863483814113336e-138
+25.218191236606735,8.0104208729389747554514106356900217e-139
+25.270546152438186,2.13630244445005779283276993974474809e-139
+25.27064632851398,2.13090121474987547034162357178833995e-139
+25.325163582337805,5.36532945866637485130515232435533954e-140
+25.351650878557315,2.74234086247404596611987744004422782e-140
+25.587570665548487,6.73812715363021239744364114721507093e-143
+25.599783297283079,4.92939303687033070640939980654905175e-143
+25.657559592613353,1.1212971377857070020024733329733283e-143
+25.848794321696783,8.14447378797254396664700768013988652e-146
+25.850844075935708,7.72416601676139436181122880146345593e-146
+25.856487390418838,6.67556264210760420328585576387176262e-146
+26.052520476611935,4.11929557160245034840164787171833959e-148
+26.086515069312128,1.6980143388304365615768256631943111e-148
+26.162926050356877,2.30672575714228983234546276270846974e-149
+26.339609608733365,2.23185230751471586667334987994446753e-151
+26.558036870478233,6.91327249702216311864655307798801082e-154
+26.571836959412195,4.79150530653833402445723787666639803e-154
+26.598670691560432,2.34776319284839090082672622564734411e-154
+26.696837354994354,1.7162248682188883648305288395102503e-155
+26.900044404789845,7.40570169777159824915928854210558895e-158
+27.178914432541323,3.9334035972038692328232537539343294e-161
+27.23548689974427,8.43940435414979534064939750916480722e-162
+27.662916580285078,6.77496137810018647705218229109826313e-167
+27.844647636717085,4.36963599599219895616708787815406858e-169
+28.083768057096854,5.4500340293279394866042148569848077e-172
+28.111835085836059,2.47688085383262561553849940497341139e-172
+28.190276335163379,2.72203880865928859785922734542514788e-173
+28.239434069480208,6.80044396284286578406036928843558745e-174
+28.341722978248534,3.76504790923582747408213230640343763e-175
+28.347252848847717,3.2188341723001179223188166394491494e-175
+28.411112812484479,5.25568708762516509058014898162798801e-176
+28.413303485507708,4.93853578353154482028166800244571247e-176
+28.486915527110384,6.08230256470219964597920862264263039e-177
+28.541827448745195,1.27074634739814832415822989880545381e-177
+28.752725471706775,3.02135592756132549092953742521460766e-180
+28.82419129386421,3.86089861919883970637197028832725771e-181
+28.84399661720667,2.18110451163548304501008310203177379e-181
+29.017852647238282,1.42644579092320022779607069436812799e-183
+29.11193844566246,9.26053823666236633986063259795097811e-185
+29.131521993616477,5.2354634609070672232267751956425591e-185
+29.155467662243701,2.60542263463593589448566416880986367e-185
+29.174374924143788,1.5010518514278836385962347367647801e-185
+29.258500914448106,1.2851679581176662826295435175459524e-186
+29.286985755817557,5.58254663876742989536380625956219276e-187
+29.432987885234727,7.6767374805818461964437352128176017e-189
+29.565852133925617,1.52403506616094651028345558256422844e-190
+29.609125962969014,4.23584406995205705045815626240488752e-191
+29.620173349237994,3.05389596913066344710671437158319744e-191
+29.66563875249215,7.93494607548166230079704956402860472e-192
+29.711347303073556,2.04267162863372775851338346311814433e-192
+29.80999769108,1.08430776281055030080331105069629233e-193
+30.004350076577893,3.24192233752200545204837830433056229e-196
+30.053470350764108,7.41661873849845169814564889153018264e-197
+30.074822323272695,3.90319103083413476119397240046064249e-197
+30.119144657200653,1.02821663486661894365982442748766237e-197
+30.260403167497994,1.44546862370970785458274298506704507e-199
+30.263460623274224,1.31772802120331488883998732635978077e-199
+30.363794373071801,6.29401591167741597839175840014967918e-201
+30.382676519203855,3.5469477911018301758551568556984847e-201
+30.459389900875941,3.43828299701924735891297881891736478e-202
+30.577289968297638,9.41240093378586674251652417994453249e-204
+30.581159279549446,8.36208276133399413563767909377601391e-204
+30.624610596152348,2.2121654729508537984848613400424258e-204
+30.634747182476069,1.62172679383426292540795322283849717e-204
+30.659794659750879,7.52657261915839595146881099481986775e-205
+30.865634095266959,1.33834021182726803098458816221391313e-207
+31.042346293968698,5.63635630439933427399552883360735096e-210
+31.138328108597698,2.85113146968420736494068385354424953e-211
+31.377038354379366,1.63876343540122518998527465486470208e-214
+31.440825698546117,2.21009320874025917043937063759916969e-215
+31.481761937924276,6.09648715241320330135360779191073648e-216
+31.544536130561859,8.4324329247295328316536977748326497e-217
+31.569279547292371,3.8622874522332034788453338813360092e-217
+31.591869977840286,1.89239047472292651220279280287559742e-217
+31.611689491496257,1.01157540881557272861235614575712693e-217
+32.104208066630605,1.55111346556527791854939715514340549e-224
+32.695576287770614,7.40364371467202682216133450973152185e-233
+32.761133332998213,8.66232471476377622542623200434676496e-234
+32.972878328785853,8.22611950262464003695864937084110569e-237
+33.032154001401452,1.16307580669576041707507789156792338e-237
+33.171386976474416,1.15879451559289949730593206010794629e-239
+33.2201571276781,2.29561900192571493178571520394731314e-240
+33.299451892117247,1.64256534401154779685345065160374729e-241
+33.74804603504473,4.834595529854994623531687308533467e-248
+34.205414443895421,8.61935343357873907154455769244986811e-255
+34.303590509141308,2.98506910416569669133989687133092208e-256
+34.315878382701975,1.95820692095978562681767819510811104e-256
+34.52744701246035,1.346138988549179512498015185110154e-259
+34.819004141307033,5.47909452284465890320316026108426917e-264
+34.885184496654617,5.45755540026052836712282930308362709e-265
+34.896111822273319,3.72750640930569310567989465014670111e-265
+35.282896487907252,4.75486313975606920144105929464139984e-271
+35.592758892746623,8.09496989175662985375902698393792161e-276
+35.920094476483513,6.68467458895412194678452441381729164e-281
+36.078791461334752,2.20777376591075096560261827063503314e-283
+36.172687879414838,7.42666790045514539257861887899901947e-285
+36.401530325125158,1.8382274718102359872099714587587946e-288
+36.556886253118961,6.35534251123563056444373910223953759e-291
+36.631771397710779,4.10214204463005652418107880323159762e-292
+36.885399231703303,3.665076781929730660887112248859704e-296
+36.895690926790991,2.50724124622224848766372629703232479e-296
+36.946945250871487,3.77874118294894930568258287795462304e-297
+37.116720293196359,7.02914612270967400144491412103567528e-300
+37.166797911430791,1.09427758262232974844938565462400557e-300
+37.260628196252391,3.33172868701250798749205543354821189e-302
+37.292577152079183,1.0126217526627886277063763415472487e-302
+37.340427269845449,1.6981320110436935992331248382899044e-303
+37.427631726145314,6.518504961125290167837995308215155e-305
+37.742707388672272,4.68983928690158425411294037117032657e-310
+37.7596321677389,2.47556364806124104124355743277880173e-310
+38.153729810021645,7.89259731193104823036425476827140374e-317
+38.267694143900236,1.01394841040118277044366042356584576e-318
+38.276602145927818,7.21028692751995031028726756754169075e-319
+38.563862434328463,1.16095403396636251447247111318293603e-323
+38.583628642106753,5.41607040011982701656346830392074366e-324
+38.714162770315312,3.48874060465687416601074711823318763e-326
+38.849186460276748,1.85570780509754454005904398043679539e-328
+38.951864711198233,3.41848834265542456898711384918148699e-330
+38.98318396320429,1.00880325626279151610732766367905141e-330
diff --git a/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/normpdf2.csv b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/normpdf2.csv
new file mode 100644
index 0000000..444b1ff
--- /dev/null
+++ b/commons-statistics-distribution/src/test/resources/org/apache/commons/statistics/distribution/normpdf2.csv
@@ -0,0 +1,1039 @@
+# 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.
+
+# High-precision test data for the normal distribution PDF.
+# Computed using using gcc 128-bit quadmath using Boost multiprecision.
+#
+# #include <boost/multiprecision/float128.hpp>
+# #include <boost/math/constants/constants.hpp>
+# #include <iostream>
+# #include <limits>
+#
+# template <class T>
+# static T normpdf(T x) {
+#    return exp(-0.5*x*x)/boost::math::constants::root_two_pi<T>();
+# }
+#
+# // for x in ...
+#   std::cout.precision(std::numeric_limits<double>::max_digits10);
+#   std::cout << x << ',';
+#   std::cout.precision(std::numeric_limits<boost::multiprecision::float128>::max_digits10);
+#   std::cout << normpdf((boost::multiprecision::float128) x) << std::endl;
+#
+# Random x values are approximately log-uniformly distributed in [1, 39).
+# This was done by mapping 1.0 and 39.0 to their raw long bits, sampling uniformly
+# in the range and mapping the bits back to a double.
+# Randomness uses the entire 52-bit mantissa and ensures x*x has a round-off component.
+
+1.0092695624286896,0.239727825874631703356286789626086519
+1.0221002985793264,0.236623965021077999713004885222906036
+1.0230205270859065,0.236401409143456339620084431111872147
+1.027895362239829,0.235222601899832176020513818190050973
+1.0582413302487492,0.227893722125739483478345794987372212
+1.0596234132744444,0.227560436213669596151747102880920887
+1.0634816416650421,0.226630320225546800501889404631346499
+1.0688116658073079,0.225346125851687168514015303152220397
+1.0725699047398445,0.224441174860710506622598699874275227
+1.074945408186206,0.223869418889612854645593181071123785
+1.0786041635551604,0.222989185542306072831982926394421964
+1.0842226942225919,0.221638421140819640110582571306327874
+1.0865108904233578,0.221088657951527123584143740842897342
+1.0930309924997115,0.219523298522970259171961004175189762
+1.0975200545849302,0.218446604280553669218172316165059303
+1.1008467660394268,0.217649276669596419892420792433492174
+1.1025397276804927,0.217243712023309933255690167237734952
+1.1089540320489779,0.215708341233579099319642526475345733
+1.1095632861981386,0.215562610376865982502802472377663715
+1.1144223536301563,0.214401013137915142079467304565703956
+1.1276042440568441,0.211256087030973381774733586263269497
+1.1345247171872124,0.20960893467887982456278404068350168
+1.1355278696830875,0.209370408830244742157619716830988448
+1.1399087614741943,0.208329456799890791715420787603643297
+1.1434175224334939,0.207496595119503583779608772822592134
+1.1483984265967506,0.206315648983913375882335459917294682
+1.1548844951291979,0.204780289781492048905281215653009305
+1.1567566029493959,0.204337661011193621135775640417315947
+1.1572331550936048,0.20422502673827867891047881245353888
+1.1575772855261182,0.20414370044239039923600096218461275
+1.1629632837574349,0.202871940720564807750571832569820029
+1.1642987298197169,0.202556929353795341465496209245340543
+1.1657152365559338,0.202222937417464268711962133275134971
+1.1671628904218208,0.201881751905383060097918367899335863
+1.1702416623447192,0.201156652791838028160076777182301488
+1.1705253439909851,0.201089876586455939264716712421947845
+1.1750808628742409,0.20001837326044854952847276471577351
+1.1790040282810332,0.199096871238935871255493873463858871
+1.1863965618202166,0.197363724732854770234302998318669788
+1.1929713781690214,0.195825976769490551195686736801356898
+1.2035398877480146,0.193361716789570019347141656976310477
+1.2043899616522207,0.193163920204171448879626712122826563
+1.210698301299403,0.191698065247078253254641892604725688
+1.2213776792868325,0.189224667882446892377847591767400613
+1.229951276600479,0.187246639262396027903018638321396079
+1.2304869741293718,0.187123279634296400441753088745179081
+1.2318416848131331,0.186811442179395404293607726981788845
+1.2418542061588995,0.184512241541911616611933432955392196
+1.2430947893075037,0.184228054756339656730272403498123915
+1.2481407204671573,0.183073757251975419764980493997083598
+1.2488915492929271,0.182902220315772432564246814350916105
+1.2533045032486569,0.181895192686944133695489264077589565
+1.2533213631880065,0.181891349140245839297236546953141148
+1.2671767434143684,0.178742870640912106676089355303805624
+1.2672330775555294,0.178730111196859040938690011331601257
+1.2706623092043534,0.177954054068377774670792886177795597
+1.2717182224104824,0.177715352523587499078075505580159487
+1.2766325988082692,0.176606015352330135633918857388430153
+1.2790469850322819,0.176061990331630152827533714203514887
+1.2884484429039054,0.173949851997969482536116762301806133
+1.2908135011139343,0.173420104138644748080750595329181493
+1.3002857716608804,0.171304932903856067608599656532677398
+1.303587563157236,0.170570120885658008797791918109703655
+1.3101340871705409,0.169117050652817339173089044613364615
+1.3176583315050538,0.167453383737347989559408316353143503
+1.32224314948191,0.166443060607883455162963912665967682
+1.3302879900908207,0.164676620897542000453932790633557261
+1.3348723468097488,0.16367367428887434340807168131837398
+1.3420946360131476,0.162099077820294725421668086682669127
+1.3429230261611746,0.161918904223291336887742505987859303
+1.3439549018441297,0.161694597709249115072666138411062392
+1.3442939689810796,0.161620922441139526014175815240175295
+1.3517007382525033,0.160015278753047480357671453976249739
+1.3550392618798057,0.159293919355257017235301677164165887
+1.3608244160722274,0.15804743351432459098016864368558814
+1.3656715418046057,0.157006525115514679009475888451758501
+1.3665690570678721,0.156814135215268941730897215174324219
+1.3691350374438929,0.156264700970084091379217193297230399
+1.3695606486052962,0.156173654916393949403135737984621778
+1.3749759165365232,0.15501739869265155343941716153753598
+1.3812076331925123,0.153691828332260719935372084387816299
+1.3820638806977781,0.153510114998629101292293451376989103
+1.3822858643021756,0.153463022225442993203317330916900077
+1.3910921646225598,0.151600389208038926266399188396868225
+1.4042982706744402,0.148827799458570595591202090248390794
+1.4194440289808412,0.145679072699263010765000444339726024
+1.4207059340159653,0.145418249601841405421085658643070185
+1.4331881969233324,0.142851058979617473519355329025707716
+1.4377483219201019,0.141919021979310804366977194807202516
+1.4435458685502174,0.140738619619681737191043030532997966
+1.4449433743850704,0.140454847664501785134046180741250715
+1.4524820154419775,0.138929240614238039877742301991627463
+1.4544118247412392,0.138540107397556721377300309393733122
+1.4585208873628155,0.137713460916348428636921249923534661
+1.464214925640221,0.136572290004928750438277848629542386
+1.4745076708831504,0.134522343783735604655022213542288436
+1.4761608422816694,0.134194646210815111878650834493700051
+1.4764799951510255,0.134131432358160732891313711486362084
+1.4842155955146694,0.132604203624695031953548011790779596
+1.4912564156943704,0.131222439820538687722498201660643733
+1.4950223064023151,0.130486646708856135617349031498016542
+1.4960392827805,0.13028833786868564289425964447984598
+1.5011658209923564,0.129291214226682624210178282835218609
+1.502300465943289,0.129071098124959106786215800583711325
+1.5116201347116736,0.127271045647060670769572698121567063
+1.512308328037802,0.127138685982209730739059488201420482
+1.5180887207768281,0.126030011324193096870741066769527797
+1.5208366827331772,0.125504879463595674084485983549868216
+1.5270188924348607,0.124328020170685332483809880164285619
+1.5283849258737852,0.124068831576720528326803724864959414
+1.532733169555758,0.12324586482560572243057740712989099
+1.5467628765564752,0.120612032058701651418778413130107661
+1.5485792688048365,0.120273446334375326851145190741883399
+1.5606745893514351,0.118032989668461960181694599370827794
+1.5609907824013143,0.117974751874542451790966236121890282
+1.569353971791335,0.116440545232906594539036906670936584
+1.5725364626567866,0.11585985134203256172857109449688736
+1.5741019327850334,0.11557484148950313952517330996481978
+1.5751297750989421,0.115387939887939890700962495530800723
+1.5771661959474526,0.115018172884106007857256545881473956
+1.5793149848372356,0.114628771744391131634982552737862682
+1.5825755861170743,0.114039400019586682694246837187499423
+1.5833148638861627,0.113906025039137683154998078594806
+1.5833527403516412,0.113899194175704500490442253987819964
+1.588249879293026,0.113018091338720589440503557741710046
+1.5888652006525945,0.112907673136603893377397912279065949
+1.5889357510600435,0.112895017169502016674138702783771835
+1.5919371846870574,0.1123573869352976162253788287113207
+1.5931555877831598,0.112139584145234148726754964034017114
+1.5983471054175271,0.111214415708339600977028932092210379
+1.598578658426471,0.111173259657093763971275859075211105
+1.5992610755247469,0.111052021305269507111157234265789732
+1.5997942941662386,0.110957345640799294323886750260841818
+1.6007499682085289,0.11078778398785051524034752532382922
+1.6021339885135077,0.110542502742059628910215708622908539
+1.604098272218289,0.110194954673715894211483306241623189
+1.6088738115895005,0.109352791505527490994415690184706734
+1.6127923689531067,0.108664715074561782573895081824372825
+1.6193637496463629,0.107516816613058225609306766756877192
+1.6246416126064949,0.106600325060076083314695117087619323
+1.6287445683639215,0.10589121687873580211229064100100613
+1.629693107913412,0.105727701247854081236711100219506472
+1.6346224270789422,0.104880489451695872706168663874043508
+1.6437214926837589,0.103327811782674573500578563585413263
+1.6469638500394215,0.102778047460126302408315073265398953
+1.6493008451255771,0.102382940998046046793888843293711352
+1.6537305246763887,0.101636672686342736212262082032303822
+1.6561278729950264,0.10123423396357245647466749066543548
+1.6566708318938566,0.101143229199070374862795781835295179
+1.6639837125573949,0.0999225961683559527212971500625812158
+1.6671482627993341,0.0993973129598486915068407578153205923
+1.6781081225777201,0.0975917840682155574347962211599225453
+1.6800552638746702,0.0972732375943592262296571292265581969
+1.6867982726309443,0.0961752972642792853200553876606522657
+1.6869286618195762,0.0961541459532040208307789911416235999
+1.6879600839801976,0.0959869383370823127275553991137079143
+1.6881785874466937,0.0959515401794047624685309893763744249
+1.6893817003152862,0.0957567844186023502790686937447047632
+1.6908825221196468,0.0955141967945320544848672896622254915
+1.6933260505769776,0.0951200890907297757294837478570459954
+1.693476627400532,0.0950958377970974580440507327316188915
+1.6987353023962903,0.0942514237178542715354827323657324281
+1.7010218283572194,0.0938857967545672246013724953506087725
+1.7015879300650465,0.0937954177843610925723257203048644883
+1.7041842544838461,0.0933816406654670584244619549643245578
+1.7043853125438146,0.0933496479761515845740503468272274767
+1.7060920521292668,0.0930783582856384583604736369039166112
+1.7093276046401604,0.0925654827595660685425228781716949798
+1.7157293219123484,0.0915562184356785985472530550540160032
+1.7214134015551894,0.0906662059562928567289720984120088829
+1.7221528343590837,0.0905508483671531792690276076085768131
+1.7298990338479714,0.0893482282533457313671221615531322395
+1.7301541508155409,0.089308802297480468384091810336420379
+1.7315358998174908,0.0890954671637031630629992388615489339
+1.7335653114200804,0.0887827523906428510727232467595078416
+1.7349412576869851,0.0885711480645102873366641372293285781
+1.7498174110377482,0.0863048900434771773504863532761340757
+1.7517143352713789,0.086018740867745427361964019134348892
+1.7749942622499968,0.0825591024566463928654678216579396702
+1.7908345270144379,0.0802600986689100675778577072654034592
+1.7976229235696355,0.0792884650256054093883253566433972098
+1.8048389494818653,0.0782645636467520571797630071176297707
+1.8098859563676493,0.0775538984299683253372590404128049947
+1.8101100953702736,0.0775224418808045024119131412081212792
+1.8127878191328755,0.0771473251301192149025310995603466144
+1.8140044868160397,0.0769773025778018415176289876673876214
+1.8185905404623592,0.0763387725795282617636264959785737192
+1.8195844138778432,0.076200881141605797534438032017045087
+1.8198530536022119,0.0761636395404409495612102767821434496
+1.8246595431086923,0.0754994613391439916861307095355270375
+1.8283709665297447,0.0749893834977240252200724849260624418
+1.8313070295247389,0.0745875816536588287391447110335654738
+1.8400966138830304,0.0733937639032959281915959778711767045
+1.843018184614275,0.0729999481860509559388782637958723536
+1.844973515764974,0.0727372118769747136435714058223417694
+1.8460978830156167,0.0725864342957089711781705836202146886
+1.8640354822756862,0.0702108323555020309806374879568869384
+1.8799577138477819,0.0681489835303648183036998865962274332
+1.8801804995704168,0.0681204451316315335981712594319659703
+1.8845624792395408,0.0675608637438476952137611467466382988
+1.8854552431583722,0.0674472633491338406371621985044551645
+1.8862989704760802,0.0673400288912214715872112344773149079
+1.8865030974157977,0.0673141035765947649755192558086687044
+1.8947922851174837,0.0662673848920665970913341409292601972
+1.8981691997145782,0.0658443478244880231908945821292194065
+1.9000457953221741,0.0656101056492398287916585529810624538
+1.9008354764848079,0.0655117156443374956718622549632537287
+1.9015993476696122,0.0654166430024736453530992687018429253
+1.9019458297998222,0.065373552198133208024330225255045167
+1.9138724926119546,0.0639027749436706643435395155882515283
+1.9144547185520058,0.0638315965242117274414313005056236118
+1.9174134180443134,0.063470779709042837707422336414899643
+1.9221357053518777,0.0628979713301353833647808341506567368
+1.9221778055391576,0.0628928816335163475946664380619328533
+1.9229805596208793,0.0627958902489820964284669264517148279
+1.9329035652960054,0.0616059618669394449272099224451201985
+1.9353930114401743,0.0613100447340690333574983156996762353
+1.9375764362212688,0.0610513627806845109281883105228633045
+1.9383194027128641,0.0609635224274085716528783306490918124
+1.9464334601750615,0.0600102354395858603179553809133545061
+1.9477112766835307,0.0598611154831053268839993199401463966
+1.9494580852261751,0.0596577063356865706517776802106446659
+1.949611368503106,0.0596398814228351084149395684160068306
+1.9549915551704553,0.0590167177452457169044961996183137504
+1.9650101165873013,0.0578691464843550397198346134386394871
+1.9688158893011114,0.0574375771201938051302814676617858093
+1.9744098064281315,0.0568075763864756665329763410580344199
+1.9763661197509959,0.0565884684108613167967539635790878772
+1.9769759279270163,0.0565202983223732074116507609207553503
+1.9853284724114089,0.0555927153670021672721004820015724021
+1.9922410086835836,0.0548336813012795314108036120881644326
+2.0090962788174727,0.0530154201254255016580085344411847315
+2.0232613462048525,0.0515227526046480118631485635627818856
+2.0652406772671026,0.047285666618729730517096085482820786
+2.0825191742647662,0.0456212533505779362962581777404526281
+2.0907662217552909,0.0448428900561103426685832045368064627
+2.0919707961162031,0.0447300636253918135715031330850209703
+2.1050487731871388,0.0435191720173086102834633702222126834
+2.1052687042810323,0.0434990277454216424665588550496100542
+2.1248764833695772,0.0417319370007197034559151560862119568
+2.1353472294450473,0.0408114569924057010705043162503213254
+2.1377157418259802,0.0406054563060342395386924356687332119
+2.1478224995481701,0.0397355399865302754182689216959631321
+2.1519266586040366,0.0393864785649459934024985589224267532
+2.1640515826519278,0.0383692792389605176297378466612517883
+2.1874593761885546,0.0364640733669736820961391237298438647
+2.1933268548683902,0.035998432636526024226046873938202691
+2.2274060132868909,0.0333863779760952685935543945726802706
+2.2572733619652712,0.0312236315770882398536566607620919875
+2.2601577556462664,0.0310208700557357419328908598717457674
+2.2625041565493804,0.030856709562549638277666969671807996
+2.2635894011629323,0.0307810197225292738603137649439813373
+2.2659074830094577,0.0306198467402041697672253656518589278
+2.2866800472966196,0.0292057008972473535652885741073777229
+2.2942581599825118,0.0287031391104264264570445482668177498
+2.3135013357324747,0.0274584109418117212032740279244579872
+2.3158991460101617,0.0273064330839562764429759957517967294
+2.3163967529033767,0.0272749796972524273130084738009973058
+2.3274884862682628,0.0265814982408477505934860165781601565
+2.327614271326143,0.0265737170832162804743731758933025224
+2.3410311969807269,0.0257543414567114342402910224644249943
+2.3441862893455934,0.025564689071862255916891268343308191
+2.3447502093735917,0.0255309125183837170909971664868528439
+2.3451546285165294,0.0255067119167392033496402974652983234
+2.3481994414809733,0.0253251111049932191095616840640399881
+2.3563644408300162,0.0248433486504429056015002192931363551
+2.3597207632975068,0.0246475056674892177812539141700879966
+2.3769200164020927,0.0236637031990415105349503998543230976
+2.3804036603624525,0.0234684262198385171447661207114323802
+2.3904722137396281,0.0229114788190709519304221462465253389
+2.3937342122524448,0.0227333953986516793125652095278840224
+2.417392578561508,0.0214757266933312615389021484221123899
+2.4353289331823702,0.0205611472551896443791121087286683367
+2.4366443814838599,0.0204953662676292096330362261543742559
+2.4451594283805558,0.020073778891862791023007089395385715
+2.448936664885375,0.019889090224393818921217620389774153
+2.4581933229228361,0.019442463987843456655231874024904017
+2.4620870263515999,0.0192571126945137272888354656657396608
+2.4887479431935562,0.0180272334400295155780169065986817256
+2.4958998046172942,0.0177087493044307185597214803181279143
+2.5043308406736262,0.0173393808802932475733502154558260611
+2.5108033997563783,0.0170602277115729231636009200770435167
+2.5128459748978682,0.0169729228208530309573149096814244071
+2.5149631800843344,0.0168828252397791948668777596081372585
+2.5161244589497147,0.0168335782887619249960986929798567152
+2.5244071927186233,0.0164858247969826424167646636741749922
+2.5419478278067711,0.015769337124453764173380905184609914
+2.5486358433509531,0.0155031683818906953152331934847235138
+2.6004528700760785,0.0135669838217804948734706862901880405
+2.601103607770368,0.0135440421458597358739150897912327309
+2.6089733970187909,0.0132692012265381600183953786695084167
+2.6322042739906606,0.0124854888227682840291037203211967613
+2.6402715617751031,0.0122227599795888212307965974686656659
+2.6409867101939111,0.012199699790093211560882896621084221
+2.648247836100285,0.0119676651860055952280792823084986688
+2.6545089182550221,0.0117706359026978953441543693562260959
+2.656448963273879,0.0117101524760643102913779930131596424
+2.6567612551491888,0.0117004413386745602210935374183348564
+2.6627923868526975,0.0115142465379146592209072131138568587
+2.6689135344232304,0.0113278808494641359074209921090084922
+2.6928709174455645,0.010623195411537357960862381144417708
+2.6931641364467964,0.0106148101810894507205171448646607736
+2.6938312647427809,0.0105957534648332646970592456158443157
+2.7250370307529259,0.00973671056509750056526612435506733703
+2.7342496645491026,0.00949491252742843758299832060890112237
+2.7520878336136625,0.00904148132003071511429120448203810783
+2.7622675438300286,0.00879123984865264048235808471434240817
+2.7688803116602014,0.008631926003980859347621202712547817
+2.7745844991187125,0.00849652430351276559244405438317590926
+2.7778572568068376,0.00841967539779421077927043242536627778
+2.797182229799672,0.00797811790726030914323028934532295477
+2.8050785973774204,0.00780358916364807814547222475961410561
+2.8174433169042268,0.00753699320865343705708037850112961792
+2.8516961529053848,0.00683961382378586129920028273323201425
+2.8563706188306996,0.00674897195092109549447389924401057239
+2.8590688585919422,0.00669713201098750644910982941660923872
+2.8741804518261014,0.00641321118857642825770453880866457151
+2.8961250992701451,0.00601975433570846809720852582436134378
+2.904043617136483,0.00588308968572183743360824623839114233
+2.9113656430045034,0.00575916092955268461192979720294613424
+2.9151226672891997,0.0056964698767015798403529008840741247
+2.9257731553753561,0.00552201299831718478329820820805469023
+2.9297492072523981,0.00545810432953889305584212002510276925
+2.9343922697084013,0.00538430235870822197328453986057380264
+2.944391713615317,0.00522834855407771596357405587736989173
+2.9540992462883571,0.00508078393357104299572107076205044085
+2.979173314331935,0.00471656097651325436269330624728661052
+2.9984856333714291,0.00445202344249838621772801250440815616
+2.9986419205339159,0.00444993754828227211784169896023265808
+3.008076928769654,0.00432561073612513853818570347403131206
+3.0107686557483504,0.0042907124720824665962457225125384766
+3.0271010842189399,0.00408428326967324092148312630808702662
+3.0310889365613778,0.00403524361395487647523561804859274042
+3.0640983568931777,0.00364905188172463618006034665591265961
+3.0674578294432711,0.00361166172501016356162672400819869357
+3.0845267460415231,0.00342692762033874855053769224991144549
+3.1086179924878228,0.00318058083989518326595834196126268144
+3.1147877755834479,0.0031201007791689785527120041427668319
+3.1276733969259141,0.00299710345380163919864082138527349887
+3.1330796383963078,0.00294680854480171115599994785748435486
+3.1408545993110963,0.00287580587342237522214978074468380683
+3.1917639708924241,0.00244767384576335377973365142656653289
+3.2084892624698025,0.00232011109912483799079456625279929355
+3.2192884953894851,0.00224096715319809276563088891349461602
+3.2516381310257434,0.00201827155283362743415054781240125342
+3.2901368957499062,0.00177947139195930153516740151180111487
+3.2989698703823991,0.00172843373499220380526867752267831895
+3.2990769152329262,0.00172782345767639706875141439053532842
+3.3181490629640717,0.00162216251317342544164541398066410882
+3.3199629468355405,0.00161242581366020153074442712480850549
+3.3269131270297057,0.0015756080612023408218795576209613701
+3.3344240143207204,0.00153668114797064285032739735567568246
+3.344883951169904,0.00148392769777213941404601118201710676
+3.3483337959522381,0.00146689385474032316466810678777622464
+3.3635002828462746,0.00139410086942665774412664725482576317
+3.3676191341119384,0.0013749088383778120570657345989425559
+3.3885245541371027,0.00128116192333971011447558773752167694
+3.3946763741032218,0.00125470803405382197149379311531570242
+3.3948998950990288,0.00125375631466789352869634054487396767
+3.4080534759574479,0.00119889763643472771119750477398349787
+3.4086104648221807,0.00119662380462660008718913250413030326
+3.4432125771191742,0.00106285673936682920103240437738266413
+3.4444396835592737,0.0010583746464585747526888704079537256
+3.4512456883509723,0.00103382792467673052656465354332644828
+3.4530103575789965,0.00102754912966424162798793723916397581
+3.4630601912128749,0.000992452428845048984335792121529968087
+3.478474462884948,0.00094075216449391061572493453025727198
+3.4865258598042121,0.000914740793378960627087893554524699576
+3.5176343239392307,0.00082032155717105223865679503210588256
+3.5332185994339196,0.000776467812007297623842442899019520754
+3.5345415894025276,0.000772846074359511259834717503139278356
+3.5423086780234723,0.000751894964674458877313710466297253126
+3.5542214615400045,0.000720774930745042293622538962631064029
+3.5592622997589909,0.000707967342003952983402074759470860023
+3.56519831586786,0.000693154216473181475395000917291366702
+3.5716892062005448,0.000677283626940453819417379975327373963
+3.5877326478243456,0.000639482495595115320292950538180707276
+3.5916539757694435,0.000630543965367437851327177677975443517
+3.5964544852805065,0.000619758318028688118002054930094047312
+3.600560891384768,0.000610667522766300460817980720973659537
+3.6253782463658837,0.00055829545424600100187667185734505036
+3.6526547684487594,0.000505540723488541545493949595991566127
+3.6666709136368625,0.000480263172792527914245435759862575813
+3.6985002745425533,0.000427143441062283380851133765659953635
+3.700258912657814,0.000424373521520325996495554501968028167
+3.7026211679443342,0.000420679082267826368819291087688827759
+3.7042710530880427,0.000418116460512984363823168664955611663
+3.7211654740798945,0.000392696002504587524984902381813139055
+3.7454597561867748,0.000358646646487477433594144140510715769
+3.7892007418277989,0.00030415909210970339636880941840883084
+3.7933402631983921,0.000299422868019250511779078847269539875
+3.8027434796161557,0.000288918036996172517348946547603028101
+3.8027898629985581,0.000288867080630114718412911681531639609
+3.8058728462349483,0.000285498839390409461261406396684070514
+3.807263648155129,0.000283991350433646258088079152056505929
+3.8145207141602793,0.000276244926038180617852512472887639456
+3.8382669150813,0.000252251238505645776240114056285299019
+3.8475341837081269,0.000243425849674863150553602042742550208
+3.8640044740413884,0.000228447571371099718089036571374291116
+3.8681467314920419,0.000224818285652792448393408612836742085
+3.8733270021897632,0.000220355244508190674819004021888059944
+3.8884578120630842,0.000207788336097192920715285528017230571
+3.8925943207313196,0.000204471121809284389908635232020763348
+3.90957290472282,0.000191366775283107933158391603410410819
+3.9394924835120153,0.00017016550307083500852040877455550662
+3.9452672544494551,0.000166335223416455344964802990116551107
+3.9510164345064283,0.00016260217800515583208331264998943339
+3.9725005344332573,0.000149334951066581679502294219116520201
+3.9740106057241147,0.000148441638989021331704932567828207159
+4.0070226785279859,0.000130119941450652394574329221747429503
+4.0491385852263244,0.00010981645525700000721435549953193916
+4.0897149750487882,9.31012616911303833691455866823370088e-05
+4.1198269205911897,8.22764646821520820394801871584260943e-05
+4.1225698095174996,8.13516493002717441172341298707403489e-05
+4.1315250730312227,7.83998732163589714496266948302704594e-05
+4.1949425229186774,6.02077233817745637428652700585244329e-05
+4.2033876922806686,5.81100123695449172652567798927480154e-05
+4.2289200845485899,5.2179488862971010494762918133411789e-05
+4.2375431349022543,5.030910701436837906306854074117585e-05
+4.2525854151127476,4.71970159098883798969240503705131168e-05
+4.2649621074570359,4.4773709951910811804365468779667632e-05
+4.321619920075622,3.51060211312989606986521697491045109e-05
+4.3307302135651264,3.374930867539275163624511546480015e-05
+4.3315505900413216,3.36296045795660218551256348959756889e-05
+4.3338172106819135,3.33009597188911652702095473972390087e-05
+4.3402220949356307,3.23886517908326715175360999973043355e-05
+4.3631333026550969,2.93151930684763685146374413404240611e-05
+4.4011319194464331,2.4818539604332943693209564136394822e-05
+4.403246673968753,2.45885623292298049740126180632944773e-05
+4.4111465505862695,2.37472107002853689777136163333814559e-05
+4.4258516371114007,2.22533079149951010470464584739039152e-05
+4.4291509015822728,2.19306054482070236204903685993941335e-05
+4.4772086792384371,1.7705463177210579880168938100692764e-05
+4.4784483070853671,1.76074552330634785532613644037185524e-05
+4.489222787684894,1.67770420304083009405880030682699121e-05
+4.6195167166024778,9.26834357765855597305962758869406614e-06
+4.647298801167735,8.14886742299269301269451285398595278e-06
+4.6553527759105089,7.84924454353365730106962511534681926e-06
+4.6580686672052343,7.75059930893062332478235009160204506e-06
+4.6773000784318093,7.08517103231957023173838135255705766e-06
+4.6892635981531967,6.69911533600872821599144770198230519e-06
+4.6928241235445363,6.58815208694394049525061261300429867e-06
+4.6958377947861898,6.49560456432716759518988360888584387e-06
+4.6987475707899966,6.40742617642085488671568790231013477e-06
+4.7613800248804008,4.7645455216247946805386087763520953e-06
+4.8125074826777521,3.73018522031929951462339177176963809e-06
+4.8487482646514231,3.13112435149705530040820000312703485e-06
+4.8537382763026251,3.05623692874000170662914707438062118e-06
+4.8646737206878274,2.89807528083342285327678034851396925e-06
+4.8655380266690784,2.8859146331704851310739802133559217e-06
+4.8716368612047614,2.80148370375526218836420656823090884e-06
+4.917988430957708,2.23282348471992722372043959351560436e-06
+4.9214238013106062,2.19540361458693171709288633544327415e-06
+4.9476332286310365,1.92906367407898490542105162497359181e-06
+4.9727093885495401,1.70344503772551554970797239760062972e-06
+5.002653083599971,1.46712262897430998474995382225529605e-06
+5.0110255004826829,1.40689302054779689637914144483489035e-06
+5.0195386273303475,1.34808896640477347428475083836248575e-06
+5.0383543474942734,1.22637757024059692501246950912868595e-06
+5.0423715773281748,1.20179522876540218325372941876472331e-06
+5.0715880489623233,1.03672774684226782841471976646915218e-06
+5.1257821896741635,7.86431619356244818787161027577624044e-07
+5.1386410949760037,7.36206869741536093744555928065252863e-07
+5.150858436903281,6.91356759637329787301669448308237589e-07
+5.187118592966999,5.73195964133501343463889519619085093e-07
+5.2025473168182899,5.29047389951475853174916681642168168e-07
+5.2128822896050693,5.01325916292365504970586600399294134e-07
+5.2180367250070239,4.8802843469863972444820791813463342e-07
+5.227015173046289,4.65672917596680478399550121883753053e-07
+5.2586848795215522,3.94430902434399159348269347539070953e-07
+5.2804505990068424,3.51689273308638430142811426008257087e-07
+5.3276663982827852,2.7377666370402229263724940388579735e-07
+5.352441091305093,2.39850181769920740491936583748766494e-07
+5.4252370367437814,1.6202146902760752093610245797784266e-07
+5.5474449237320744,8.28684750370101662975251964554320594e-08
+5.5480897931228119,8.25725356840066554100722055970227184e-08
+5.5845954424890358,6.73884862117757094406880755542342964e-08
+5.6108629297303736,5.81738473576897683889104194525312802e-08
+5.6120864884220856,5.77757956143971397818831072209246461e-08
+5.6319879119168359,5.16599791337740834435403752749800279e-08
+5.6457816697508436,4.7794089082757619611155887546359212e-08
+5.7334669755614467,2.9020588425898946719305973804647078e-08
+5.7426111515267904,2.75371467730624017020005222177726648e-08
+5.7432534706899325,2.74357549923650832769912210361582597e-08
+5.7618163114242158,2.46570706327945707441361646072478929e-08
+5.8237863810445134,1.72202048972183634375507706141850171e-08
+5.8266438338742654,1.69359421890063593568702214519702678e-08
+5.8404837386598567,1.56223433093843363763087964251615845e-08
+5.8507663956299893,1.47109717895822755019890844061239593e-08
+5.8558807965124426,1.42771070986469702542946705230307435e-08
+5.887629445389722,1.18489239865045738856041488008281661e-08
+5.8939577946904613,1.14153399547633447190473791483071875e-08
+5.9171696708600754,9.95304810898330588001014493683682571e-09
+5.9550933521785128,7.94671699809105964095168412768989882e-09
+5.9591972954601085,7.75479297531207627089250658359465221e-09
+5.9716144094547019,7.20113012952140602776371994191753638e-09
+5.9798225975640058,6.85643861482152677687042013818323502e-09
+5.9921574547430012,6.36842268355497488637010104010813714e-09
+5.9941009905615372,6.29467451738239046620445969113569343e-09
+6.0298331574273192,5.07782667687532412357063886522679641e-09
+6.0319009077596961,5.01489770412908718686175200272632785e-09
+6.0358839093426591,4.89581138523763625373351356658067107e-09
+6.0571229320672071,4.30577952859373547064637823574560072e-09
+6.0819074562199607,3.70442536935830475415805119919677181e-09
+6.1211291742234826,2.91600963981737981410684479418047241e-09
+6.1326262164601735,2.71767068697308524300698221728146269e-09
+6.143799315521405,2.53753284732081888896658397068554935e-09
+6.177089946919736,2.0670184312600580256899476224967399e-09
+6.1948895268798285,1.8515056605024272578918749495281486e-09
+6.2170436704537044,1.61367034790935884643146868694324603e-09
+6.2174982819716975,1.60911584021648578349220136933281011e-09
+6.2326249677761352,1.46450940502408661633696852193246841e-09
+6.2460468870913353,1.34686065795884728055703314135426039e-09
+6.2477840843908545,1.3323233809695113361866247927757286e-09
+6.2747501466912441,1.12533706266631936299616840207280128e-09
+6.2832998089475458,1.06651791761962767564269567826661938e-09
+6.2858067133294044,1.04984683812082154726613240797470083e-09
+6.2950090116386708,9.90800650760263138269891993499134726e-10
+6.3020602553740321,9.47759569617416120699522529326769251e-10
+6.3036301618053363,9.38427849285288498739401686864623691e-10
+6.3136529662847893,8.80927820379835888781785877022381123e-10
+6.3375935320737371,7.57131305765542767694225201006182892e-10
+6.338593644193371,7.52347177500085504154625761888508256e-10
+6.4723521458235371,3.19389522947838597527882675200938357e-10
+6.5134658404614729,2.44560801598573993802200753650518347e-10
+6.5215809291140499,2.31962025535429671782626456153438545e-10
+6.5272364118262773,2.2355891805873358980937029163641931e-10
+6.5408222071454345,2.04568935170868402366886626013762817e-10
+6.5830300781763293,1.55079839466543322024202016285695901e-10
+6.5988959749369434,1.39682017917492039496004599566880163e-10
+6.6080466599332741,1.31491505529329766005279157522527657e-10
+6.6171417693470564,1.2381642002106935290407169263106863e-10
+6.646288967180606,1.02054202080442453651782298284848134e-10
+6.6546822158080836,9.65136921676681909430111924135303283e-11
+6.7025825074254275,7.00897419143045384035878238725245294e-11
+6.7061429920542217,6.84364561837489460778065221864164411e-11
+6.7454341272703262,5.25435211278476867958576403315359479e-11
+6.75700120893364,4.85964223480211616959569460302538545e-11
+6.7780392044929174,4.21474782179485952379908502036467369e-11
+6.7896969769269457,3.89426504842279631675201167200559868e-11
+6.8098760589806284,3.39495844335080704981082539413841079e-11
+6.8174303251892523,3.22463372554967845806564106406673377e-11
+6.8540670363953851,2.51024415175567247787835746497879043e-11
+6.8597448327549415,2.41439298725095581892925748192521339e-11
+6.8706794284467172,2.23978434233620384698520900326501653e-11
+6.8746127672779176,2.18004853370270575625483541764809749e-11
+6.8816699671963866,2.07675529423733717464623770201934977e-11
+6.8841798594440355,2.04118663209168326619704594135403458e-11
+6.8999133153812657,1.83142730299032533334405018885932325e-11
+6.9323788846235912,1.46310222002233140060183561955493222e-11
+6.9798700088773176,1.05148643905670615078852906123983822e-11
+7.0417292509144778,6.81487117034248464562866925823920776e-12
+7.0714072194329498,5.52720659399336234975137521822044788e-12
+7.0716788848007024,5.51659850702081341404260567321836157e-12
+7.093183280957331,4.73725594776315716457437291542283592e-12
+7.1179688703212136,3.972287651176316495721654224299834e-12
+7.1494476514137837,3.17333067546366297240817091388519517e-12
+7.1646884465881255,2.84539618475440470120223450332830542e-12
+7.1790842763482647,2.56627917821646907539526896129095705e-12
+7.2171591365496752,1.95109271360906213107712230292779796e-12
+7.2262666825290953,1.82689444230180521565501993222582546e-12
+7.2318847234573296,1.75418481483514989117791420610885014e-12
+7.2332176384343594,1.73735506690193742856606965646425113e-12
+7.2507481262455533,1.53021521298976486297157645105110456e-12
+7.2555912250850074,1.47739524846186263982378232226585e-12
+7.2582388392982962,1.44928025679653248361378266963874735e-12
+7.2650521282658902,1.37932102816005301971348600849307307e-12
+7.3004927875112751,1.06554362237265913034233564098962004e-12
+7.3731781341299802,6.25130209288797658730197918359827959e-13
+7.3790159775209654,5.98783120608238700773997820282996193e-13
+7.40714464520482,4.86356534106215702745006285449505748e-13
+7.4392063891635516,3.83347547110366501388548442592671863e-13
+7.4495810040019981,3.54855013761214468241643093631552429e-13
+7.4850934858869635,2.72196876592309173793559509440567433e-13
+7.5019945551594551,2.39817138229107594038234178715995007e-13
+7.5311336378237259,1.92645348570804771011641717804978714e-13
+7.5702007976468426,1.43432967891931361128907898377985651e-13
+7.6916998524539482,5.67533424024127109280205134684973379e-14
+7.7082188818434059,4.9974790910831786329663367816335122e-14
+7.7254626420923929,4.37482382982118997906389934084535104e-14
+7.7408820382262098,3.88306738265585803663381644089161554e-14
+7.7413301479734669,3.86962088128427108670392789537509634e-14
+7.7747971835020344,2.98475344790467102222932890122731783e-14
+7.8256914146016827,2.00677651415318768094467033639178797e-14
+7.8645424387795231,1.47955132499934329370697702107911641e-14
+7.9174042445955193,9.74927453462625253495559779380554841e-15
+7.9511362831025867,7.45998770037344100076096291604198043e-15
+7.9931303514927592,5.33757512676934538286422795423212347e-15
+8.0774919736259481,2.7098670366203584606502375746034316e-15
+8.0979902303443598,2.29587716240096653299222353289945412e-15
+8.239483171904034,7.22741536464064631385564379971130504e-16
+8.2586044554833489,6.17277922798316754018346718470869412e-16
+8.2785769103600622,5.23310673825784905940695944612918919e-16
+8.2920183747566512,4.68159372294031578100051514441026365e-16
+8.4179009539574139,1.63541193296163904631096562794690301e-16
+8.4569324643570578,1.17653020369171051468576416933229025e-16
+8.4982893101074222,8.28583515080687367760086874230003829e-17
+8.5542163050395388,5.143324966602625859513596279529368e-17
+8.5581921770641021,4.97130001288454397234121825783021397e-17
+8.5986611983023717,3.51317731547394764452329633566582174e-17
+8.6021089989268482,3.41053248473180656431181793564896831e-17
+8.605801922618916,3.30387057282739002273721129832561998e-17
+8.6865028947642102,1.64434442232244581947512984205629081e-17
+8.6926265043576851,1.55913358939843881893261292929193131e-17
+8.7084213752095287,1.35894222799347901005049971312569755e-17
+8.7286190332003173,1.1395266242921959409499448733889226e-17
+8.7462087503064101,9.77188503626675902875503038474418927e-18
+8.7627284043979721,8.45610441109359928911930588186376862e-18
+8.8097029271110667,5.59660581047932935114047648744251906e-18
+8.8487418772603057,3.96488454251152781949997796786968049e-18
+8.8914186604677408,2.71537548180590597640502802009314407e-18
+8.8958058088880634,2.61146834116184271099379744936890526e-18
+9.0028780458587789,1.00168800947191431529111954943681839e-18
+9.0064282437588954,9.70172183668632818804165151919987838e-19
+9.1570252789443618,2.47099833717246328008706343139742008e-19
+9.1624917963931036,2.35031714459378767425180662454453006e-19
+9.2479727512919911,1.07002095175614265374222004139956376e-19
+9.273686041346128,8.43286801914121364323226077035943125e-20
+9.3430878429970452,4.4199045714933112412551337242400941e-20
+9.3447242313269641,4.3528371326415893265963012688402539e-20
+9.3795145614703852,3.14280785681878644968162047767434109e-20
+9.4316757079315803,1.92419942262054717103453874737789246e-20
+9.4958889750840072,1.04792247939002199079229954647417747e-20
+9.6154891250114201,3.34187779495488314887679411172712898e-21
+9.6532872587288328,2.32186552904031530985828052548282651e-21
+9.6588794026711913,2.19981389146521866362630958614102077e-21
+9.7673696248973361,7.66894316677040789155739644513897718e-22
+9.797282304591878,5.72340114658418713505345813517694802e-22
+9.8031168901369004,5.40531717864885591501799607215455053e-22
+9.8471444792740215,3.50715902381348862590914698116022605e-22
+9.9085777437996931,1.9116697220664414242300631730995221e-22
+9.9103294260329928,1.87877289145239647203995853222583188e-22
+9.9720753361531358,1.01693200630500225581603854095312253e-22
+10.004051359478948,7.38903248437325841296539994732043214e-23
+10.005398310621544,7.29012671984410494534631100321728412e-23
+10.00706407443937,7.16962183606164263084904709930336086e-23
+10.017146404856092,6.48121217878901930556142275622701787e-23
+10.044433684533924,4.92928814019115514685460840576077824e-23
+10.125173590183969,2.18354235165409308167610834424923016e-23
+10.145665762816039,1.77402631993728928536352523423235555e-23
+10.193924580504278,1.08596547404801306035084987201646498e-23
+10.197090491378264,1.05147228789263403093344781335882153e-23
+10.207831020332639,9.42340632470540124675889023904580289e-24
+10.238111518742246,6.9146335038862374507352822065999831e-24
+10.258042225869822,5.63720595544032430728044313944274492e-24
+10.30511712777923,3.47426932259347647879992514088366484e-24
+10.369101950473434,1.79313604791279245807483472837404954e-24
+10.407007382541899,1.20949433646140035676026581821693865e-24
+10.445054008034411,8.13448292002066645824613800036222829e-25
+10.49746986528725,4.69854086067599005388803925061365022e-25
+10.543779092119166,2.8865153689878549968801598002129419e-25
+10.603483844865913,1.5353432435579708970543719780760771e-25
+10.605553267077537,1.50201680431231088935918254770816938e-25
+10.624302470394042,1.23095131889325692057057808465379338e-25
+10.626102288423821,1.20763496145947776504178715307265988e-25
+10.676439173367024,7.06460548164103976967767940753841114e-26
+10.723281432142107,4.27973695322736960609967512205419382e-26
+10.725127126243843,4.1958584170154732660241622373101878e-26
+10.768519710370095,2.63205657508700366109913715955355352e-26
+10.869836798111866,8.79499639978182506892806054554234421e-27
+10.88848925964532,7.17971579156223958518855087181645781e-27
+10.901473602799278,6.2326127154965686430813205601807884e-27
+10.963943900461697,3.1481848586436991117056078891807975e-27
+10.977165887964905,2.72310701053695518270289607708204284e-27
+11.005360561984716,1.99746410391319860462901836396848552e-27
+11.104893688566218,6.64664458371242253768848399583481481e-28
+11.147930630486627,4.11757912464944370672178605642128913e-28
+11.215508011260511,1.93408451430683784595851998884051244e-28
+11.216964580240026,1.90274365487893826520957405667773333e-28
+11.242993893744229,1.4204705972774871781394118086049367e-28
+11.256495472308607,1.22030266199077841628740499837929709e-28
+11.260370458853993,1.16820996792945639971918507061632719e-28
+11.2762285979999,9.77045920462668400774758486765764036e-29
+11.284511870635539,8.89887695874463784894959441444764512e-29
+11.338025789418154,4.85794137540443821655636270930423335e-29
+11.339307832462787,4.78783393708953477231969466177058335e-29
+11.353175298279156,4.09077519732949677089609493800469386e-29
+11.394037318169692,2.57020576447660017760164222581879716e-29
+11.431362245478244,1.67867999942211355952787307218684411e-29
+11.45168479225971,1.33040961096392756502209758990615681e-29
+11.470843951740894,1.06811849101519708038947369055638387e-29
+11.551227461040252,4.23416578788173824263740882498999749e-30
+11.562136106234425,3.73265055954762354913503191740979219e-30
+11.60480946045824,2.27689563100692026344171661409387954e-30
+11.620061680591903,1.90731696901135654809722362657736707e-30
+11.670898497032185,1.0551452050784534484523081676051186e-30
+11.755595193570324,3.91255327373589073379119209303559159e-31
+11.765423478158429,3.48547571822906598996603069654222603e-31
+11.794766730805964,2.46684062461307358147677545221616811e-31
+11.904558611925641,6.71622721285973117881026162549098268e-32
+12.00676067550074,1.97908275679924866010830254856867461e-32
+12.039253073161214,1.33907243661690673383210004935612179e-32
+12.089999980500256,7.25956399574470013366083758165014927e-33
+12.100321008798948,6.40760315102165578654591645461376942e-33
+12.177739277838205,2.50353210336064792421171369755013196e-33
+12.260961994908405,9.05538952698131809780135742607500447e-34
+12.299271850722731,5.65709550930393209570967546457629875e-34
+12.327622436130355,3.99010347719921058450295483724854703e-34
+12.336810670732214,3.56265433174055520209929162491658811e-34
+12.347195883629093,3.13406703793424528786344863139000818e-34
+12.367996028326038,2.42369140091408002542487032647725479e-34
+12.387035014956055,1.91484446060774864183899475898226779e-34
+12.392399796146112,1.7917060649292200030356215919484792e-34
+12.416786884731096,1.32399854447860026830868220535402543e-34
+12.467397112627992,7.05364383694716288721348299722036769e-35
+12.477728440410194,6.20084892010891282939340783351483403e-35
+12.555029381446712,2.35645491990323059534855613020097266e-35
+12.585212803985582,1.61244080798166725832292980029191771e-35
+12.615667146172651,1.09857177529675971166544445723923067e-35
+12.630032698650787,9.16380815821050269530857071298134746e-36
+12.668957714004963,5.60063528444666385292125605777060033e-36
+12.720526611305669,2.91021272566043033929045979403441703e-36
+12.777840735317747,1.40146467477643451155824121070842448e-36
+12.834462125097504,6.78694481901101299355452532465201373e-37
+12.845467395715723,5.8925780440220110523756797216137056e-37
+12.87494248262637,4.03351394266989039522111043301932143e-37
+12.958845066468365,1.3646216069883048535666059327790584e-37
+12.996411142027839,8.38080284046424767293562720939135355e-38
+13.051544796024025,4.08729842187533531119409397313546913e-38
+13.058496778579038,3.73267801485253331942240850561577565e-38
+13.106279222326227,1.9977418621950100736116352549771795e-38
+13.123414557397373,1.59566436280036750530863810214962682e-38
+13.124698096585945,1.56901014135026193188048765179361003e-38
+13.225736047359799,4.14471113572966196268793968932089862e-39
+13.330762576153534,1.0276397446595423812725505956504643e-39
+13.364640226275229,6.53819411197034854332443191257767007e-40
+13.365649784462473,6.45056746563706261812669608137406065e-40
+13.387032958718963,4.84593140656172607889279470102672698e-40
+13.407090921923112,3.70403102267321388879321445188953317e-40
+13.43227110059895,2.64193532585791433207413891647158609e-40
+13.432281433200636,2.64156867614618145683473099175314313e-40
+13.702526509296268,6.75321713249075042182861837971113467e-42
+13.707801871041955,6.28219413915196039154790386976423367e-42
+13.736721721275064,4.22438441106334075305754793627840376e-42
+13.785662519168596,2.15413623965195979514422316215590658e-42
+13.786983385845749,2.11526464377712668313457109323824585e-42
+13.826477792082612,1.2261648683061659829933331409027287e-42
+13.877786284442557,6.02395720993737161516524309169912173e-43
+13.955520914923355,2.04201785198781997790873204709402448e-43
+14.016871054853148,8.65786775286130786719108950461909364e-44
+14.021289503592818,8.13784893711405566902618121172454899e-44
+14.024187563787294,7.81376675368529340870634339955513038e-44
+14.169386302896028,1.0090925465083745338276264056988591e-44
+14.193911404741048,7.12657082632707336157348719425189461e-45
+14.258915437835231,2.82654726718091519416156015893497535e-45
+14.284370408187302,1.96554915088847377961730707503836439e-45
+14.340062456826502,8.85763776993092125919469883747208314e-46
+14.345665553822167,8.17365071870560397475234019630441707e-46
+14.434969648505279,2.26098682878927908440611758050950248e-46
+14.472353920261233,1.31713872047505222651660485966114746e-46
+14.519998417401656,6.60207383329346944514957511287159178e-47
+14.575915494293231,2.92678511169602442358207731790452453e-47
+14.576248557223348,2.9126107284981636354782088274294739e-47
+14.833108312314673,6.66706625323047166616154644293300407e-49
+14.839353983791119,6.07703975721115957899330395791363968e-49
+15.057954363713595,2.31479540730112113185197630147686921e-50
+15.073627371932002,1.82794985780102247827605968204630431e-50
+15.109362084280056,1.06599093244437759751147872552278355e-50
+15.130612299437407,7.73060349653302587348347031333397194e-51
+15.144317074138725,6.28227005233929612489537527163821798e-51
+15.205652882100422,2.47678518782413450748244348339853293e-51
+15.286144857181826,7.25995771988543772151764189789941702e-52
+15.307295625807626,5.25319579650763234967367004646757416e-52
+15.320992245252944,4.25921390084455163632983234859460695e-52
+15.363651832905729,2.21352768645818152967585423183043261e-52
+15.374779623471833,1.86556147603635527344352337688412882e-52
+15.393978849185501,1.38845816531366189106146873601344359e-52
+15.460360026935309,4.98635565982028186883324035822921408e-53
+15.468048255179806,4.42740212021149859499702812798449911e-53
+15.583386037772616,7.38681228987965289448005637847311594e-54
+15.589275062042717,6.73897616080434625067417619331776336e-54
+15.631806891960331,3.46933569998308340553138372327855438e-54
+15.694331452296145,1.30295742264943476651571201680894199e-54
+15.768946012033368,4.02857379482428864170308159673564352e-55
+15.771527457866215,3.86786395231119990460379579215302587e-55
+15.806967636541749,2.21030087794338608589748858762432832e-55
+15.811056253461754,2.07195303244584543512856564779085804e-55
+15.877220658026317,7.26275158066209001394786436896207321e-56
+15.910315643828566,4.29200818298663336535639165581964599e-56
+16.05288354048847,4.3967990397710032303975874819518111e-57
+16.141673053922442,1.05296213947719155000403426958208221e-57
+16.311477567982209,6.69547368069164251827633608629403102e-59
+16.352513262214213,3.4254640719595846536140310864772e-59
+16.387686584713126,1.92600161914035188742046901743253695e-59
+16.499390279664073,3.0686178426488864850837034471129605e-60
+16.579093658759529,8.21185520166913138863650626826760834e-61
+16.695967074378686,1.17479523586812373008981273051699979e-61
+16.75802780174099,4.1603089172239445618154464053940381e-62
+16.808985091433058,1.76888133103845500697880587177648449e-62
+16.820824692672925,1.44956797187957290753990981084980275e-62
+17.006408564153112,6.28107593455729979243634014829924559e-64
+17.024301371673982,4.63246360002672225242484985863366575e-64
+17.041153681064966,3.47657643871639730355349118109563289e-64
+17.132938616368296,7.24491392638774729645277376720196319e-65
+17.256105473428534,8.71538233879417013483609843347672432e-66
+17.291391205167574,4.73779908270127873977066503660193249e-66
+17.317733377194067,3.00336384633236040499244334806606695e-66
+17.379485847525309,1.02882095453902621367714729818057289e-66
+17.64705799956808,9.48873080404810709723716150521671926e-69
+17.673313163680689,5.96813087799482621484334501704887189e-69
+17.737656490820534,1.91019243866414040733107576337803802e-69
+17.768320586783066,1.10829704775379560853756687550333966e-69
+17.806851331350888,5.58475636215184052978817514082474641e-70
+17.956451036148795,3.84793315991444968037368419318776332e-71
+17.974377840390314,2.78841600597855981925408604677061469e-71
+18.085736377768534,3.74438730194157461413644076247698052e-72
+18.212394329393383,3.75887477520526614525191297760787468e-73
+18.243903071230413,2.1165208225608101510787063482018577e-73
+18.258359545672647,1.62568067635353597873585626342864544e-73
+18.365962149640538,2.26613447915853948764783314612063504e-74
+18.485400687194218,2.50910008827500611622779832516051783e-75
+18.607936492547847,2.58539494329389595463513113460538838e-76
+18.648996351238225,1.20321372363434788524575643841833418e-76
+18.685912955783319,6.04023024818989231143203793251607605e-77
+18.701872620098175,4.48210982275709896918749844591837683e-77
+18.712568589272838,3.66930409140877339674550263096099593e-77
+18.873222931875151,1.79216932986686686770562424553830342e-78
+19.02510297449156,1.00804440203925428251288902176518655e-79
+19.098383425565086,2.49364169807450168619371109977266445e-80
+19.160641538162338,7.57885340466434609300140925110905482e-81
+19.182377285467009,4.99608616200562392335085912532167169e-81
+19.307731195586335,4.47630143002525832721208511863341134e-82
+19.46778283151583,2.01041264650644735890326598123480355e-83
+19.484342625205556,1.45618560425498334136180699017876918e-83
+19.543225071688088,4.6153429488296095896850511097546888e-84
+19.587642326704362,1.93545669910958493550652195814054339e-84
+19.590185064275587,1.84141417909313131790803276860724698e-84
+19.694512845177982,2.37233871189336124276245449345027113e-85
+19.79290637547194,3.40011097292265192211076725463145497e-86
+20.007308478672126,4.7700337001610633873779268256168599e-88
+20.054263764811406,1.86228099160491687679169588862033267e-88
+20.178291648652902,1.53634745099166944751036922983325354e-89
+20.208487362636124,8.34981258205075086299813843487021541e-90
+20.518243970739473,1.52153881471973990569193148561813713e-92
+20.571237343398192,5.12213936257338498950161935672727878e-93
+20.66068449225985,8.10206010978564041159405735423235031e-94
+20.910118877981407,4.53894519232425782366273173211739099e-96
+21.000818282294528,6.78443639992449038036034602599871995e-97
+21.099754524786043,8.45349594487708592963020861790725374e-98
+21.15013284270978,2.91637366247863145966606477057557397e-98
+21.184064534965376,1.42205849949877179199793542789828989e-98
+21.202296996212919,9.6628314437603744710316620236593918e-99
+21.328271211399716,6.63258307695477662656513220377087352e-100
+21.453874439700034,4.51674509171740910185514907538228947e-101
+21.474637617956535,2.89251234472831859195422053418514589e-101
+21.584904889456453,2.69306892799620363294019594956194056e-102
+21.67194493160935,4.09893623770518417714125644661142511e-103
+21.699483193251734,2.25588107682894884868411482191287423e-103
+21.735749248146504,1.02626741996869043687071068575212879e-103
+21.848474448199845,8.79847467742280052752373060663825525e-105
+21.853922650249686,7.81096588938932801200033536478227091e-105
+21.878065258467366,4.60722859735431860577042121815024038e-105
+21.915863043839014,2.01369179844530620465419355736881281e-105
+22.046797471982302,1.1325162633677461863063890702546695e-106
+22.047945877111996,1.10420169303409555449168396499493762e-106
+22.107507576455259,2.9645367940596021566180028309640362e-107
+22.147859027329595,1.21389800071329633943624055331031746e-107
+22.203422787584188,3.54047099611683158025148943784693239e-108
+22.232757740396313,1.84502557387665794619922642338045149e-108
+22.427877646157565,2.36451716049539261617493738713686258e-110
+22.431216930220238,2.19388777754940437305908296949569839e-110
+22.512859528393424,3.50287730022711472517414316071052114e-111
+22.579404089877009,7.81345584040994350346928854425047629e-112
+22.616147052085523,3.40599849832761527647579373055354699e-112
+22.702051802192646,4.86272490291917742478828667285716129e-113
+22.815003738631976,3.71940709017706937890839386396666221e-114
+22.818334194950214,3.44724152032595240616171018041655545e-114
+23.038293363232469,2.22432101872549340517292718601970339e-116
+23.053894646233552,1.55255672854980030489279672232081003e-116
+23.24935419727446,1.68180419864295400785682783591631567e-118
+23.377443547035458,8.4895774491447974159858554335555818e-120
+23.485011472664496,6.82761749626162503856953026314302184e-121
+23.569859235037907,9.27488892163790851217349460280416751e-122
+23.581998772343532,6.96647781933654039867486982428763037e-122
+23.824434442029684,2.2250396969210040638379381623258047e-124
+23.866391120576459,8.18158200357562020638054684680966612e-125
+24.002581727968614,3.14187067890053920721671379797131869e-126
+24.034179321360053,1.47093074221411121413199328664839452e-126
+24.230917441614171,1.27541719757539517663080540705089129e-128
+24.250228436198846,7.98646999370397239459644225715787421e-129
+24.377642871899642,3.60523718199448158297197067803024507e-130
+24.549379657846821,5.39931962065863703148058069357789445e-132
+24.73271961033387,5.89293553355431487170180374476601124e-134
+24.755538661307153,3.3505239019819847817751008857220986e-134
+24.888502747151353,1.23523906162254265622518118043614501e-135
+24.922052344479873,5.35637576689186754499748062631498432e-136
+24.948300527136428,2.78370985371009025460108380537364692e-136
+25.071792025625356,1.26850814229521933206171160012743867e-137
+25.200281558546479,5.01931805048536570864004135358027704e-139
+25.267413895427804,9.22458317415846738107098299108188525e-140
+25.43946744086557,1.17622215803162216822140098549799337e-141
+25.457633671697184,7.40820811913282765929847859788209406e-142
+25.698586317011415,1.55993711803133095800173256422078888e-144
+25.813793440945126,8.02465869613639373158750742935651335e-146
+25.94959343095444,2.38779541799282818516680924786676899e-147
+26.112751114444141,3.41560603675373410771178821700640833e-149
+26.206275691993341,2.95761320536262894111927702431003016e-150
+26.227741973691838,1.68472255864428393402840791546623002e-150
+26.24503619930368,1.07021853348471669887732188976780186e-150
+26.268398849013384,5.79515059477128846239384110172616337e-151
+26.370146498690101,3.98159471299283420118745518841048734e-152
+26.446597141202499,5.28742056110062008752565846527367413e-153
+26.476030358874272,2.42659469116947940617218377249426421e-153
+26.544354613496385,3.96610642609261582878121567403073218e-154
+26.647109051750576,2.57935785083461037308486385898118167e-155
+26.673964028099579,1.26058058262397050576614031768937651e-155
+26.710402348016594,4.76615155513166800539304935864001792e-156
+26.781384786442196,7.13944846180284886854110399470361435e-157
+26.830428642983733,1.91740073259797736206727949624842159e-157
+26.843079561045045,1.36541840648252612994567440556737827e-157
+26.8801676651318,5.04198224357057095009287918015293015e-158
+26.891359384277887,3.73183993673691175772989548880441847e-158
+27.223303848947609,4.69130270320963090531676772360507472e-162
+27.243197269478458,2.72903427166656783220087000192056586e-162
+27.328837773458854,2.63727081650095983962731498681579656e-163
+27.523568452324234,1.26388667509231243411661421425673552e-165
+27.530426427511326,1.04645909060504474021406666019605943e-165
+27.550648283597798,5.99590346704424679214863927177246804e-166
+27.576836845815652,2.91311132376713757465900842889285862e-166
+27.579793256857737,2.68502183004714398370340377285908367e-166
+27.643430607976462,4.63271971828614805038654828010634241e-167
+27.744836262976538,2.79375748928918103785523955990751156e-168
+27.759189721889683,1.8758278497767531751206999905265991e-168
+27.99440899750747,2.66351001887694855836905495190624752e-171
+28.038050115603397,7.84259927212772256233244264089241512e-172
+28.182615800118608,1.34765478599589538986533418289997826e-173
+28.234433593234336,3.12441630199162487709650039206577795e-174
+28.462791927124989,4.82282947258092814793120660902011453e-177
+28.511576229066176,1.20157523742759237432608672547080638e-177
+28.561020698101661,2.93074413284927022452385706373736526e-178
+28.563899119767587,2.69943247806061530853221293628040575e-178
+28.587152963978209,1.38895369570550173469898202487279827e-178
+28.729239341580683,2.36737473115176281470439526615035105e-180
+28.885751780687269,2.60705289401543374843520184978477025e-182
+28.900311035233027,1.71182392538009344646308128423848044e-182
+29.129268899479197,2.23033179547046539217315187192822866e-185
+29.254836107131158,5.70735691309967209570140828078905696e-187
+29.297918096158433,1.61683651579297419916023505165670379e-187
+29.348845303464238,3.63169189452636212690740750107894658e-188
+29.703816418083747,1.01922692375231408337907208228653764e-192
+29.854678606576503,1.14071146135503913260724131887432141e-194
+30.15933687532069,1.22153650917919994989788433636401132e-198
+30.197739404155943,3.83343938493704944940299462328952335e-199
+30.337235290995796,5.62230998029139764647594090581665023e-201
+30.50601995735158,3.31086182444036672335619143182460625e-203
+30.555183139008911,7.38028391244517127688288909193334354e-204
+30.6864276565083,1.326553693721432955929186792216677e-205
+30.733459834198335,3.1293143824825475892075604580436094e-206
+30.807083801389922,3.24777304201842890977856025780910712e-207
+30.847334983260602,9.39072992799877656647909673231266801e-208
+30.855996036145591,7.18873428681003616718504480987464731e-208
+30.92050442686439,9.80163194370539902324759109386979133e-209
+31.030726155324007,3.22504896213609036396119572684455429e-210
+31.049281537252057,1.81301101219813577788945249301504963e-210
+31.085170994251555,5.94522405621394885133328175582428425e-211
+31.114073483166191,2.41991334241063301153038621887694782e-211
+31.161968558271621,5.44642248399258519096400109388804295e-212
+31.282357699263155,1.26964160797819140484648468313031196e-213
+31.306597981276767,5.94608361504714431746187321295913162e-214
+31.71735074417483,1.42194793670750522458496522882823643e-219
+31.77105174294579,2.58549634452410795982706342286198908e-220
+32.081053980144382,1.30096989450882600201004195726506391e-224
+32.246581655070315,6.33990229777621905351017091349778036e-227
+32.598901996749895,6.93511297758352535019855881214930472e-232
+32.641063172565637,1.7529507725323378580961916273811533e-232
+32.672859040666296,6.20607833732514980249441365092636871e-233
+32.927263316930421,1.47522222897383396132020431157217796e-236
+32.940454612557396,9.55393838109747384648376242732066506e-237
+33.249062720652205,3.50427263706277166294011256609523121e-241
+33.300607187863882,6.305576692590465341893046270254174e-242
+33.476204724736789,1.79262812818781705911005503880861323e-244
+33.601474546509515,2.68437652278379019767100478610357407e-246
+33.868340733193413,3.30383100407432913787436969546440723e-250
+33.868395649286455,3.29769185872984060431147828644850751e-250
+33.891491986614305,1.50790334987339330731404275655445812e-250
+33.921438393048817,5.46261974573603965797172778669246696e-251
+34.122533561466042,5.83588987533488667470436194698796764e-254
+34.297314642473786,1.47690610610429712628394633315987178e-256
+34.585451493017182,7.23581680695848214353143353057505811e-261
+34.737407854044761,3.73291233216487658040993814471759479e-263
+34.747986438765402,2.58483105497938079404956939618899644e-263
+35.19317736059336,4.47797174355355503950439345828512693e-270
+35.59857237711514,2.62575766530712404998614456707707839e-276
+35.683122442279448,1.28984055607470870084805633959883337e-277
+35.813236770984773,1.23162988853335155130250806151856513e-279
+36.05829192504433,1.84491740259966809336173104302220879e-283
+36.137278394701639,1.06586107010595364244048821813290716e-284
+36.493464681698534,2.57090042605882354548654991360323149e-290
+36.575229696288304,1.29642420097054495994158170729283961e-291
+36.736048354349947,3.56960326896944090641497982438710979e-294
+36.897858682741052,9.23357594915978335709615031089359152e-297
+37.24023034340086,2.84164052833718007182742812619162317e-302
+37.241798857972107,2.68040650012257858768375521590448578e-302
+37.385591232196148,1.25321700160118730692068072090843918e-304
+37.470916836046811,5.14124699464527286965898961012399005e-306
+37.525702754368041,6.58965774313773063275144033180968606e-307
+37.58549991309831,6.97525056391994306694587874878688494e-308
+38.566678451381776,4.15489937717770761165065581394518659e-324
+38.742885563849477,4.57586599381444851323974810839624684e-327
+38.764021250246373,2.01720952090723676969157419119013115e-327
diff --git a/commons-statistics-examples/examples-jmh/pom.xml b/commons-statistics-examples/examples-jmh/pom.xml
index 32be83e..d2f8ec4 100644
--- a/commons-statistics-examples/examples-jmh/pom.xml
+++ b/commons-statistics-examples/examples-jmh/pom.xml
@@ -37,6 +37,11 @@
     </dependency>
 
     <dependency>
+      <groupId>org.apache.commons</groupId>
+      <artifactId>commons-rng-simple</artifactId>
+    </dependency>
+
+    <dependency>
       <groupId>org.openjdk.jmh</groupId>
       <artifactId>jmh-core</artifactId>
       <version>${jmh.version}</version>
diff --git a/commons-statistics-examples/examples-jmh/src/main/java/org/apache/commons/statistics/examples/jmh/distribution/NormalPDFPerformance.java b/commons-statistics-examples/examples-jmh/src/main/java/org/apache/commons/statistics/examples/jmh/distribution/NormalPDFPerformance.java
new file mode 100644
index 0000000..c290df5
--- /dev/null
+++ b/commons-statistics-examples/examples-jmh/src/main/java/org/apache/commons/statistics/examples/jmh/distribution/NormalPDFPerformance.java
@@ -0,0 +1,204 @@
+/*
+ * 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.statistics.examples.jmh.distribution;
+
+import java.util.concurrent.TimeUnit;
+import java.util.function.DoubleSupplier;
+import java.util.function.DoubleUnaryOperator;
+import org.apache.commons.rng.sampling.distribution.ContinuousUniformSampler;
+import org.apache.commons.rng.sampling.distribution.ZigguratSampler;
+import org.apache.commons.rng.simple.RandomSource;
+import org.apache.commons.statistics.distribution.NormalDistribution;
+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;
+
+/**
+ * Executes a benchmark of the probability density function for
+ * the normal distribution.
+ */
+@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 NormalPDFPerformance {
+
+    /**
+     * Source of a function to compute the normal distribution PDF.
+     * The source of the random X deviate is implemented in sub-classes.
+     */
+    @State(Scope.Benchmark)
+    public abstract static class Source {
+        /** The method. */
+        @Param({"baseline", "std", "hp"})
+        private String method;
+
+        /** The generator to supply the next density value. */
+        private DoubleSupplier gen;
+
+        /**
+         * @return the next value
+         */
+        public double next() {
+            return gen.getAsDouble();
+        }
+
+        /**
+         * Create the normal distribution PDF and a supplier of random X deviates.
+         * This is used to create a supplier of density values.
+         */
+        @Setup
+        public void setup() {
+            // Note:
+            // These exist to exercise the full the density function.
+            // If these are different from a standard normal distribution N(0, 1)
+            // then the supplier of values may not provide a suitable distribution
+            // of random X deviates.
+            final double mean = 0;
+            final double sd = 1;
+
+            DoubleUnaryOperator fun;
+            if ("baseline".equals(method)) {
+                // No density function. This tests baseline speed of generating the X deviate.
+                fun = x -> x;
+            } else if ("std".equals(method)) {
+                // Standard precision implementation
+                fun = new StandardNormalDistribution(mean, sd)::density;
+            } else if ("hp".equals(method)) {
+                // High-precision implementation in the NormalDistribution class
+                fun = NormalDistribution.of(mean, sd)::density;
+            } else {
+                throw new IllegalStateException("Unknown method: " + method);
+            }
+            final DoubleSupplier nextValue = createValues();
+            gen = () -> fun.applyAsDouble(nextValue.getAsDouble());
+        }
+
+        /**
+         * Creates the generator of random X deviates used to test the normal distribution.
+         *
+         * @return the generator
+         */
+        protected abstract DoubleSupplier createValues();
+
+        /**
+         * Implementation of the normal distribution using standard precision.
+         */
+        private static class StandardNormalDistribution {
+            /** The mean. */
+            private final double mean;
+            /** The standard deviation. */
+            private final double sd;
+            /** Density factor sd * sqrt(2 pi). */
+            private final double sdSqrt2pi;
+
+            /**
+             * @param mean Mean
+             * @param sd Standard deviation
+             */
+            StandardNormalDistribution(double mean, double sd) {
+                this.mean = mean;
+                this.sd = sd;
+                sdSqrt2pi = sd * Math.sqrt(2 * Math.PI);
+            }
+
+            /**
+             * Compute the probability density function.
+             *
+             * @param x Point x
+             * @return pdf(x)
+             */
+            double density(double x) {
+                final double z = (x - mean) / sd;
+                return Math.exp(-0.5 * z * z) / sdSqrt2pi;
+            }
+        }
+    }
+
+    /**
+     * Provides a source of random X deviates from a uniform distribution.
+     */
+    @State(Scope.Benchmark)
+    public static class UniformSource extends Source {
+        /** The lower bound. */
+        @Param({"0"})
+        private double low;
+        /**
+         * The higher bound.
+         *
+         * <p>Note: A standard normal distribution density function is zero above approximately 38.5.
+         *
+         * <p>Note: The high precision normal distribution uses a high precision exponential
+         * function when x^2 is less than 2.0. The worse case scenario for a 50-50 random branch
+         * for the distribution to choose a standard or high precision can be created using a
+         * range of [0, 2 * sqrt(2)], or [0, 2.828].
+         */
+        @Param({"1", "2.828", "4", "16", "64"})
+        private double high;
+
+        /** {@inheritDoc} */
+        @Override
+        protected DoubleSupplier createValues() {
+            return ContinuousUniformSampler.of(RandomSource.XO_RO_SHI_RO_128_PP.create(), low, high)::sample;
+        }
+    }
+
+    /**
+     * Provides a source of random X deviates from a normal distribution.
+     */
+    @State(Scope.Benchmark)
+    public static class NormalSource extends Source {
+        /** {@inheritDoc} */
+        @Override
+        protected DoubleSupplier createValues() {
+            return ZigguratSampler.NormalizedGaussian.of(RandomSource.XO_RO_SHI_RO_128_PP.create())::sample;
+        }
+    }
+
+    /**
+     * Compute the PDF from a uniformally distributed X deviate.
+     *
+     * @param source source of the function
+     * @return the value
+     */
+    @Benchmark
+    public double uniform(UniformSource source) {
+        return source.next();
+    }
+
+    /**
+     * Compute the PDF from a normally distributed X deviate.
+     *
+     * @param source source of the function
+     * @return the value
+     */
+    @Benchmark
+    public double normal(NormalSource source) {
+        return source.next();
+    }
+}