Nombre décimal dans un intervalle

Badgones57

XLDnaute Nouveau
Bonjour, je poste ce message pour trouver un peu d'aide. Je souhaite obtenir un nombre décimal aléatoire de l'intervalle [7;10] ainsi de faire une simulation à l'aide d'un tableur, la loi de X (Dans un pays, la probabilité qu'il pleuve est, chaque jour de l'année, égale à 0,4. On considère la variable aléatoire X qui, à une semaine de l'année prise au hasard, fait correspondre le nombre de jours où il a plu).

Je vous remercie d'avance :D!
 

ROGER2327

XLDnaute Barbatruc
Re : Nombre décimal dans un intervalle

Re...


Bonsour®


nan...nan... celui-la il travaillait chez Lotus !


(...)
Tant pis pour eux.


(...)
nb:
sauf à tronquer le résultat de ALEA() [0 ; 1[
je n'ai jamais non plus obtenu : 0
(...)
La probabilité étant très faible, rien d'étonnant. On pourrait espérer que la procédure :
VB:
Sub toto()
Dim i&, n&, x#
    For i = 0 To 9
        n = 0
        Do
            n = n + 1
            x = Evaluate("=RAND()")
        Loop Until x = 0 Or n = 1000000
        Range("L1").Offset(i).Value = i: If x = 0 Then Range("M1").Offset(i).Value = n Else Range("M1").Offset(i).Value = ""
    Next
End Sub
fournisse un résultat de temps à autre... surtout si l'on n'est pas pressé...


Mais on n'aura pas de meilleur résultat si on utilise
VB:
Sub toto()
Dim i&, n&, x#
    For i = 0 To 9
        n = 0
        Do
            n = n + 1
            x = Evaluate("=RAND()")
        Loop Until x = 0.5304952 Or n = 1000000
        Range("L1").Offset(i).Value = i: If x = 0.5304952 Then Range("M1").Offset(i).Value = n Else Range("M1").Offset(i).Value = ""
    Next
End Sub
ou tout code analogue avec le nombre qu'on voudra à la place de 0.5304952.

Il faut bien voir qu'un générateur aléatoire (bien fait) travaillant dans [0;1[ est susceptible de renvoyer tout nombre de cet intervalle avec la même probabilité. Si l'on admet que le générateur travaille sur des nombres à 15 chiffres, cette probabilité est égale à 10^-15. Cela signifie qu'à raison d'un million de calculs par seconde, on peut espérer voir apparaître un nombre donné tous les 11574 jours et des poussières (~31 ans 8 mois 1 semaine), en moyenne ! Ce qui n'empêche aucunement qu'avec un gros coup de bol, le premier tirage soit... ...zéro.

On aura certainement plus de chance avec cette procédure :
VB:
Sub tata()
Dim i&, n&, x!
    For i = 0 To 99
        Randomize
        n = 0
        Do
            n = n + 1
            x = Rnd
        Loop Until x = 0 Or n = 1000000
        Range("L1").Offset(i).Value = i: If x = 0 Then Range("M1").Offset(i).Value = n Else Range("M1").Offset(i).Value = ""
    Next
End Sub
puisque la fonction Rnd de VisualBasic renvoie un réel de type Single ("dont la valeur est comprise entre -3,402823E38 et -1,401298E-45 pour les nombres négatifs et entre 1,401298E-45 et 3,402823E38 pour les positifs", Guillaume Porte dixit).

Notre générateur étant supposé bien fait puisque c'est un produit Microsoft, il n'y a aucune raison que 0 soit plus "difficile" à obtenir que 0.5304952. Si tel était le cas (et je ne sais absolument pas le prouver), cela voudrait dire que la fonction ALEA() (ou Rnd) est (ou sont) foireuse(s), ce qui ne se peut puisque ce sont des produits Microsoft.

(...)
d'aprés mes recherches sur la toile le nombre aléatoire renvoyé serait la combinaison de 3 nombres eux-même aléatoires, alors 3 fois de suite 0 ???
Deus ex machina ...
Aucun avis sur la question. Ceci dit, "3 fois de suite 0" n'est ni plus ni moins improbable que 3 fois de suite 5, ou 3 fois de suite 9, ou 1, 2, 3, ou 2, 4, 6 ou n'importe quelle combinaison de trois chiffres déterminés...

Faute de publicité du code, je fais confiance à mon fournisseur, comme d'habitude.​




ROGER2327
#5769


Samedi 21 Clinamen 139 (Moreau, insulaire - fête Suprême Quarte)
23 Germinal An CCXX, 5,5798h - marronnier
2012-W15-4T13:23:30Z
 

ROGER2327

XLDnaute Barbatruc
Re : Nombre décimal dans un intervalle

Suite...


Pour Badgones57 : une autre formule possible...
Code:
=ALEA.ENTRE.BORNES(7*10^n;10*10^n)*10^-n
n est le nombre de chiffres après la virgule.​


ROGER2327
#5772


Samedi 21 Clinamen 139 (Moreau, insulaire - fête Suprême Quarte)
23 Germinal An CCXX, 5,9606h - marronnier
2012-W15-4T14:18:20Z
 

winter

XLDnaute Nouveau
Re : Nombre décimal dans un intervalle

Bonjour
pour obtenir un nombre décimal aléatoire à rallonges, tu peux procéder en faisant des tirages aléatoires de chiffres, les traiter sous forme de caractères, les concaténer (c'est à dire les mettre bout à bout) , puis transformer le tout en numérique
par exemple

1) la fonction =ALEA.ENTRE.BORNES(7;10) te donnes un nombre aléatoire entre 7 et 10
2) tu l'exécute et tu en stockes le résultat quelque part. tu rajoutes une virgule derrière
3) puis tu colles derriere autant ALEA.ENTRE.BORNES(0;9) que tu veux, traités sous forme de caractere, pas de numérique
4) tu obtiens un truc du style "7,1298529751985698etc..." qui est du CARACTERE, pas du NUMERIQUE.
5) tu multiplie par 1 le résultat pour transformer en numérique

nb : tu seras limité à 14 décimales, ce qui fait déjà pas mal.

L'astuce que j'ai utilisé est d'utiliser concomitamment la fonction INDEX avec la fonction ALEA.ENTRE.DEUX.BORNES
La fonction INDEX({"poste1";"Poste2";etc...;"Posten"};numero_du_poste_a_extraire) est très pratique !


INDEX({"0";"1";"2";"3";"4";"5";"6";"7";"8";"9"};alea.entre.deux.bornes(1;10)) va te renvoie sous forme de caractere de maniere aléatoire de 0 à 9
Si tu le fais 15 fois de suite et que tu mets le résultats bout à bout, tu obtiendras UNE CHAINE DE CARACTERE qui, transformée en numérique, te donnera un nombre aléatoire de la taille que tu souhaites
Pour le premier poste, il suffit de faire la même chose, mais entre 7 et 10 et de mettre une virgule derrière
INDEX({"7,";"8,";"9;";"10,"}; alea.entre.deux.bornes(1;4)) te donneras, "7," "8," "9," "10," de manière aléatoire
Cela te permettra au passage de travailler la notion de tableau

bonne journée !
 

ROGER2327

XLDnaute Barbatruc
Re : Nombre décimal dans un intervalle

Re...
Bonjour winter



(...)
par exemple

1) la fonction =ALEA.ENTRE.BORNES(7;10) te donnes un nombre aléatoire entre 7 et 10
2) tu l'exécute et tu en stockes le résultat quelque part. tu rajoutes une virgule derrière
3) puis tu colles derriere autant ALEA.ENTRE.BORNES(0;9) que tu veux, traités sous forme de caractere, pas de numérique
4) tu obtiens un truc du style "7,1298529751985698etc..." qui est du CARACTERE, pas du NUMERIQUE.
Exact. Avec un peu de chance, on peut aussi obtenir "10,99999999999999999...". Autrement dit, on obtient des nombres dans l'intervalle [7;11[. Quel rapport avec la question qui est, si j'ai bien lu, de trouver des nombres dans l'intervalle [7;10] ?

(...)
5) tu multiplie par 1 le résultat pour transformer en numérique

nb : tu seras limité à 14 décimales, ce qui fait déjà pas mal.
Exact encore ! Pour ce faire, je suggère :
Code:
=7+4*ALEA()
simple et de bon goût !
J'allais le dire !

En passant, une petite formule renvoyant un aléa à 120 décimales dans l'intervalle [7;11[ :
Code:
=ALEA.ENTRE.BORNES(7;10)&","&GAUCHE(ALEA.ENTRE.BORNES(0;999999999999999)&ALEA.ENTRE.BORNES(0;999999999999999)&ALEA.ENTRE.BORNES(0;999999999999999)&ALEA.ENTRE.BORNES(0;999999999999999)&ALEA.ENTRE.BORNES(0;999999999999999)&ALEA.ENTRE.BORNES(0;999999999999999)&ALEA.ENTRE.BORNES(0;999999999999999)&ALEA.ENTRE.BORNES(0;999999999999999)&REPT(0;120);120)

Bonne journée.



ROGER2327
#5785


Lundi 23 Clinamen 139 (Locus Solus - Vacuation)
25 Germinal An CCXX, 4,7243h - pigeon
2012-W15-6T11:20:18Z
 

winter

XLDnaute Nouveau
Re : Nombre décimal dans un intervalle

heu.... j'avais pas vraiment fait gaffe au bornage;
Pour être honnête, si j'y avais fait gaffe, j'aurais quand même fait l'erreur :(
par contre, il y a un schmilblik soit dans la fonction alea, soit dans la manière d'exécuter le calcul, car la répartition des décimales... n'est pas aléatoire : il y a 2 fois moins de zéro que le reste.
 

winter

XLDnaute Nouveau
Re : Nombre décimal dans un intervalle

En fait, Roger2327, dans la formule que tu proposes, il n'y a pas assez de zéro. (deux fois mois que la normale)
Je pensais que c'était la fonction ALEA qui n'était pas assez aléatoire. Hors, alea.entre.bornes(0;1) repartit correctement les tirages.
Mais l'explication est beaucoup plus triviale : ALEA.ENTRE.BORNES(0;999999999999999) donne un nombre aleatoire qui n'aura pas toujours la même longueur. Donc, on ne peut pas les mettre à la queu-leu-leu comme tu as proposé, car alors, la répartition des chiffre n'est plus équiprobable dans la chaine résultante.

Donc en reprenant ta méthode mélangée à la mienne, on obtient une distribution équiprobable des décimales.

Soit pour un chiffre avec 50 décimales entre 7 et 11

=ALEA.ENTRE.BORNES(7;10)&","&GAUCHE(ALEA.ENTRE.BORNES(0;
9)&ALEA.ENTRE.BORNES(0;9)&ALEA.ENTRE.BORNES(0;9)&ALEA.ENTRE.BORNES(0;9)&ALEA.ENTRE.BORNES(0;9)&ALEA.ENTRE.BORNES(0;9)&ALEA.ENTRE.BORNES(0;9)&ALEA.ENTRE.BORNES(0;9)&ALEA.ENTRE.BORNES(0;9)&ALEA.ENTRE.BORNES(0;9)&ALEA.ENTRE.BORNES(0;9)&ALEA.ENTRE.BORNES(0;9)&ALEA.ENTRE.BORNES(0;9)&ALEA.ENTRE.BORNES(0;9)&ALEA.ENTRE.BORNES(0;9)&ALEA.ENTRE.BORNES(0;9)&ALEA.ENTRE.BORNES(0;9)&ALEA.ENTRE.BORNES(0;9)&ALEA.ENTRE.BORNES(0;9)&ALEA.ENTRE.BORNES(0;9)&ALEA.ENTRE.BORNES(0;9)&ALEA.ENTRE.BORNES(0;9)&ALEA.ENTRE.BORNES(0;9)&ALEA.ENTRE.BORNES(0;9)&ALEA.ENTRE.BORNES(0;9)&ALEA.ENTRE.BORNES(0;9)&ALEA.ENTRE.BORNES(0;9)&ALEA.ENTRE.BORNES(0;9)&ALEA.ENTRE.BORNES(0;9)&ALEA.ENTRE.BORNES(0;9)&ALEA.ENTRE.BORNES(0;9)&ALEA.ENTRE.BORNES(0;9)&ALEA.ENTRE.BORNES(0;9)&ALEA.ENTRE.BORNES(0;9)&ALEA.ENTRE.BORNES(0;9)&ALEA.ENTRE.BORNES(0;9)&ALEA.ENTRE.BORNES(0;9)&ALEA.ENTRE.BORNES(0;9)&ALEA.ENTRE.BORNES(0;9)&ALEA.ENTRE.BORNES(0;9)&ALEA.ENTRE.BORNES(0;9)&ALEA.ENTRE.BORNES(0;9)&ALEA.ENTRE.BORNES(0;9)&ALEA.ENTRE.BORNES(0;9)&ALEA.ENTRE.BORNES(0;9)&ALEA.ENTRE.BORNES(0;9)&ALEA.ENTRE.BORNES(0;9)&ALEA.ENTRE.BORNES(0;9)&ALEA.ENTRE.BORNES(0;9)&ALEA.ENTRE.BORNES(0;9);50)

Si on veut un plus grand chiffre, on peut, dans ce cas, concatener les fonctions

Bon, ceci dit, je ne suis pas certain que ce fût la réponse que le gamin attendait :)

Bonne journée

Winter
 
Dernière édition:

ROGER2327

XLDnaute Barbatruc
Re : Nombre décimal dans un intervalle

Re...


À winter : ma proposition n'est pas très bonne, je le sais. Mais peut être pas pour les raisons que vous dites. Je n'ai pas le temps d'expliquer pourquoi maintenant (et peut-être dans les jours qui suivent car je pense devoir voyager), mais j'y reviendrai. En attendant, une proposition qui devrait être meilleure :
Code:
=ALEA.ENTRE.BORNES(7;10)&","&DROITE(REPT(0;15)&ALEA.ENTRE.BORNES(0;999999999999999);15)&DROITE(REPT(0;15)&ALEA.ENTRE.BORNES(0;999999999999999);15)&DROITE(REPT(0;15)&ALEA.ENTRE.BORNES(0;999999999999999);15)&DROITE(REPT(0;15)&ALEA.ENTRE.BORNES(0;999999999999999);15)&DROITE(REPT(0;15)&ALEA.ENTRE.BORNES(0;999999999999999);15)&DROITE(REPT(0;15)&ALEA.ENTRE.BORNES(0;999999999999999);15)&DROITE(REPT(0;15)&ALEA.ENTRE.BORNES(0;999999999999999);15)&DROITE(REPT(0;15)&ALEA.ENTRE.BORNES(0;999999999999999);15)

Votre dernière proposition doit être également correcte. Il me semble même que la fonction GAUCHE() peut être supprimée sans inconvénient (mais je n'ai pas vérifié).
À bientôt.​


ROGER2327
#5787


Lundi 23 Clinamen 139 (Locus Solus - Vacuation)
25 Germinal An CCXX, 5,4635h - pigeon
2012-W15-6T13:06:45Z
 

pierrejean

XLDnaute Barbatruc
Re : Nombre décimal dans un intervalle

Bonjour à tous :)

Une formule a base d'ALEA pour un decimal entre 7 et 10 avec n decimales

=ARRONDI(7+3,00001*ALEA();4) (3 virgule n zeros et 1) et n en fin de formule

Fichier joint pour Test (formule ALEA.ENTRE.BORNES de ROGER en feuille 2)
 

Pièces jointes

  • alea_7_10.xlsm
    29.5 KB · Affichages: 58

Discussions similaires

Statistiques des forums

Discussions
312 749
Messages
2 091 623
Membres
105 009
dernier inscrit
aurelien76110