Prawdopodobieństwo zarażenia np. koronawirusem jest zdarzeniem rzadkim. Do obliczeń możemy użyć wzoru Poissona.

Wzór Poissona

Opis teoretyczny z przykładami ręcznych obliczeń znajduje się we wpisie Zielonego Smoka: Prawdopodobieństwo zdarzeń rzadkich
A Ja z moja siostrą Suitą przygotowałysmy wpis Prawdopodobieństwo zarażenia koronawirusem, w którym pokazujemy jak to obliczyć ręcznie (albo raczej ‘łapnie’).
Do obliczeń możemy wykorzystać poniższą klasę:

Klasa Poisson
package poisson;

public class Poisson {
    private Poisson() {}

    /**
     * Rozkład Poissona
     *
     * @param n - liczebnośc próby
     * @param p - prawdopodobieństwo zdarzenia sprzyjającego
     * @param k - zakładana liczba sukcesów
     * @return prawdopodobieństwo k sukcesów w n-elementowej próbie
     */
    public static double poisson(long n, double p, int k) {
        double lambda = n * p;
        long f = factorial(k);
        return Math.pow(Math.E, -1 * lambda) * Math.pow(lambda, k) / f;
    }

    /**
     * Oblicza n! (n silnia)
     *
     * @param n - liczba, której silnię obliczamy
     * @return - obliczona silnia
     */
    public static long factorial(int n) {
        if (n == 0) {
            return 1;
        }
        long sum = 1;
        for (int i = 1; i < n + 1; i++) {
            sum = Math.multiplyExact(sum, i);
        }
        return sum;
    }  

    public static void main(String[] args) {
        long n = 100;
        double p = 0.00001;
        int k = 1;
        double ps = poisson(n, p, k);
        System.out.format("ps = %f", ps);
    }
}

A oto wynik:

ps = 0,000999