// Uebung 10 zum Fach Betriebssysteme
// zu kompilieren mit: "gcc -Wall -lm -o Bs1ueb10 Bs1ueb10.c"
// Copyright Matthias Jauernig, 03IN
#include <stdio.h>
#include <sys/time.h>
#include <math.h>

double x(double t){
	double a = 1e-8;  // Flankenabfallzeit
	double f = 1e7;   // Frequenz
	return (4 / (a*M_PI)*(sin(a)*sin(2*M_PI*f*t) + (1/9)*sin(3*a)*sin(2*M_PI*f*t)));
}

int main(void){
	int i, j, count=1000000;
	hrtime_t t1, t2, td, tdsum;
	struct tm *z;
	time_t z1;
	
	z1 = time(NULL);
	z  = localtime(&z1);
	printf("Heute ist der %d.%d.%d, es ist jetzt %d:%d:%d Uhr\n",
	    z->tm_mday,z->tm_mon+1,z->tm_year+1900,z->tm_hour,z->tm_min,z->tm_sec);
	printf("Heute ist der %d. Tag im Jahr.\n\n",z->tm_yday+1);
	
	tdsum = 0;
	for(j=0; j<10; j++){
		t1 = gethrtime();
		for(i=0;i<count; i++)
			x(i*1e-17);
		t2 = gethrtime();
		td = t2-t1;
		tdsum += td/count;
		printf("Zyklus %d: Ausführungen von x(t) pro Sekunde: %lld\n",j,(hrtime_t)(1e9*count/td));
		printf("Zyklus %d: Durchschnittliche Nanosekunden fuer x(t) benoetigt:  %lld\n",j,td/count);
	}
	printf("\n=> Durchschnittliche Ausführungen von x(t) pro Sekunde: %lld\n",(hrtime_t)(1e9*10/tdsum));
	printf("=> Durchschnittliche Nanosekunden fuer x(t) benoetigt:  %lld\n\n",tdsum/10);
	return 0;
}

