/*****************************************
**																			**
**							SpeedTest								**
**																			**
**			Kopierrecht bei COMPIUTECK 			**
**																			**
**		Geschrieben von Matthias Henze		**
**																			**
*************** © 08/12/96 **************/

#include <stdio.h>
#include <time.h>
#include <math.h>
#include <clib/exec_protos.h>

clock_t timestart;
double z = 0;

void end (void)
{
double y;
clock_t timeend;
	timeend = clock ();
	y = ((timeend - timestart) / (double)50);
	printf ("Benötigte Zeit: %.5g  s\n", y);
	z = z + y;
}

void main (void)
{
	double *d, x;
	double a = 80.9394;
	double b = -80.9394;
	int *e, i, loop;

printf("\nGeben Sie bitte die Anzahl der Testdurchläufe an: "); fflush (stdout);
scanf("%ld",&loop);

Forbid ();

/*--fabs--*/
printf ("fabs (80.9394)\n");
timestart = clock ();
	for (i = 1; i < loop; i++)
		x = fabs (a);
end();
printf ("Der absolute Betrag von 80.9394 sollte 80.9394 sein und ist: %g\n\n", x);

printf ("fabs (-80.9394)\n");
timestart = clock ();
	for (i = 1; i < loop; i++)
		x = fabs (b);
end();
printf ("Der absolute Betrag von -80.9394 sollte 80.9394 sein und ist: %g\n\n", x);

/*--floor--*/
printf ("floor (80.9394)\n");
timestart = clock ();
	for (i = 1; i < loop; i++)
		x = floor (a);
end();
printf ("Die nächstkleinere Ganzzahl von 80.9394 sollte 80 sein und ist: %g\n\n", x);

printf ("floor (-80.9394)\n");
timestart = clock ();
	for (i = 1; i < loop; i++)
		x = floor (b);
end();
printf ("Die nächstkleinere Ganzzahl von -80.9394 sollte -81 sein und ist: %g\n\n", x);

/*--sqrt--*/
printf ("sqrt (9)\n");
timestart = clock ();
	for (i = 1; i < loop; i++)
		x = sqrt (9);
end();
printf ("Die Quadratwurzel von 9 sollte 3 sein und ist: %g\n\n", x);

printf ("sqrt (-9)\n");
timestart = clock ();
	for (i = 1; i < loop; i++)
		x = sqrt (-9);
end();
printf ("Die Quadratwurzel von -9 sollte NaN (Not a Number) sein und ist: %g\n\n", x);

/*--ceil--*/
printf ("ceil (80.9394)\n");
timestart = clock ();
	for (i = 1; i < loop; i++)
		x = ceil (a);
end();
printf ("Die nächstgrößere Ganzzahl von 80.9394 sollte 81 sein und ist: %g\n\n", x);

printf ("ceil (-80.9394)\n");
timestart = clock ();
	for (i = 1; i < loop; i++)
		x = ceil (b);
end();
printf ("Die nächstgrößere Ganzzahl von -80.9394 sollte -80 sein und ist: %g\n\n", x);

/*--frexp--*/
printf ("frexp (9)\n");
timestart = clock ();
	for (i = 1; i < loop; i++)
		x = frexp (9,(void *) &e);
end();
printf ("Die Mantisse von 9 sollte 0.5625 sein und ist: %g\n", x);
printf ("Der Exponent von 9 sollte 4 sein und ist: %d\n\n", e);

printf ("frexp (88)\n");
timestart = clock ();
	for (i = 1; i < loop; i++)
		x = frexp (88,(void *) &e);
end();
printf ("Die Mantisse von 88 sollte 0.6875 sein und ist: %g\n", x);
printf ("Der Exponent von 88 sollte 7 sein und ist: %d\n\n", e);

/*--modf--*/
printf ("modf (80.9394)\n");
timestart = clock ();
	for (i = 1; i < loop; i++)
		x = modf (a,(void *) &d);
end();
printf ("Der Nachkommateil von 80.9394 sollte 0.9394 sein und ist: %g\n", x);
printf ("Der Vorkommateil von 80.9394 sollte 80 sein und ist: %g\n\n", d);

printf ("modf (-80.9394)\n");
timestart = clock ();
	for (i = 1; i < loop; i++)
		x = modf (b,(void *) &d);
end();
printf ("Der Nachkommateil von -80.9394 sollte -0.9394 sein und ist: %g\n", x);
printf ("Der Vorkommateil von -80.9394 sollte -80 sein und ist: %g\n\n", d);

/*--fmod--*/
printf ("fmod (5.7, 1.5)\n");
timestart = clock ();
	for (i = 1; i < loop; i++)
		x = fmod (5.7,1.5);
end();
printf ("Das Ergebnis dieser Funktion sollte 1.2 sein und ist: %g\n\n", x);

printf ("fmod (-5.7, 1.5)\n");
timestart = clock ();
	for (i = 1; i < loop; i++)
		x = fmod (-5.7,1.5);
end();
printf ("Das Ergebnis dieser Funktion sollte -1.2 sein und ist: %g\n\n", x);

/*--ldexp--*/
printf ("ldexp (9, 3)\n");
timestart = clock ();
	for (i = 1; i < loop; i++)
		x = ldexp (9,3);
end();
printf ("Das Produkt von 9 * (2³) sollte 72 sein und ist: %g\n\n", x);

printf ("ldexp (-9, 3)\n");
timestart = clock ();
	for (i = 1; i < loop; i++)
		x = ldexp (-9,3);
end();
printf ("Das Produkt von -9 * (2³) sollte -72 sein und ist: %g\n\n", x);

/*--cos--*/
printf ("cos (0)\n");
timestart = clock ();
	for (i = 1; i < loop; i++)
		x = cos (0);
end();
printf ("Der Cosinus von 0 sollte 1 sein und ist: %g\n\n", x);

printf ("cos (1)\n");
timestart = clock ();
	for (i = 1; i < loop; i++)
		x = cos (1);
end();
printf ("Der Cosinus von 1 sollte 0.540302 sein und ist: %g\n\n", x);

Permit ();

printf ("Gesamtzeit für %d Durchgänge: %.5g  s\n", loop, z);

exit (0);

}
