/********************************************
**                                         **
**                SpeedTest                **
**                                         **
**  Copyright 1996/98 by CyberdyneSystems  **
**                                         **
**        written by Matthias Henze        **
**                                         **
***************** 11/07/97 *****************/

#include <math.h>
#include <pragma/exec_lib.h>

#define STORMAMIGA_NOWB
#include <stormamiga.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;
}

int 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: ");
scanf_("%d",&loop);

Forbid ();

/*--fabs--*/
printf ("fabs (80.9394)\n");
timestart = clock ();
  for (i = 0; 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 = 0; 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 = 0; 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 = 0; 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 = 0; 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 = 0; 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 = 0; 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 = 0; 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 = 0; i < loop; i++)
    x = frexp (9,(void *) &e);
end();
printf ("Die Mantisse von 9 sollte 0.5625 sein und ist: %g\nDer Exponent von 9 sollte 4 sein und ist: %d\n\n", x, e);

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

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

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

/*--fmod--*/
printf ("fmod (5.7, 1.5)\n");
timestart = clock ();
  for (i = 0; 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 = 0; 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 = 0; 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 = 0; i < loop; i++)
    x = ldexp (-9,3);
end();
printf ("Das Produkt von -9 * (2³) sollte -72 sein und ist: %g\n\n", x);

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

printf ("exp (1)\n");
timestart = clock ();
  for (i = 0; i < loop; i++)
    x = exp (1);
end();
printf ("Das Ergebnis dieser Funktion sollte 2.71828 sein und ist: %g\n\n", x);

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

printf ("log (9)\n");
timestart = clock ();
  for (i = 0; i < loop; i++)
    x = log (9);
end();
printf ("Der Logarithmus naturalis von 9 sollte 2.19722 sein und ist: %g\n\n", x);

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

printf ("log10 (9)\n");
timestart = clock ();
  for (i = 0; i < loop; i++)
    x = log10 (9);
end();
printf ("Der dekadische Logarithmus von 9 sollte 0.954243 sein und ist: %g\n\n", x);

/*--pow--*/
printf ("pow (9,1)\n");
timestart = clock ();
  for (i = 0; i < loop; i++)
    x = pow (9,1);
end();
printf ("Die Potenz 9¹ sollte 9 sein und ist: %g\n\n", x);

printf ("pow (0.9,3)\n");
timestart = clock ();
  for (i = 0; i < loop; i++)
    x = pow (0.9,3);
end();
printf ("Die Potenz 0.9³ sollte 0.729 sein und ist: %g\n\n", x);

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

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

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

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

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

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

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

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

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

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

printf ("sinh (1)\n");
timestart = clock ();
  for (i = 0; i < loop; i++)
    x = sinh (1);
end();
printf ("Der Sinus hyperbolicus von 1 sollte 1.1752 sein und ist: %g\n\n", x);

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

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

/*--atan2--*/
printf ("atan2 (9,3)\n");
timestart = clock ();
  for (i = 0; i < loop; i++)
    x = atan2 (9,3);
end();
printf ("Der Arkustangens von 9/3 sollte 1.24905 sein und ist: %g\n\n", x);

printf ("atan2 (90,15)\n");
timestart = clock ();
  for (i = 0; i < loop; i++)
    x = atan2 (90,15);
end();
printf ("Der Arkustangens von 90/15 sollte 1.40565 sein und ist: %g\n\n", x);

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

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

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

printf ("tanh (1)\n");
timestart = clock ();
  for (i = 0; i < loop; i++)
    x = tanh (1);
end();
printf ("Der Tangens hyperbolicus von 1 sollte 0.761594 sein und ist: %g\n\n", x);

Permit ();

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