1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
   | #include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
 
#define N_MAX 256
 
int main(void)
{
    unsigned short ep_min = 8;
    unsigned short last_nb = 0, nb = 0, diff = 0, min = N_MAX, max = 0, min_diff = N_MAX, max_diff = 0, i = 0, count = 0, count_ite = 0;
    unsigned range = (floor(N_MAX / ep_min) + (((N_MAX % ep_min) != 0)? 1: 0)), current_page = 0, last_page = 0;
 
    srand( time(NULL) );
 
    last_page = (rand() % range);
 
    if (range <= 5) { return 0; }
 
    for(; i < 15000; i++) {
//      range - 3: une de moins pour l'ancienne, et 2 autres pour chaque côté
        current_page = (last_page + 2 + rand() % (range - 3));
        if (current_page >= range) { current_page -= range; }
 
        nb = (current_page * ep_min + (1 + rand() % ep_min));
 
//      Seulement pour tronquer la dernière page si (N_MAX % ep_min) != 0
        if (nb > N_MAX) { nb = N_MAX; }
 
        diff = ((nb > last_nb)? (nb - last_nb): (last_nb - nb));
 
        if (diff < ep_min) { count++; }
        if (nb > max) { max = nb; }
        if (nb < min) { min = nb; }
        if (diff > max_diff) { max_diff = diff; }
        if (diff < min_diff) { min_diff = diff; }
 
        printf("%d: %d -> %d (%d)\n", nb, last_page, current_page, diff);
 
        last_nb = nb;
        last_page = current_page;
    }
 
    printf("%d - Miss: %d - %d%% / %d - %d -> %d - %d, %d", range, count, ((count * 100) / 15000), count_ite, min, max, min_diff, max_diff);
 
    return 0;
} | 
Partager