/* * Fichier : random.c * Auteur : Frédéric Henry * Diplôme : Lpro Vision robotique * Date : 23/10/2018 * Version : 0.1 */ /* En-tête : Bibliothèque standard pour I/O. */ #include <stdio.h> /* En-tête : Bibliothèque standard pour "rand()" et "random()". */ #include <stdlib.h> /* Taille du tableau. */ #define N 128 /* Valeur aléatoire maximale. */ #define MAXI 2147483648 /* Fonction principale. * Un programme pour étudier la fonction "random()", * la distribution uniforme et celle normale. */ int main(void) { unsigned i ; unsigned j ; short int flag0 = 0 ; short int flag1 = 1 ; long int maximum = 0 ; long int minimum = MAXI ; long int alea ; unsigned table[N] ; /* Remplissage de zéros. */ for (i=0;i<N;i=i+1) { table[i] = 0 ; } printf("Randomness values :\n") ; for(i=0;i<10000;i=i+1) { /* Création de valeur aléatoire. */ alea = 0 ; for (j=0;j<16;j=j+1) { /* diviser atténue l'amplitude. */ alea = random()/16 + alea ; } /* Classement croissant des valeurs. */ for (j=0;j<N;j=j+1) { /* Multiplier élargit les intervalles. */ if (alea > MAXI / N * j && alea < MAXI / N * (j+1)) { table[j] = table[j] + 1 ; j = N ; } } /* Recherche des extremums. */ if (maximum < alea) { maximum = alea ; } if (minimum > alea) { minimum = alea ; } /* printf("N%02u = %010ld\n", i, alea) ; */ } printf("Highest number : %ld\n", minimum) ; printf("Highest number : %ld\n", maximum) ; /* Multiples binaires. */ alea = 1 ; i = 0 ; while (alea < maximum) { alea = alea * 2 ; i = i + 1 ; if (alea > minimum && flag1 == 1) { printf("2^%2u = %ld\n", i, alea) ; flag1 = 0 ; } } printf("2^%2u = %ld\n", i, alea) ; /* Graphe */ printf("Graph :\n\n") ; for (i=0;i<N;i=i+1) { printf("[ %03u / %03d ]\t", i+1, N) ; /* Sauter des valeurs atténue l'amplitude. */ for (j=0;j<table[i];j=j+2) { printf("|") ; } printf("\n") ; } return 0 ; }