Beispiel zur Überprüfung von Determiniertheit und Determinismus in Java

Schauen wir uns folgenden Algorithmus an:

public static double calc(double a, double b){
    int m = Math.random(a,b);
    int s = (a + b)/2;

    if(m<s){
       s = a - b;
    }else{
       s = b - a;
    }

    if(s>0){
       m = s;
    }else{
       m = -s;
    }
    
    return m;
}

Wir fragen uns nun, ob der Algorithmus deterministisch ist, da er dann auch determiniert ist. Durch die if-else Anweisungen werden im letzteren Teil der Methode eigentlich alle Fälle abgedeckt und der Algorithmus wäre so eindeutig. Das Problem liegt jedoch in der Verwendung  der Math.random-Methode.

Ist a ≠ b beeinflusst dies den weiteren Programmverlauf mit einer ZUFÄLLIG GENERIERTEN ZAHL à deshalb ist der Algorithmus nicht deterministisch.

Bei der Überprüfung auf Determiniertheit schauen wir uns an, ob eine eindeutige Abhängigkeit zwischen Eingabe- und Ausgabedaten garantiert wird. Zuerstmal stört und hier Math.random wieder. Aber wenn wir uns den Algorithmus weiter anschauen sehen wir, dass die Methode am Ende entweder den Betrag von  a – b oder von b – a liefert. Deshalb ist der Algorithmus determiniert, jedoch nicht deterministisch.