Mit System.nanoTime() lässt sich die aktuelle Zeit in Nanosekunden ermitteln. Benutzen Sie dies dazu, um den Zeitbedarf zur Berechnung der Lösung aus Aufgabe 14 und Aufgabe 15 zu berechnen.
Schreiben Sie das Programm so, dass eine Tabelle ausgegeben wird mit den Laufzeiten in Abhängigkeit der vorgegebenen Genauigkeit.
Lösung
Messung der Laufzeit von Aufgabe 14
public class Aufgabe16
{
public static void main(String[] args)
{
// Variablen Deklaration
double dErgebnis, dAbweichung, dEPS;
int iDezimalstellen, iSchritt;
for (iDezimalstellen = 1; iDezimalstellen <= 8; ++ iDezimalstellen)
{
dEPS = 1. / Math.pow(10, iDezimalstellen);
iSchritt = 0;
dErgebnis = 1;
long lStartMS = System.nanoTime();
do
{ // Schleife nährt Pi an bis zur gewählten Abweichung
++ iSchritt;
double dPrev = 4. * dErgebnis;
dErgebnis += Math.pow(-1, iSchritt)*(1. / (2 * iSchritt+1));
dAbweichung = dPrev-dErgebnis * 4;
if (dAbweichung < 0)
dAbweichung *= -1.;
} // end do
while (dAbweichung > dEPS);
System.out.print("Auf "+iDezimalstellen+" Stelle(n) "
+ " berechneter Wert -> Pi="+4. * dErgebnis+" nach "
+ iSchritt+" Schritten");
long lEndMS = System.nanoTime();
long lMS = lEndMS-lStartMS;
System.out.println(" -> Rechenzeit: "+lMS);
} // end for
} // end main
} // end class
Messung der Laufzeit von Aufgabe 15
import java.util.Scanner; // Scanner für die Eingabe von Werten
public class Aufgabe16b
{
public static void main(String[] args)
{
// Variablen Deklaration
Scanner scnEingabe = new Scanner(System.in);
double dErgebnis, dAbweichung, dEPS, dZahl;
int iDezimalstellen, iSchritt;
// Variablen Initialisierung
System.out.print("Berechnung des Cosinus von: ");
dZahl = scnEingabe.nextDouble();
for (iDezimalstellen = 1; iDezimalstellen <= 12; ++ iDezimalstellen)
{ // Berechnung für jede Anzahl an Dezimalstellen
dEPS = 1. / Math.pow(10, iDezimalstellen);
double dZaehler = 1.;
long iNenner = 2;
iSchritt = 0;
dErgebnis = 1;
long lStartMS = System.nanoTime();
do
{ // Schleife nährt den Cosinus an
++ iSchritt;
dZaehler *= (dZahl * dZahl);
if (iSchritt > 1)
iNenner *= (iSchritt * 2- 1) * (iSchritt * 2);
double dPrev = dErgebnis;
dErgebnis += Math.pow(-1, iSchritt) * (dZaehler / iNenner);
dAbweichung = dPrev-dErgebnis;
if (dAbweichung < 0)
dAbweichung *= -1.;
} // end do
while (dAbweichung > dEPS);
System.out.print("Auf "+iDezimalstellen+" Stelle(n), "
+ " Cos("+dZahl+") = "+dErgebnis+" nach "
+ iSchritt+" Schritten");
long lEndMS = System.nanoTime();
long lMS = lEndMS-lStartMS;
System.out.println(" -> Rechenzeit: "+lMS);
} // end for
} // end main
} // end class


