Ku mojemu zdziwieniu okazało się, że algorytm zrobiony bez funkcji matematycznej (\(\displaystyle{ \log _{10}}\)), jest szybszy, niż algorytm z tą funkcją.
Sprawa wygląda tak:
Kod: Zaznacz cały
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <math.h>
#define ROZMIAR 10000000
int iloscCyfr(int liczba)
{
int ilosc = 1;
while (liczba)
{
liczba /= 10;
if (liczba == 0)
break;
else
ilosc++;
}
return ilosc;
}
void wypelnijLosowo(int * tab, int n, int mini, int maxi)
{
int i = 0;
for (i = 0; i < n; i++)
tab[i] = mini + rand() % (maxi - mini + 1);
}
int main()
{
int * liczby = (int *)malloc(ROZMIAR * sizeof(int));
int czas;
int i;
srand(time(0));
wypelnijLosowo(liczby, ROZMIAR, 999999999, 1000000099);
czas = clock();
for (i = 0; i < ROZMIAR; i++)
iloscCyfr(liczby[i]);
printf("%d
", clock() - czas);
czas = clock();
for (i = 0; i < ROZMIAR; i++)
log10((double)liczby[i]) + 1;
printf("%d
", clock() - czas);
free(liczby);
return 0;
}
Kod: Zaznacz cały
652
739