lucidiot's cybrecluster

Obtenir un d7 avec un d6

Lucidiot Pseudo-science 2019-01-21
Je ressors mes cahiers de mathématiques de lycée et je dessine des jolis schémas pour répondre un peu trop sérieusement.


Cela fait presque neuf mois que je n'ai pas publié de calculs idiots sur Brainshit. Ça ne veut pour autant pas dire que je n'ai pas chômé ; je travaille à la version 5 de Brainshit, qui utilisera un générateur de site statique et me donnera plus de libertés sur l'écriture des articles, ainsi qu'à l'écriture de documentation en anglais concernant mes projets Python PseudoScience et python-usda.

J'ai participé il y a un peu plus de deux mois à une conversation sur une manière d'obtenir un résultat de lancer de d7 à partir d'un d6. Cela est beaucoup plus compliqué que ça en a l'air ; on parle là de probabilités. Si vous n'y connaissez rien au sujet, je recommande fortement la lecture d'un article de la Wikipédia francophone, qui s'est mise à écrire des articles de « mathématiques élémentaires, » c'est-à-dire des articles mathématiques lisibles par les humains. Le problème le plus important est de maintenir une équiprobabilité : on doit avoir autant de chances d'obtenir chaque chiffre.

Pour dire les choses de manière plus explicite : À partir d'un lancer de dé à 6 faces, qui nous fait obtenir une face numérotée parmi 1, 2, 3, 4, 5 et 6, on souhaite simuler un résultat équivalent à un lancer de dé à 7 faces (1, 2, 3, 4, 5, 6, ou 7). On considérera que ni le d6 à disposition ni le d7 souhaité ne sont truqués.

Cet article contient des diagrammes SVG et MathML inline écrits à la main. Il est possible que certains navigateurs n'en fassent pas le rendu correctement.

Produit en croix

Ma première idée fut une technique de produit en croix ou de règle de trois : on fait tout simplement une division et une multiplication. On lance le d6, et on calcule (face / 6) * 7 pour obtenir une face de d7. Représenté de manière schématique, on obtient ceci :

d6 1 2 3 4 5 6 d7 1 2 3 4 5 6 7
fig.1: Correspondance entre les faces d'un d6 et d'un d7

On constate vite le problème : quand on fera le calcul, on obtiendra un nombre décimal, et pas un nombre entier correspondant à la face. Faire un simple arrondi pourrait être possible, mais donnera lieu à une non-équiprobabilité. Même chose avec les fonctions « partie entière » et « partie entière par excès. » Un tableau le montre assez facilement :

d6 Produit en croix Arrondi Partie entière Partie entière par excès
1 1.166... 1 1 2
2 2.333... 2 2 3
3 3.5 4 3 4
4 4.666... 5 4 5
5 5.833... 6 5 6
6 7 7 7 7

Dans chaque cas, il manque une des sept faces du d7 ; donc c'est comme si on lançait finalement le d6. Ce problème est causé par le manque de résultats possibles au dé à 6 faces ; on ne se retrouvera fatalement qu'avec 6 possibilités à la fin.

On pourrait se dire qu'on peut éviter ce problème en effectuant deux lancers, ce qui donne 36 (6²) possibilités, ou si on fait la somme des valeurs des faces obtenues, 11 possibilités (entre 2 et 12). Cependant, on maintiendra le problème de l'équiprobabilité : on obtiendra toutes les faces, mais pas à la même fréquence, comme si le d7 était truqué.

Combinaisons

Le seul paramètre que nous pouvons faire changer avec notre idée de base est le nombre de lancers de dé à 6 faces, que nous appelerons donc x. Avec x lancements, on obtient 6^x possibilités, et on recherche donc le nombre de lancements de d6 pour obtenir autant de possibilités qu'un nombre y de lancements de d7, soit 6^x = 7^y avec x et y deux entiers positifs et non nuls.

La manière la plus simple que j'ai trouvée de représenter cette équation de manière soluble pour Wolfram Alpha est en deux étapes : D'abord, résoudre l'équation Root[6^x, 7] = Floor[Root[6^x, 7]], qui donne les valeurs positives ou nulles de x pour lesquelles la racine septième de 6^x est un entier. La résolution de cette première équation me donne tout simplement que x doit être un multiple de 7.

Ensuite, il faut trouver les valeurs entières positives et non nulles de y tel que 7^y = 6^x quand x est un entier positif non nul, multiple de 7. Le problème dans ce cas avec Wolfram Alpha, c'est que je n'ai absolument aucune idée de comment lui imposer de travailler dans l'ensemble des nombres naturels. À la place, j'ai comme solution que y = x × log(6) / log(7).

La bonne nouvelle, c'est que log(6) / log(7) est une constante, valant environ 0.920782221161601790318727245176199065440985073959606295084 quand on arrondit à 79 chiffres près. On pourrait donc se dire qu'il faut trouver un multiple de ce nombre qui soit un entier divisible par 7, et on obtiendrait y. La mauvaise nouvelle, c'est que ce n'est pas un nombre rationnel, il est donc impossible de représenter ce nombre comme une fraction ; il n'y a donc aucune valeur entière.

La manière la plus simple mais faisant le plus grincer des dents les mathématiciens dans ce cas, c'est d'arrondir ! J'ai décidé d'arrêter de jouer avec Wolfram Alpha, parce que je sors complètement de mes maigres compétences dans le Wolfram Language, et à la place d'utiliser un script Python tout bête. Python arrondit à 16 chiffres dans ses nombres flottants, donc on va arrondir... à 16 chiffres.

Le résultat de ce magnifique script composé d'une simple boucle for est que 21 287 330 * arrondi(log(6) / log(7), 16) est un entier ! Nous pouvons donc en déduire la solution à notre calcul de départ : on peut faire correspondre 21 287 330 lancers de d6 à 19 600 995 lancers de d7. Je vous laisse l'honneur de vous dessiner votre propre tableau pour ce cas-là, et je souhaite surtout bon courage pour réaliser tous ces lancers vous-mêmes.

Retour aux bases

Essayons plutôt de voir le problème sous un autre angle en changeant notre manière de représenter les nombres. On travaille communément en base 10, aussi connu sous le nom de système décimal ; mais il est tout à fait possible de représenter les nombres autrement, en changeant la base.

La base 1 ne nous apprend évidemment rien, mais j'avais envie de l'ajouter simplement pour montrer qu'elle existe. C'en est même un langage de programmation. Par contre, les deux autres bases nous permettent de déduire deux manières différentes de lancer son d6 :

Regardons ce que donne la première méthode en termes de possibilités :

  1 2 3 4 5 6
+0 1 2 3 4 5 6
+1 2 3 4 5 6 7

La bonne nouvelle, c'est que nous arrivons effectivement à obtenir les 7 faces du d7. La mauvaise, c'est que la probabilité d'obtenir un 1 ou 7 est deux fois moins importante que celle d'obtenir les autres faces. Par conséquent, notre lancer n'est plus équiprobable.

Dans le cas de la seconde méthode, il y a un peu plus d'espoir ; chacun des trois lancements donne une probabilité d'obtenir un 0 ou un 1 de ½. Cependant, cela nous donnera une valeur entre 0 et 7, soit 8 possibilités, à une probabilité de ⅛. Si on considère qu'une des valeurs est "nulle" et qu'il faut recommencer le lancer, il y aura donc une probabilité de nouvelle valeur nulle de ⅛, et ainsi de suite. On se retrouve alors face à des probabilités pour toutes les autres faces qui valent 1/8 + (1/8)^2 + (1/8)^3 + … + (1/8)^n. On doit donc faire appel aux limites et sommes vers l'infini pour nous aider.

n = 1 ( 1 8 ) n = 1 7
fig.2: Somme vers l'infini de la probabilité d'une face en fonction du nombre de lancers

Ce que cette équation indique, c'est qu'en effectuant un nombre infini de lancers selon cette méthode, les probabilités de chaque face valent ⅐, donc notre méthode est équiprobable. Cependant, tous les 8 lancers en moyenne, on aura une valeur nulle, et on devra relancer, et tous les 64 lancers en moyenne, on devra relancer deux fois. Ça peut être drôle au début mais rapidement très frustrant.

Gloire à la géométrie

S'il est si complexe d'utiliser un d6 pour obtenir mathématiquement un d7, pourquoi ne pas à la place ignorer le fait que ce soit un d6, et le traiter simplement comme un objet cubique ? Que peut-on faire d'un cube ?

J'ai été inspiré pour cette idée par le tapis de découpe vert foncé sur lequel mes bras sont posés alors que j'écris cet article ; j'ai même posté une photo résumant ma méthode sur Mastodon.

Un tapis de découpe dessine un repère orthonormé, généralement gradué en centimètres. On peut l'exploiter de diverses manières pour notre lancer de dé.

L'option la plus simple serait de lancer le dé et d'observer la position sur laquelle il tombe. En considérant qu'un dé est suffisamment grand pour qu'il croise toujours une graduation, un humain pourra observer la position du dé et utiliser ces coordonnées dans une division par 7 pour obtenir un d7. Cependant, si le lancer est toujours effectué de la même manière, ou si quelqu'un sait bien viser avec le dé, alors les probabilités seront différentes.

Une autre option beaucoup moins manipulable par un humain est d'utiliser l'angle du dé ; même si un dé est lancé de la même manière, il est peu probable que l'angle dans lequel il se trouvera une fois immobilisé sur le tapis soit toujours le même. En plaçant une règle le long d'un des bords du dé, on peut mesurer des coordonnées d'un vecteur dont on peut déduire mathématiquement l'angle. L'angle sera un nombre décimal entre 0 et 90 degrés exclus, que l'on peut ensuite traduire par produit en croix à un nombre entier entre 1 et 7 inclus. Si on suppose l'angle d'atterrissage entièrement aléatoire, alors tout est équiprobable.

Démonstration

d6 3 4
fig.3: Vue du dessus d'un d6 sur un repère orthonormé et mesure de coordonnées

Le schéma ci-dessus représente un d6 qui serait déjà tombé sur le tapis de découpe. En posant une règle le long du bord du dé, on va chercher deux points qui coïncident avec les graduations du tapis. On va repérer les coordonnées x et y qui séparent les deux points, dans cet exemple x vaut 4 et y vaut 3. On prendra des coordonnées uniquement positives (donc des valeurs absolues) pour nous éviter de nous compliquer la vie.

On peut ensuite une fonction assez connue notamment dans le domaine des jeux vidéo et disponible dans beaucoup de langages de programmation, atan2(y, x), qui donnera un angle en radians correspondant à l'angle de la ligne que nous avons représenté avec la règle. Puisque nous n'allons travailler qu'avec des coordonnées positives, le résultat variera entre 0 et ½π radians, soit entre 0 et 90 degrés.

La fonction finale permettant d'obtenir un nombre entre 0 et 7 non inclus, dont on peut prendre la partie entière pour obtenir un nombre entier entre 1 et 7, sera donc f(x, y) = Floor[14/π × atan2(y, x)] + 1. Le tableau de référence ci-dessous vous permet d'éviter d'essayer de calculer cette fonction à chaque fois si vous savez utiliser un rapporteur.

Intervalle d'angles en ° Face
[0, 12.86[ 1
[12.86, 25.71[ 2
[25.71, 38.57[ 3
[38.57, 51.43[ 4
[51.43, 64.29[ 5
[64.29, 77.14[ 6
[77.14, 90[ 7

Conclusion

Les probabilités, c'est facile. Mais l'équiprobabilité, c'est un massacre. C'est peut-être pour ça que les gens préfèrent inventer des dés avec des nombres improbables de faces plutôt que d'affronter les mathématiques.

J'envisage peut-être de faire une seconde partie à cette étude ; tandis que cet article a été écrit de sorte à respecter au mieux de mes connaissances l'exactitude des mathématiques, il n'y a pas tellement d'aspect pseudo-scientifique. Un lancer de dé qui coûte un an de recettes de l'État français, ça peut être déjà plus intéressant.

Enfin, j'aimerais vous inviter un peu plus que d'habitude à commenter sur cet article ; appréciez-vous ces schémas et équations ? Voudriez-vous en voir plus dans les études pseudo-scientifiques ? Avez-vous des quelconques suggestions sur le format de ces études ? J'aimerais bien améliorer la lisibilité de ce contenu pour rendre la bêtise scientifique accessible à tous.


Commentaires

Fluffy, 2019-01-21

Concernant l'équiprobabilité pour la méthode avec les angles, est-ce que ce sera toujours vrai avec cette technique de mesure ? Puisque là, si on cherche deux coordonnées entières du tapis, d'une part on aura uniquement des nombres rationnels (mais qui sont dense dans R donc ça ne devrait pas poser de problème), et d'autre part, x et y seront limités entre 0 et 100 disons, et sur cet intervalle, on est pas certain qu'il y aura autant de combinaisons de x et y dans chaque portion d'angles correspondant. Evidemment, cet écart sera faible mais suffisant pour que le lancer ne soit pas strictement équiprobable. Pour mesurer cette différence, il faudrait d'abord déterminer une "carte de probabilité" de la position du dé à chaque lancer, puis pour chaque position (et il y en a une infinité muéhéhé), en supposant que la valeur de l'angle est uniformément distribuée sur [0;90°], diviser le plan avec les intervalles d'angles et compter les coordonnées.

Bref, tout ça pour dire que le mieux serait de faire les mesures d'angle en utilisant des règles et un triangle le plus grand possible, plutôt que chercher les points qui interceptent une droite générée par le dé.

Ou bien peut-être que je vais juste aller acheter un D7, ce sera moins fatiguant.

P.S. : Est-ce qu'on pourrait avoir une numérotation des figures la prochaine fois ? Tableau 1, Figure 2... Merchi !

Lucidiot, 2019-01-21

@Fluffy: On peut aussi utiliser un rapporteur, ce qui évite d'utiliser des coordonnées entières et de récupérer directement l'angle, ce qui est suggéré juste avant le dernier tableau présentant les intervalles d'angles. Mais acheter un d7 serait plus simple effectivement; tu peux trouver des packs de plusieurs dés à moins d'un euro sur AliExpress à condition d'attendre un mois pour la livraison. Pour les numéros de figures, je les rajouterai à cet article dès que j'aurai cinq minutes !