/*
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;
}
}