Bibm@th

Forum de mathématiques - Bibm@th.net

Bienvenue dans les forums du site BibM@th, des forums où on dit Bonjour (Bonsoir), Merci, S'il vous plaît...

Vous n'êtes pas identifié(e).

#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()

Dlzlogic a écrit :

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...

Dlzlogic a écrit :

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 !
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()

Dlzlogic a écrit :

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.

Dlzlogic a écrit :

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 !

Dlzlogic a écrit :

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.

freddy a écrit :

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.

freddy a écrit :

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()

Dlzlogic a écrit :

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.

Dlzlogic a écrit :

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.

Dlzlogic a écrit :

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.

Dlzlogic a écrit :

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

Dlzlogic a écrit :

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.


Dlzlogic a écrit :

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...

Dlzlogic a écrit :

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

Dizlogic a écrit :

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.

Dizlogic a écrit :

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   

 Nombre total 232
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()

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 ?

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()

freddy a écrit :
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.13683775342848703   Après arrondi : a =  0
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 :

  for (int i=0; i<16000; i++)
  {
    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()

Dlzlogic a écrit :

@ 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

Pied de page des forums