c/random.c
2023-01-07 16:20:12 +01:00

96 lines
2.3 KiB
C

/*
* 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 ;
}