Waldbrandsimulation/ PseudoRandom

/*
Source file: Zufall.java
Author: Markus Bautsch
Licence: public domain
Date: 31 October 2022
Version: 1.1 (17. November 2023), longer pseudo random sequence / + public static long nextIntegerInterval (long zmin, long zmax)
Programming language: Java
 */

/*
Klasse fuer die Berechnung pseudozufaelliger Zahlen
 */

public class PseudoRandom 
{
	// Klassenvariable fuer die aktuelle Zufallszahl
	private static long currentRandomnumber = 1; // wird mit 1 initialisiert

	// Klassenkonstanten
	final private static long m = 9095665192937L; // grosse Primzahl, ungefaehr 2 hoch 43
	final private static long a = 3 * 7 * 11 * 13 * 17 * 19; // Produkt sechs kleiner und teilerfremder ungerader Primzahlen, Zahlenwert = 969969, knapp 2 hoch 20

	// Setzt aktuelle Zufallszahl auf einen ganzzahligen Startwert
	public static void setStartValue (long startwert)
	{
		currentRandomnumber = startwert;
	}

	// Setzt aktuelle Zufallszahl auf die aktuelle Systemzeit in Millisekunden
	public static void setStartValueToSystemTime ()
	{
		setStartValue (java.lang.System.currentTimeMillis ());
	}

	// Berechnet die naechste pseudozufaellige aktuelleZufallszahl im Intervall [1..m-1] (einschliesslich)
	private static void nextRandomnumber ()
	{
		currentRandomnumber = a * currentRandomnumber % m;
	}

	// Berechnet eine pseudozufaellige Zahl im Intervall [0..max-1] (einschliesslich)
	public static long nextInteger (long max)
	{
		nextRandomnumber ();
		long randomNumber = currentRandomnumber % max;
		return randomNumber;
	}

	// Berechnet eine pseudozufaellige Zahl im Intervall [zmin..max] (einschliesslich)
	public static long nextIntegerInterval (long zmin, long zmax)
	{
		long max = zmax - zmin + 1;
		long randomNumber = nextInteger (max) + zmin;
		return randomNumber;
	}

	// Berechnet eine pseudozufaellige Zahl im Intervall [0..1] (ausschliesslich 0 und 1)
	public static double nextProbability ()
	{
		nextRandomnumber ();
		double probability = (double) currentRandomnumber / m;
		return probability;
	}
}