D'une part, il faut déclarer et définir dans les fichiers
random.h et
random.c la fonction suivante :
double
rndPrecision(int decimals)
{
// ...
}
Son rôle est de fournir un réel aléatoire dans l'intervalle semi-ouvert
[0.0;1.0[, ayant au maximum le nombre de décimales indiqué en
paramètre
Par exemple :
- avec une décimale, le résultat sera parmi
0.0, 0.1, 0.2 ... 0.7, 0.8
ou 0.9,
- avec deux décimales, le résultat sera parmi
0.0, 0.01, 0.02 ... 0.97, 0.98
ou 0.99,
- avec trois décimales, le résultat sera parmi
0.0, 0.001, 0.002 ... 0.997, 0.998
ou 0.999,
- avec quatre décimales, le résultat sera parmi
0.0, 0.0001, 0.0002 ... 0.9997, 0.9998
ou 0.9999,
- ...
.
Elle comporte trois étapes :
- obtenir la puissance de dix correspondant au nombre de décimales
choisi
10 pour une décimale, 100 pour deux, 1000 pour trois...
; la
fonction
mathématique standard pow() vous servira à ce propos pour calculer
10decimals,
- tirer aléatoirement un entier dans cette plage de valeurs
De 0 à 9 pour une décimale, de 0 à 99 pour deux,
de 0 à 999 pour trois...
,
- diviser cet entier aléatoire par cette plage de valeurs pour obtenir
un réel dans [0.0;1.0[.
D'autre part, il faut réaliser, dans le fichier
prog_ex1001.c, cette
fonction :
void
test_rndPrecision(void)
{
printf("\n~~~~ %s() ~~~~\n", __func__);
for(int p=1; p<=4; ++p)
{
printf("precision: %d\n", p);
// ...invoquer un nombre significatif de fois rndPrecision()...
printf("\n");
}
}
qui sera appelée depuis la fonction
main().
Pour chaque précision choisie, elle doit afficher
une séquence de
résultats de la fonction
rndPrecision() afin d'en constater
l'effet.
Il faudra avoir pris soin d'initialiser le générateur pseudo-aléatoire
afin que les séquences obtenues ne soient pas identiques à chaque
exécution du programme.