clock_t, defined in time.h.
This
time must be divided by CLOCKS_PER_SEC, also defined in time.h, in order
to covert it into seconds. The ability to measure how much CPU time a given
code consumes is useful in scientific programming: e.g., because it allows the effectiveness
of the various available compiler optimization flags to be determined. Optimization
usually (but not always!) speeds up the execution of a program.
However, over aggressive
optimization can
often slow a program down again.
The program listed below illustrates the simple use of the clock() function. The program compares the CPU time required to raise a double to the fourth power via a direct calculation and via a call to the pow() function. Actually, both operations are performed a million times and the elapsed CPU time is then divided by a million.
/* timing.c */
/*
Program to test operation of clock() function
*/
#include <time.h>
#include <math.h>
#define N_LOOP 1000000
int main()
{
int i;
double a = 11234567890123456.0, b;
clock_t time_1, time_2;
time_1 = clock();
for (i = 0; i < N_LOOP; i++) b = a * a * a * a;
time_2 = clock();
printf ("CPU time needed to evaluate a*a*a*a: %f microsecs\n",
(double) (time_2 - time_1) / (double) CLOCKS_PER_SEC);
time_1 = clock();
for (i = 0; i < N_LOOP; i++) b = pow(a, 4.);
time_2 = clock();
printf ("CPU time needed to evaluate pow(a, 4.): %f microsecs\n",
(double) (time_2 - time_1) / (double) CLOCKS_PER_SEC);
return 0;
}
The typical output from this program is as follows:
CPU time needed to evaluate a*a*a*a: 0.190000 microsecs CPU time needed to evaluate pow(a, 4.): 1.150000 microsecs %Clearly, evaluating a fourth power using the pow() function is a lot more expensive than the direct calculation. Hence, as has already been mentioned, the pow() function should not be used to raise floating point quantities to small integer powers.