package javacodebook.misc.deb_assert; /** * Berechnung einer Quadratwurzel zur Demonstration von Assertions */ public class Sqrt { static double DELTA = 0.000001; public static void main(String[] args) { if (args.length < 2) printUsage(); try { double zahl = Double.parseDouble(args[0]); double delta = Double.parseDouble(args[1]); double result = sqrt(zahl, delta); System.out.println("sqrt(" + zahl + ") = " + result); } catch (AssertionError e) { System.out.println("FEHLER: " + e.getMessage()); } } public static double sqrt(double number, double delta) throws IllegalArgumentException { // Wurzeln von negativen Zahlen kann die Methode nicht berechnen. if (number < 0) throw new IllegalArgumentException(); // Eine Intervallschachtel für die Berechnung der Wurzel. Die Schleife // bricht nach 10 Durchgängen ab. Das kann zu Problemen führen ... double min = 0, check = 0, max = number; for (int i=0; i<10; i++) { check = ((max-min)/2)+min; if ((check*check) > number) max = check; else min = check; } // Sicherstellen, dass die Wurzeln genau genug ist. assert (number-(min*min)) < delta:"Wurzel zu ungenau"; return min; } private static void printUsage() { System.out.println("Aufruf: java [-ea] javacodebook.misc.deb_assert.Sqrt "); System.exit(0); } }