Forum de mathématiques - Bibm@th.net
Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
#126 27-05-2016 22:35:44
- Dlzlogic
- Banni(e)
- Inscription : 25-04-2016
- Messages : 461
Re : Variable aléatoire at fonction rand()
Léon, je te rappelle que le sujet de ce fil est la vérification de la fiabilité de générateurs de nombres aléatoires. J’exclue les cas sensibles du type jeu d'argent, cryptographie etc.
D'abord il faut définir ce qu'est un nombre aléatoire. Je compte sur toi pour le faire.
Ensuite, il faut définir un protocole pour estimer la qualité de tel ou tel générateur et éventuellement les classer.
Ces deux phrases me paraissent être des méthodes mathématiques normales, peut-être révolues, mais nécessaires si tu veux continuer la discussion.
Hors ligne
#127 27-05-2016 23:26:01
- leon1789
- Membre
- Inscription : 27-08-2015
- Messages : 1 203
Re : Variable aléatoire at fonction rand()
A toi l'honneur, explique nous ...
Hors ligne
#128 27-05-2016 23:39:48
- Dlzlogic
- Banni(e)
- Inscription : 25-04-2016
- Messages : 461
Re : Variable aléatoire at fonction rand()
Bon,
L'aléatoire est une notion parfaitement claire intuitivement. Le Pr John Hartong a écrit un livre très détaillé sur le sujet et a expliqué et justifié la notion mathématique. Il n'est pas question que je le résume ou que je le paraphrase. Pour faire simple, c'est un évènement imprévisible.
Quant au protocole, je l'ai expliqué et j'ai donne un petit programme qui correspond assez bien à une méthode simple.
Pour mémoire, si on propose un protocole il doit être accepté de chacun. Je t'ai dit ce que je pensais de tes scripts.
C'est marrant que tu dises "A toi l'honneur ..." N'aurais-tu pas lu ce que j'ai écrit ?
Hors ligne
#129 28-05-2016 08:28:37
- leon1789
- Membre
- Inscription : 27-08-2015
- Messages : 1 203
Re : Variable aléatoire at fonction rand()
Le Pr. John Hartong , c'est bien son nom ? Quel livre précisément ?
Ne serait-ce pas Jacques Harthong, de l'université de Strasbourg ?
Le livre dont tu parles probablement : "Probabilités & statistiques, de l'intuition aux applications"
https://www.librairiedialogues.fr/livre … diderot-ed
Hors ligne
#130 28-05-2016 11:27:28
- Dlzlogic
- Banni(e)
- Inscription : 25-04-2016
- Messages : 461
Re : Variable aléatoire at fonction rand()
Bonjour,
Oui, c'est bien lui, mais il a signé le livre dont je parle de son pseudo. "Probabilités et statistiques". C'est moi qui ai fait allusion à l'intuition. Titre du Chapitre : Le hasard avec une citation de Pierre-Simon Laplace qui les matheux actuels refusent : elle ne concerne que les probabilités à variables discrète (!) Bref, on n'arrête pas le progrès.
Si je parle de toi en public, le vais te nommer par ton pseudo. Je pense que tu n'apprécierais pas que je t'appelle de ton vrai nom.
D'ailleurs, à mon avis, l'utilisation des pseudos fausse les relations
signé : Un Ami Qui Vous Veut Du Bien.
S'il te plait, revenons au sujet :
tu veux comparer les qualités des générateurs (ordinaires) de nombres aléatoires, quels sont ces critères ?
Evite de parler de différentes lois à choisir suivant ce qu'on veut démontrer. Avant de nommer les critères commence par décrire le phénomène par le détail.
Hors ligne
#131 28-05-2016 12:31:26
- leon1789
- Membre
- Inscription : 27-08-2015
- Messages : 1 203
Re : Variable aléatoire at fonction rand()
Evite de parler de différentes lois à choisir suivant ce qu'on veut démontrer.
oui, évitons d'utiliser des notions de probabilités, évitons de faire des maths...
Bonjour,
Oui, c'est bien lui, mais il a signé le livre dont je parle de son pseudo. "Probabilités et statistiques". C'est moi qui ai fait allusion à l'intuition. Titre du Chapitre : Le hasard avec une citation de Pierre-Simon Laplace qui les matheux actuels refusent : elle ne concerne que les probabilités à variables discrète (!) Bref, on n'arrête pas le progrès.
Si je parle de toi en public, le vais te nommer par ton pseudo. Je pense que tu n'apprécierais pas que je t'appelle de ton vrai nom.
D'ailleurs, à mon avis, l'utilisation des pseudos fausse les relations
signé : Un Ami Qui Vous Veut Du Bien.
Il a signé son livre de son nom ! 
Google vous veut du bien :
http://www.decitre.fr/livres/probabilit … 40705.html
https://www.librairiedialogues.fr/livre … diderot-ed
https://www.librairieflammarion.fr/livr … diderot-ed
Pas capable de comprendre les notions élémentaires de proba,
pas capable de citer correctement l'auteur d'un livre que tu aurais lu et compris... (évidemment, ça fait des années qu'on te fait cette remarque, mais ... comme d'hab...). Il serait de bon ton que tu corriges tes documents qui en parlent, car je pense que tu n'apprécierais pas qu'on déforme ton nom et qu'on change ton prénom.
Hors ligne
#132 28-05-2016 13:38:10
- Dlzlogic
- Banni(e)
- Inscription : 25-04-2016
- Messages : 461
Re : Variable aléatoire at fonction rand()
Bonjour Yoshi,
J'ai relu soigneusement ton message d'hier.
Donc, je confirme que je n'ai pas compris le but. Soit il s'agit de montrer les avantages de Python, alors, pas de problème, chaque langage a ses avantages, si ce n'était pas le cas, il n'y aurait qu'un seul langage universel. C'est un peu comme les langues parlées et écrites.
Concernant le nombre de chiffres possibles dans les opérations arithmétiques, c'est un faux problème, pour plusieurs raisons. Si on veut ajouter des entiers entre-eux, on utilise une variable unsigned int (9 chiffres exacts). Si on doit faire une moyenne et que la somme des éléments risque de dépasser la capacité maximum, on fait, au fur et à mesure, une petite opération telle que la valeur actuelle soit toujours de l'ordre de la moyenne. Cette méthode est souvent utilisée pour calculer un centre de gravité.
Je crois savoir que cette utilisation des grands nombres a été provoquée par des préoccupations de cryptographie.
Autre hypothèse sur le but de ton message, relancer la discussion sur les générateurs. Si c'est le cas, alors, il y a plusieurs points à préciser.
1- on ne peut pas juger un générateur sur le résultat de tirage de 2 valeurs. En l'occurrence x et y. On admet généralement qu'il en faut une trentaine. Habituellement j'en calcule 100.
2- le nombre de tirages n'a pas besoin d'être aussi énorme que 16000.
3- d'où vient le dénominateur 12 dans la formule, ainsi que les constantes 2.6 et 180 ?
4- Une caractéristique d'un caractère aléatoire est la répartition des écarts à la moyenne. Je n'ai pas vu cela dans le calcul.
J'ai proposé dans mon message #86 un petit code pour vérifier efficacement la qualité d'un générateur. Il teste la répartition de 100 nombres.
Hors ligne
#133 28-05-2016 16:35:12
- leon1789
- Membre
- Inscription : 27-08-2015
- Messages : 1 203
Re : Variable aléatoire at fonction rand()
Autre hypothèse sur le but de ton message, relancer la discussion sur les générateurs. Si c'est le cas, alors, il y a plusieurs points à préciser.
1- on ne peut pas juger un générateur sur le résultat de tirage de 2 valeurs. En l'occurrence x et y. On admet généralement qu'il en faut une trentaine. Habituellement j'en calcule 100.
2- le nombre de tirages n'a pas besoin d'être aussi énorme que 16000.
En effet, personne ne prétend juger un générateur sur 2 valeurs tirées. Mort de rire.
Juger un générateur suite à uniquement 30 tirages, fichtre, doit pouvoir se faire... uniquement que dans des cas extrêmes...
16000 tirages sont inutiles ? Mais c'est toi qui a décidé tout seul d'en prendre 16000 : je te rappelle ton document http://www.dlzlogic.com/aides/TCL_Hasard.pdf qui a servi de base aux premiers scripts (page 1 de cette discussion). Le 16000 sort de toi ! Mais tu as le droit de changer d'avis, pas de souci.
3- d'où vient le dénominateur 12 dans la formule, ainsi que les constantes 2.6 et 180 ?
Sans utiliser la loi uniforme pour le 12 et 180, et la loi normale pour le 2.6, ça va être dur de prouver quoi que ce soit.
Mais c'est toi qui a décidé d'éviter de parler de différentes lois pour démontrer... Juste dans ton message ci-dessus !
4- Une caractéristique d'un caractère aléatoire est la répartition des écarts à la moyenne. Je n'ai pas vu cela dans le calcul.
...et pourtant il y est bien question des quelques différences quadratiques par rapport à l'espérance :
var_x += (x-m)*(x-m)
var_y += (y-m)*(y-m)
co_var += (x-m)*(y-m)
(...)
Hors ligne
#134 28-05-2016 23:09:34
- freddy
- Membre chevronné

- Lieu : Paris
- Inscription : 27-03-2009
- Messages : 7 457
Re : Variable aléatoire at fonction rand()
Salut Léon de la révolution française,
tu n'as pas renseigné ton adresse mail, donc je ne peux pas te répondre en privé.
En mode public, en réponse à ta question que je découvre après quelques temps "retiré du monde", je dis "oui, ta démarche est correcte".
Si tu définis [tex]X_i[/tex] la variable aléatoire dont la valeur est égale à 1 si [tex]i =[/tex] un nombre compris entre 0 et 15, et zéro sinon, cette v.a suit bien une loi binômiale de paramètre (16.000, 1/16) et donc d'espérance [tex]E(X_i)=1.000[/tex] et de variance [tex]\sigma_i^2 = 1.000\times \frac{15}{16}=937{,}50=30{,}6186[/tex].
Ensuite, tu construis un estimateur sans biais de l'espérance par la moyenne [tex]m_i[/tex] des [tex]X_i[/tex] et un estimateur sans biais [tex]\hat\sigma_i[/tex] de la variance.
Bien entendu, les deux estimateurs suivent des lois de probabilité précises (ce qui permet de dire qu'il y a bien une variance de la loi suivie par l'estimateur de la variance, sauf si c'est une loi un peu particulière) et de se donner un intervalle de confiance pour encadrer les paramètres de la loi théorique supposée (voir ici).
L'idée sous-jacente est de tester l'hypothèse que le RNG simule correctement une loi uniforme sur [0, 1].
Perso, je m'y serais pris autrement et j'aurais généré 100.000 réalisations de cette pseudo-loi uniforme continue et soumis les résultats à toute une batterie de tests (qu'on trouve dans la Bibmath) pour me faire une opinion sur la qualité de ce générateur. De ce que j'ai pu lire des échanges précédents, en diagonale seulement car Dzl, peu versé en stat/proba, aime bien polémiquer, je crains que Yoshi ait montré que les deux générateurs utilisés aient un cycle bcp trop court pour faire des simulations auxquelles on puisse se fier.
A relire demain, à tête reposée.
PS : comment ont été fabriqués les entiers de 0 à 15 ?
Dernière modification par freddy (29-05-2016 06:42:02)
Hors ligne
#135 29-05-2016 08:48:20
- leon1789
- Membre
- Inscription : 27-08-2015
- Messages : 1 203
Re : Variable aléatoire at fonction rand()
Bonjour et merci Freddy pour ta réponse.
je crains que Yoshi ait montré que les deux générateurs utilisés aient un cycle bcp trop court pour faire des simulations auxquelles on puisse se fier.
c'est possible en effet.
PS : comment ont été fabriqués les entiers de 0 à 15 ?
je ne comprends pas (le fond de) la question.
Hors ligne
#136 29-05-2016 12:02:24
- freddy
- Membre chevronné

- Lieu : Paris
- Inscription : 27-03-2009
- Messages : 7 457
Re : Variable aléatoire at fonction rand()
Re,
question pas innocente au plan technique mais sans jugement de valeur, car on a plusieurs manières de le faire et je souhaite connaître celle(s) utilisée(s).
Merci d'avance !
Hors ligne
#137 29-05-2016 12:36:35
- leon1789
- Membre
- Inscription : 27-08-2015
- Messages : 1 203
Re : Variable aléatoire at fonction rand()
Oui, j'ai bien compris que tu étais sur le plan technique, mais j'ai l'impression de ne pas comprendre ce que tu demandes.
Je peux toujours dire que dans le programme du message #77, pour chaque nombre i entre 0 à 15 (indépendamment les uns des autres), on compte ne nombre de fois que l'on obtient i avec rand()%16 avec 16000 tirages. D'où somme de loi de Bernoulli (p=/16), d'où loi binomiale B(16000, 1/16).
Hors ligne
#138 29-05-2016 12:48:47
- Dlzlogic
- Banni(e)
- Inscription : 25-04-2016
- Messages : 461
Re : Variable aléatoire at fonction rand()
Bonjour Freddy,
Je ne relève pas tes affirmations gratuites. Si tu as lu mes papiers http://www.dlzlogic.com et que tu as quelque chose à dire, je te répondrai volontiers.
Pour essayer de répondre à ta question "comment ont été fabriqués les nombres 0 à 15", je vais essayer de situer le fond du problème.
1- les probabilités reposent sur des lois et on en tire des résultats.
2- pour vérifier ces résultats sur un grand nombre, il n'y a pas d'autre moyen que faire des simulations
3- la méthode actuelle de simulation est l'utilisation de la fonction rand. Je passe les recherches et études de générateurs "parfaits", nécessaires à certaines activités critiques.
4- la contradiction est facile : c'est à cause du générateur !
5- pour éviter cet argument trop facile et passer outre le phénomène "générateur de chez untel", j'ai proposé une méthode de création de nombres aléatoires à partir d'une simulation de pile ou face. Relis les messages #15, #17, #19.
6- la discussion a dévié, on change de loi, on ne décrit pas le protocole etc. Apparemment et après confirmation, il s'agit de la technique moderne de faire des mathématiques.
7- donc au lieu de discuter de la répartition des résultats de tirages aléatoires, on est revenu à la comparaison de tel ou tel générateur, sans accepter de fixer, au préalable, les règles du jeu.
Pour mémoire, le nombre de tirages (100000 que tu proposes) n'est pas le plus important, ce qui est important, c'est l'examen des résultats. Léon a reçu beaucoup d'informations de la part de membres d'un autre forum. Je n'ai pas lu qu'il en ait tenu compte.
Hors ligne
#139 29-05-2016 13:03:56
- leon1789
- Membre
- Inscription : 27-08-2015
- Messages : 1 203
Re : Variable aléatoire at fonction rand()
Bonjour Freddy,
Pour essayer de répondre à ta question "comment ont été fabriqués les nombres 0 à 15", je vais essayer de situer le fond du problème.
1- les probabilités reposent sur des lois et on en tire des résultats.
c'est pour cela que tu en connais aucune (loi), que tu refuses de les considérer, et que tu prétends connaitre les notions de proba.. mort de rire.
2- pour vérifier ces résultats sur un grand nombre, il n'y a pas d'autre moyen que faire des simulations
Quand on fait des simulations sans aucune théorie, on peut raconter un peu n'importe quoi... comme ce que tu fais dans ton document qui a servi de base à la discussion.
3- la méthode actuelle de simulation est l'utilisation de la fonction rand. Je passe les recherches et études de générateurs "parfaits", nécessaires à certaines activités critiques.
4- la contradiction est facile : c'est à cause du générateur !
quand les résultats d'un générateur est opposé à la théorie (chose qui n'arrive que pour "ton C" et "DevC++ de Yoshi" pour les diverses simulations que nous avons faites), il y a bien un fautif : soit la théorie (que tu ne comprends pas), soit quelque chose dans le générateur... Il y a forcément une explication.
5- pour éviter cet argument trop facile et passer outre le phénomène "générateur de chez untel", j'ai proposé une méthode de création de nombres aléatoires à partir d'une simulation de pile ou face. Relis les messages #15, #17, #19.
Ce qui n'apporte rien de plus qu'un simple rand()%16
6- la discussion a dévié, on change de loi, on ne décrit pas le protocole etc. Apparemment et après confirmation, il s'agit de la technique moderne de faire des mathématiques.
en effet, il n'est pas interdit de faire différentes expériences... si ? Je sais bien que tu ne fais que lancer ton programme et tu te bornes à cela, mais ce n'est pas le cas de tout le monde.
7- donc au lieu de discuter de la répartition des résultats de tirages aléatoires, on est revenu à la comparaison de tel ou tel générateur, sans accepter de fixer, au préalable, les règles du jeu.
Les règles du jeu sont parfaitement fixées dans chaque programme, sinon l'ordinateur ne pourrait pas calculer !
A toi de comprendre...
Léon a reçu beaucoup d'informations de la part de membres d'un autre forum. Je n'ai pas lu qu'il en ait tenu compte.
Beau commentaire sachant que tu n'as pas compris de quoi il s'agit.
Dernière modification par leon1789 (29-05-2016 13:06:07)
Hors ligne
#140 29-05-2016 13:09:58
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 17 401
Re : Variable aléatoire at fonction rand()
Bonjour,
Début du Hors-sujet
Cependant, si c'est un concours avec Python, là je ne vois pas vraiment l'intérêt.
Nan, j'ai passé l'âge de jouer à qui p...e le plus loin.
Donc, je confirme que je n'ai pas compris le but.
Le but était d'abord de faire un peu de provocation, de titiller un "chantre du C", tout comme mon expression "marchand de soupe" (un peu forte, d'accord).
En effet, tu avais écrit :
2- un logiciel interprété résout très simplement des opérations simples, par contre, dès qu'on attaque des opérations répétitives, ce qui est notre cas, on ne sait pas très bien ce qui se passe, à part des gens hyper-pointus sur le sujet, ce qui n'est pas mon cas.
3- dans le contexte de langage interprété d'un éditeur de logiciel dont je garantis le sérieux, j'ai constaté des anomalies que je n'ai réussi à expliquer que par une interaction anormale entre la saisie et l'exécution (UNIX et/ou Windows). Naturellement ce genre d'anomalie n'est pas reproductible.
4- dans l'état actuel des machines, l'exécution d'un programme .exe donnera toujours les mêmes résultats avec les mêmes hypothèses. Je n'en dirais pas autant avec un programme interprété, sauf calcul très simple.
montrant une méconnaissance certaine du Python - langage interprété, je ne vois d'ailleurs pas comment cela serait possible (à moins d'un langage mal écrit comportant des bugs)...
Je dirais même plus : ton avis frise la désinformation.
A titre indicatif, Python est utilisé dans The GIMP, dans Blender, dans Firefox notamment...
Qu'est-ce qu'un calcul qui est la négation (au strict sens mathématique du terme) de "calcul très simple" ?
Puis-je en avoir un exemple que je teste ?
Je peux te dire que j'ai écrit notamment un calcul de remboursements de prêts possédant 3 taux croissants sur 3 durées avec un différé d'amortissement ? C'est un calcul simple ça ? Et pourtant, avec les mêmes hypothèses de départ, je peux le lancer 10 fois, j'obtiendrai toujours le même tableau d'amortissement conforme au tableau d'amortissement du Crédit Foncier (je m'en suis procuré un).
J'ai aussi écrit un programme de gestion d'un télépointeur :
Je travaille sur l'asservissement d'un télé pointeur en pan/tilt. Je souhaiterais lui interdire certaines zones. Pour cela, je convertis sa position (pan/tilt) en coordonnées cartésiennes, résultat sur lequel j'effectue mes tests (hors butées si X<0 et Z>-1m). Je ne peux pas me contenter de limiter indépendamment le pan et le tilt car ils sont liés pour décrire l'espace (sphère).
Le repère est le suivant :
Centre au croisement des axes de rotation
X est vers l'avant du télé pointeur
Y est à sa gauche
Z est vers le haut
Je suis arrivé à une solution satisfaisante et mes résultats étaient toujours les mêmes en partant des mêmes hypothèses...
J'ai voulu te montrer que Python n'était pas si naze que ça.
Au passage en natif :
>>> 2**768+10**50-332*10**42
1552518092300708935148979488462502555256886017116696611139052038026050952686376886330878408828646477950487730697131073206171580044114814391444287275041181139204454976020849905550265385631266444825262999193716468750892846853816057856
En prime, tu écris plus tard (donc pas de regrets) :
Pour moi (ie d'après mes lectures), le Python est une alternative au Basic de mes jeunes années.
Ça, c'est franchement risible, tu devrais éviter de relayer ce genre d'affirmations sans les tester toi-même.
Pour avoir testé différents Basic dans ma jeunesse :
BASIC MO2 et TO7, Basic Locomotive (AmStrad CPC), QBasic, QuickBasic, GWBasic, GFA Basic (Atari), Turbo Basic, je puis t'assurer que ça n'a rien à voir...
Je ne veux pas troller, restons-en là, donc
Fin du Hors-sujet
@+
Hors ligne
#141 29-05-2016 16:09:15
- Dlzlogic
- Banni(e)
- Inscription : 25-04-2016
- Messages : 461
Re : Variable aléatoire at fonction rand()
Pour le fun.
Cette longue liste de chiffres, résultat d'une opération quelconque, doit avoir une répartition des écarts à la moyenne conforme à la normale. Donc je l'ai testée. Bien-sûr, le nombre de chiffres est assez faibles, mais j'ai un autre liste, récupérée je ne sais où, qui donne des résultats plus spectaculaires
chiffre= 0 nombre = 27
chiffre= 1 nombre = 25
chiffre= 2 nombre = 20
chiffre= 3 nombre = 16
chiffre= 4 nombre = 24
chiffre= 5 nombre = 26
chiffre= 6 nombre = 27
chiffre= 7 nombre = 18
chiffre= 8 nombre = 30
chiffre= 9 nombre = 19
Répartition des chiffres 0 à 10
Nombre = 10 Moyenne = 23.20 emq=4.64 ep=3.09
Classe 1 nb= 0 0.00% théorique 0.35% |
Classe 2 nb= 0 0.00% théorique 2% |
Classe 3 nb= 1 10.00% théorique 7% |HHHHHHHHHH
Classe 4 nb= 3 30.00% théorique 16% |HHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
Classe 5 nb= 0 0.00% théorique 25% |
Classe 6 nb= 3 30.00% théorique 25% |HHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
Classe 7 nb= 2 20.00% théorique 16% |HHHHHHHHHHHHHHHHHHHH
Classe 8 nb= 1 10.00% théorique 7% |HHHHHHHHHH
Classe 9 nb= 0 0.00% théorique 2% |
Classe 10 nb= 0 0.00% théorique 0.35% |
Répartition des caractères en base 100
Nombre = 100 Moyenne = 1.16 emq=1.03 ep=0.69
Classe 1 nb= 0 0.00% théorique 0.35% |
Classe 2 nb= 0 0.00% théorique 2% |
Classe 3 nb= 0 0.00% théorique 7% |
Classe 4 nb= 33 33.00% théorique 16% |HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
Classe 5 nb= 30 30.00% théorique 25% |HHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
Classe 6 nb= 0 0.00% théorique 25% |
Classe 7 nb= 26 26.00% théorique 16% |HHHHHHHHHHHHHHHHHHHHHHHHHH
Classe 8 nb= 10 10.00% théorique 7% |HHHHHHHHHH
Classe 9 nb= 0 0.00% théorique 2% |
Classe 10 nb= 1 1.00% théorique 0.35% |H
[HS] Loin de moi l'idée de critiquer un langage où un autre. Chacun choisi la marque de son stylo pour écrire. Le plus important est naturellement ce qu'on écrit. [/HS]
Hors ligne
#142 29-05-2016 17:14:07
- freddy
- Membre chevronné

- Lieu : Paris
- Inscription : 27-03-2009
- Messages : 7 457
Re : Variable aléatoire at fonction rand()
Oui, j'ai bien compris que tu étais sur le plan technique, mais j'ai l'impression de ne pas comprendre ce que tu demandes.
Je peux toujours dire que dans le programme du message #77, pour chaque nombre i entre 0 à 15 (indépendamment les uns des autres), on compte ne nombre de fois que l'on obtient i avec rand()%16 avec 16000 tirages. D'où somme de loi de Bernoulli (p=/16), d'où loi binomiale B(16000, 1/16).
Re,
oui, oui, j'avais bien compris. Ma question est : je tire "au hasard" un réel "j" compris entre zéro et un. Quelle manipulation lui fais tu subir pour le transformer en un entier compris entre 0 et 15 ?
Hors ligne
#143 29-05-2016 17:30:45
- Dlzlogic
- Banni(e)
- Inscription : 25-04-2016
- Messages : 461
Re : Variable aléatoire at fonction rand()
@ Freddy,
Les fonctions rand produisent généralement un entier entre 0 et RAND_MAX. Si on veut obtenir un réel entre 0 et 1, on fait (float)rand()/RAND_MAX. Si on veut un entier entre 0 et 15 on fait rand()%16 etc.
Si une fonction rand() produit un réel entre 0 et 1 directement, ça m'intéresserait de savoir comment.
Hors ligne
#144 29-05-2016 17:49:18
- leon1789
- Membre
- Inscription : 27-08-2015
- Messages : 1 203
Re : Variable aléatoire at fonction rand()
leon1789 a écrit :Oui, j'ai bien compris que tu étais sur le plan technique, mais j'ai l'impression de ne pas comprendre ce que tu demandes.
Je peux toujours dire que dans le programme du message #77, pour chaque nombre i entre 0 à 15 (indépendamment les uns des autres), on compte ne nombre de fois que l'on obtient i avec rand()%16 avec 16000 tirages. D'où somme de loi de Bernoulli (p=/16), d'où loi binomiale B(16000, 1/16).Re,
oui, oui, j'avais bien compris. Ma question est : je tire "au hasard" un réel "j" compris entre zéro et un. Quelle manipulation lui fais tu subir pour le transformer en un entier compris entre 0 et 15 ?
Je me doutais bien que je n'avais pas compris ta question :)
Si tu me donnes un réel dans [0,1[, alors je le multiplie par 16, puis j'en prend la partie entière (comme Yoshi dans son programme Python, message #120)
Si ton j suit la loi uniforme continue sur [0,1[ alors floor(16.j) suit la loi uniforme discrète sur {0,..,15}
Pourquoi cette question ?
(En C, le générateur rand() donne un entier, donc on le prend modulo 16, et on obtient un entier compris entre 0 et 15)
Hors ligne
#145 29-05-2016 17:50:21
- freddy
- Membre chevronné

- Lieu : Paris
- Inscription : 27-03-2009
- Messages : 7 457
Re : Variable aléatoire at fonction rand()
Dzl,
la fonction alea() d'Excel, la fonction Rnd() de VBA et la fonction ranuni() de SAS gérèrent un réel compris entre 0 inclus et 1 exclu ...
Quant à la loi de Cauchy, elle existe bel et bien et ce n'est pas une astuce de matheux, mais une "réalité observable". C'est pour calculer son intégrale entre [tex]0 \le a[/tex] et [tex]b \le 1[/tex] qu'il faut faire une remarque de matheux.
Hors ligne
#146 29-05-2016 17:52:48
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 17 401
Re : Variable aléatoire at fonction rand()
Salut,
Si j'ai bien compris ta question :
Dizlogic n'en tire pas un seul mais 4 : a, b, c, d (ente 0 et 1), qu''il multiplie par 2.
Puis, il arrondit à l'entier immédiatement inférieur (prenant exemple sur leon, j'ai utilisé floor())
On construit ensuite ainsi ce nombre compris entre 0 et 15 :
nb = floor(a*2)*8+floor(b*2)*4+floor(c*2)*2+floor(d)
Dizlogic en C n'utilise pas floor (pas besoin)...
En v'la 10 :
Avec mult. par 2 : 0.44740192060465866 Après arrondi : b = 0
Avec mult. par 2 : 0.7790830602839884 Après arrondi : c = 0
Avec mult. par 2 : 1.2767737322486805 Après arrondi : d = 1
D'où :
nb= 0 * 8 + 0 * 4 + 0 * 2 + 1 = 1
Avec mult. par 2 : 1.9613151020271729 Après arrondi : a = 1
Avec mult. par 2 : 0.7351701222125824 Après arrondi : b = 0
Avec mult. par 2 : 0.7492515622219988 Après arrondi : c = 0
Avec mult. par 2 : 0.17024413447368625 Après arrondi : d = 0
D'où :
nb= 1 * 8 + 0 * 4 + 0 * 2 + 0 = 8
Avec mult. par 2 : 1.5387593655444596 Après arrondi : a = 1
Avec mult. par 2 : 1.1477981068644927 Après arrondi : b = 1
Avec mult. par 2 : 1.5506127926610556 Après arrondi : c = 1
Avec mult. par 2 : 1.4829465146301393 Après arrondi : d = 1
D'où :
nb= 1 * 8 + 1 * 4 + 1 * 2 + 1 = 15
Avec mult. par 2 : 1.3558886704584494 Après arrondi : a = 1
Avec mult. par 2 : 1.4154666439607735 Après arrondi : b = 1
Avec mult. par 2 : 1.2712419161116923 Après arrondi : c = 1
Avec mult. par 2 : 0.1898941535647778 Après arrondi : d = 0
D'où :
nb= 1 * 8 + 1 * 4 + 1 * 2 + 0 = 14
Avec mult. par 2 : 0.46598759582952054 Après arrondi : a = 0
Avec mult. par 2 : 0.6481100543689593 Après arrondi : b = 0
Avec mult. par 2 : 0.6248559462542089 Après arrondi : c = 0
Avec mult. par 2 : 0.5083644900591864 Après arrondi : d = 0
D'où :
nb= 0 * 8 + 0 * 4 + 0 * 2 + 0 = 0
Avec mult. par 2 : 1.1186833757497012 Après arrondi : a = 1
Avec mult. par 2 : 0.6839795829395139 Après arrondi : b = 0
Avec mult. par 2 : 0.6377925065626426 Après arrondi : c = 0
Avec mult. par 2 : 0.6199342748950072 Après arrondi : d = 0
D'où :
nb= 1 * 8 + 0 * 4 + 0 * 2 + 0 = 8
Avec mult. par 2 : 0.5407594059417067 Après arrondi : a = 0
Avec mult. par 2 : 0.6437503356451826 Après arrondi : b = 0
Avec mult. par 2 : 0.237907138771986 Après arrondi : c = 0
Avec mult. par 2 : 0.22775676682753931 Après arrondi : d = 0
D'où :
nb= 0 * 8 + 0 * 4 + 0 * 2 + 0 = 0
Avec mult. par 2 : 0.5673142550690109 Après arrondi : a = 0
Avec mult. par 2 : 1.1234263422745299 Après arrondi : b = 1
Avec mult. par 2 : 0.33357097102600886 Après arrondi : c = 0
Avec mult. par 2 : 1.7116023758865844 Après arrondi : d = 1
D'où :
nb= 0 * 8 + 1 * 4 + 0 * 2 + 1 = 5
Avec mult. par 2 : 1.4667421714858657 Après arrondi : a = 1
Avec mult. par 2 : 0.1146964279386613 Après arrondi : b = 0
Avec mult. par 2 : 0.22069046240028767 Après arrondi : c = 0
Avec mult. par 2 : 1.5415524730108439 Après arrondi : d = 1
D'où :
nb= 1 * 8 + 0 * 4 + 0 * 2 + 1 = 9
Avec mult. par 2 : 0.6585827279806531 Après arrondi : a = 0
Avec mult. par 2 : 0.7356450456197341 Après arrondi : b = 0
Avec mult. par 2 : 0.5450636238646542 Après arrondi : c = 0
Avec mult. par 2 : 1.1961024487276837 Après arrondi : d = 1
D'où :
nb= 0 * 8 + 0 * 4 + 0 * 2 + 1 = 1
Avec mult. par 2 : 0.2577998698387842 Après arrondi : a = 0
Avec mult. par 2 : 0.3089858720897807 Après arrondi : b = 0
Avec mult. par 2 : 0.9326059711732884 Après arrondi : c = 0
Avec mult. par 2 : 1.984197146943146 Après arrondi : d = 1
D'où :
nb= 0 * 8 + 0 * 4 + 0 * 2 + 1 = 1
@+
Dernière modification par yoshi (29-05-2016 18:13:38)
Hors ligne
#147 29-05-2016 18:18:07
- Dlzlogic
- Banni(e)
- Inscription : 25-04-2016
- Messages : 461
Re : Variable aléatoire at fonction rand()
@ Yoshi,
Si je sors 4 nombres binaires, en prenant les puissances de 2 et en additionnant, on obtient un nombre entier entre 0 et 15. Le code que tu donnes avec l'utilisation de floor n'est pas le mien. Habituellement, si j'ai besoin d'entiers et que j'utilise des entiers. Voila mon code :
{
int a=rand()%2;
int b=rand()%2;
int c=rand()%2;
int d=rand()%2;
int r=a*8 + b*4 + c*2 + d;
Res[r]++;
}
(je viens de le copier à partir de mon papier http://www.dlzlogic.com/aides/TCL_Hasard.pdf cité un peu plus haut par Léon.
@ Freddy, bien sûr que la loi de Cauchy existe. Pour l'obtenir, on prend un réel aléatoire et on en prend sa tangente. Aurais-je dit le contraire ?
Si un générateur de nombres pseudo-aléatoires utilise une formule qui donne directement un nombre réel compris en 0 et 1, ça m'intéresserait de savoir comment.
Hors ligne
#148 29-05-2016 18:52:12
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 17 401
Re : Variable aléatoire at fonction rand()
Re,
Je savais que tu allais me sauter dessus : j'avais rectifié entretemps...
Vérifie...
Le principe, pour moi reste valable...
Tu tires un décimal entre 0 et 1, puis avec int a = rand()%2 tu prends la partie entière de son double...
En quoi ça te dérange que, m'inspirant de leon, j'utilise floor() ? Les nombres étant positifs d'ailleurs, je pouvais utiliser la fonction Python int() : int si c'est la même chose que ce que tu écris en C (je fais et ai fait très très peu de C...)
floor() : floor(1.4154666439607735)= 1
Mais
int(-1.4154666439607735)= -1 alors que floor(-1.4154666439607735)= -2
Lors de ma première adaptation j'avais des résultats farfelus avec % : en Python % c'est le modulo...
Cependant le nombre r, issu de a,b,c,d , dépend de l'ordre a,b,c,d : le procédé m'a toujours surpris , mais c'est ta méthode et je n'ai pas ergoté...
@+
Hors ligne
#149 29-05-2016 19:22:57
- Dlzlogic
- Banni(e)
- Inscription : 25-04-2016
- Messages : 461
Re : Variable aléatoire at fonction rand()
Bon, en C la distinction entre int et float est fondamentale.
rand() renvoie un int. rand()%2 renvoie mod(rand,2), c'est à dire le reste de la division de rand() par 2, autrement dit, 0 ou 1.
floor(float) arrondi par troncature du float et renvoie un float. int(float) renvoie un entier, cette fonction est à éviter, puisqu'on sait pas très bien ce qui se passe, sauf si on vient de relire la doc.
Il est bien évident que j'ai utilisé cette méthode lors d'échanges par mail avec Léon, pour essayer de lui expliquer le résultat d'un tirage aléatoire de nombres. Je pensais qu'il avait compris, puisqu'il a fait le test que j'ai copié, avec son autorisation, à la fin de mon papier.
Bonne soirée.
Hors ligne
#150 29-05-2016 19:24:13
- leon1789
- Membre
- Inscription : 27-08-2015
- Messages : 1 203
Re : Variable aléatoire at fonction rand()
@ Freddy, bien sûr que la loi de Cauchy existe. Pour l'obtenir, on prend un réel aléatoire et on en prend sa tangente. Aurais-je dit le contraire ?
"prendre un réel aléatoirement", sans aucune autre précision, cela ne veut rien dire. Il faut préciser une loi de probabilité pour cela ! C'est dans tous les cours de base (lycée).
Quant à la tangente... tu as failli bien recopier. Regarde bien comment la fonction de répartition dépend de la fonction arc-tangente.
Et comment la fonction de densité de la loi de Cauchy est liée à la dérivée d'arc-tangente.
Dernière modification par leon1789 (29-05-2016 19:39:45)
Hors ligne







