1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one or more
3 * contributor license agreements. See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * The ASF licenses this file to You under the Apache License, Version 2.0
6 * (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17 package org.apache.commons.rng.sampling.distribution;
18
19 /**
20 * Interface for a continuous distribution that can be sampled using
21 * the <a href="https://en.wikipedia.org/wiki/Inverse_transform_sampling">
22 * inversion method</a>.
23 *
24 * @since 1.0
25 */
26 public interface ContinuousInverseCumulativeProbabilityFunction {
27 /**
28 * Computes the quantile function of the distribution.
29 * For a random variable {@code X} distributed according to this distribution,
30 * the returned value is
31 * <ul>
32 * <li>\( \inf_{x \in \mathcal{R}} P(X \le x) \ge p \) for \( 0 \lt p \le 1 \)</li>
33 * <li>\( \inf_{x \in \mathcal{R}} P(X \le x) \gt 0 \) for \( p = 0 \)</li>
34 * </ul>
35 *
36 * @param p Cumulative probability.
37 * @return the smallest {@code p}-quantile of the distribution
38 * (largest 0-quantile for {@code p = 0}).
39 * @throws IllegalArgumentException if {@code p < 0} or {@code p > 1}.
40 */
41 double inverseCumulativeProbability(double p);
42 }