### Question:
LogNormalDistribution extends AbstractContinuousDistribution { @Override public double cumulativeProbability(double x) { if (x <= 0) { return 0; } final double dev = Math.log(x) - scale; if (Math.abs(dev) > 40 * shape) { return dev < 0 ? 0.0d : 1.0d; } return 0.5 + 0.5 * Erf.value(dev / (shape * SQRT2)); } LogNormalDistribution(double scale,
                                 double shape); double getScale(); double getShape(); @Override double density(double x); @Override double logDensity(double x); @Override double cumulativeProbability(double x); @Override double probability(double x0,
                              double x1); @Override double getMean(); @Override double getVariance(); @Override double getSupportLowerBound(); @Override double getSupportUpperBound(); @Override boolean isSupportConnected(); @Override ContinuousDistribution.Sampler createSampler(final UniformRandomProvider rng);  }### Answer:
@Test void testExtremeValues() { final LogNormalDistribution d = new LogNormalDistribution(0, 1); for (int i = 0; i < 1e5; i++) { final double upperTail = d.cumulativeProbability(i); if (i <= 72) { Assertions.assertTrue(upperTail < 1.0d); } else { Assertions.assertTrue(upperTail > 0.99999); } } Assertions.assertEquals(1, d.cumulativeProbability(Double.MAX_VALUE)); Assertions.assertEquals(0, d.cumulativeProbability(-Double.MAX_VALUE)); Assertions.assertEquals(1, d.cumulativeProbability(Double.POSITIVE_INFINITY)); Assertions.assertEquals(0, d.cumulativeProbability(Double.NEGATIVE_INFINITY)); }