[R] Souci avec la fonction Random

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

[R] Souci avec la fonction Random

#1

Message par mikell »

Hello

Pour la fonction Random, l'aide dit :
" The result will be in the range of Min to Max INCLUSIVE when using integers "

Donc en principe, Random(1, 1, 1) devrait retourner 1
or ça retourne 0, ce qui me colle des erreurs dans un script où je fais un test répétitif avec une valeur max qui se réduit progressivement jusqu'à 1

Quelqu'un peut-il expliquer ce souci (bug ?) et comment le résoudre ?

Merci Image
Modifié en dernier par mikell le jeu. 07 juin 2012 20:34, modifié 1 fois.
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
Uranium
Niveau 5
Niveau 5
Messages : 143
Enregistré le : mer. 28 mars 2012 13:13
Status : Hors ligne

Re: [..] Souci avec la fonction Random

#2

Message par Uranium »

Code : Tout sélectionner

MsgBox(0,'',_Rnadom(1,500,1))

Func _Rnadom($min , $max ,$Int)
    If $min = 1 And $Int = 1 And $max = 1 Then
        Return 1
    Else
        Return Random($min ,$max,$Int)
    EndIf
EndFunc
La solution la plus simple est toujours la meilleure
:mrgreen:
« En mathématiques, “évident” est le mot le plus dangereux. »
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Souci avec la fonction Random

#3

Message par mikell »

Merci, ça c'est la solution bourrin que j'utilise déjà dans mon script :mrgreen:
Mais ça n'apporte pas réellement de réponse, et en fait c'est surtout une explication que je cherche

EDIT
Un superbe topic sur le forum US : http://www.autoitscript.com/forum/topic ... -set-error
Avec une démonstration magistrale de jchd
Donc on gardera la solution bourrin, jusqu'à ce que les développeurs modifient (peut-être) la fonction Random...

Code : Tout sélectionner

Func _RandomInt($min, $max)
    If $min = $max Then Return $min
    Return Random($min, $max, 1)
EndFunc
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11812
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [R] Souci avec la fonction Random

#4

Message par Tlem »

Jolie question et superbe troll en perspective !!!

En ce qui me concerne, la traduction de "Random" me dit "Aléatoire", or dans Random(1, 1, 1) ou ce trouve la part de l'aléatoire ?
D'un point de vue technique pur, comme il n'existe qu'une seule valeur et que celle-ci ne peut être aléatoire, je ne vois pas pourquoi 1 devrait être retourné.
Le retour du nombre 0 et l'attribution de @Error me parais justifié dans le sens ou je sais que ma valeur n'est plus aléatoire. :roll:

Pour imager la chose bêtement, c'est comme si tu pose sur la table deux bonbons trafiqués au poivre et que tu demande à une personne d'en choisir un par hasard !!! Il n'a aucune chance ...
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [R] Souci avec la fonction Random

#5

Message par jchd »

Ah, je passe par ici par le plus grand des ... hasards ... et je vois qu'on me chatouille.

Sérieusement, la spécification habituelle d'une fonction Random(A, B) est de fournir une série de valeurs représentables(*) dans le format choisi (entier ou flottant) qui ont une probabilité 1/N si N est le nombre de valeurs représentables(*) contenues dans l'intervalle [A, B] dont les bornes sont incluses.

Pour les entiers cela signifie que les résultats A, A+1, A+2, ... , B-1, B ont chacun une probabilité 1/(B + 1 - A).

Par conséquent le résultat Random(A, A) → A est parfaitement correct et tout autre est une grave erreur mathématique. La question ici n'est pas de savoir si A est aléatoire ou pas dans [A, A] mais si renvoyer A avec une probabilité 1 est correct, ce qui est le cas pour la spécification habituellement implémentée, sauf pour le Random d'AutoIt.

(*) On est forcé d'introduire la notion de représentabilité sinon cette spécification perd sa sémantique avec les réels. Du fait qu'il y a une infinité de réels dans l'intervalle [A, B] dès lors que A < B, on arrive à N = ∞ et donc une probabilité nulle. Mais ce qui sauve les meubles est le fait que Random retourne un flottant IEEE qui ne peut représenter qu'un nombre fini N de valeurs entre A et B.

D'ailleurs aucune implémentation de Random() fournissant des résultats en flottants avec une précision arbitraire n'est concevable. Une telle fonction appliquée à un intervalle [A, B] avec A < B devrait produire des résultats équiprobables contenant un nombre aléatoire de décimales, entre 0 et l'infini. Comme il y a "infiniment plus" de réels ayant un nombre infini de décimales que les autres, une telle fonction n'aurait pratiquement aucune "chance" de renvoyer un seul résultat autre que "débordement de mémoire", si elle était implémentée correctement.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11812
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [R] Souci avec la fonction Random

#6

Message par Tlem »

C'est aussi une façon de voir. Cela n’empêche que dans toutes les documentations de fonction pseudo aléatoire de type Random, il est fait état de deux bornes de valeur différente, or Random(A,A) n'a aucun sens informatique même si mathématiquement il est juste que 1/1 = 1, A peut aussi être égal à 0 et dans ce cas 0/0 ne veut plus rien dire !!!

C'est sans doute pour cela qu'en C la valeur de Rand_Min ne peut être modifiée et qu'elle est fixée à 0 et que Rand_Max doit être une valeur supérieure à Rand_Min. ^^
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [R] Souci avec la fonction Random

#7

Message par mikell »

Tlem a écrit :En ce qui me concerne, la traduction de "Random" me dit "Aléatoire", or dans Random(1, 1, 1) ou ce trouve la part de l'aléatoire ?
(...)
Le retour du nombre 0 et l'attribution de @Error me parais justifié dans le sens ou je sais que ma valeur n'est plus aléatoire.
Ce n'est pas le problème...
Mon script fait un tirage aléatoire en boucle dans un jeu de 52 cartes, donc de 1 à UBound($array)-1 avec $array[0] = 52
J'utilise un _ArrayDelete dans la boucle pour que la même carte ne puisse pas être tirée 2 fois de suite (conditions réelles !)
Au 52ème tirage, on arrive effectivement à Random(1, 1, 1), il ne reste qu'une seule carte et c'est donc celle-ci qui devrait sortir, obligatoirement
C'est d'ailleurs cet exemple d'une seule carte à tirer que jchd cite sur le forum US
J'ai vraiment du mal à comprendre la justification mathématique de ce @error (l'expliquer en disant qu'à ce stade ce n'est plus aléatoire, c'est une explication "morale" mais mathématiquement parlant c'est un peu juste)
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

Re: [R] Souci avec la fonction Random

#8

Message par Iste »

En programmation, dès que l'on retrouve des fonctions, méthodes ou objets, on se doit d'accepter le principe de la « boite noire »
On regarde ce qui entre, ce qui sort, mais on ne regarde pas ce qui se passe dedans et on fait avec les entrées/sorties qui nous sont données.

Même si je conçoit que j'aurais également fait une fonction Rand(A,B) qui retourne A pour A = B, si on en arrive à faire un tel appel dans un code, c'est qu'il y a une erreur de conception quelque part.
Ici c'est évident. On a pas besoin de faire un jet pour savoir quel carte tirer quand il n'en reste qu'une.

Mais si l'on peut critiquer cette limite, on se doit au moins d’admettre que le choix est intelligent.
Après tout, il semble normal pour tout le monde de lever une @error si B < A. Sachant que l'appel a la fonction est inutile pour A = B, autant relever cette erreur un cran plus haut sur B <= A.

Seulement, ici on est en AutoIt, et je n'ai pas souvenir d'une autre fonction qui nous @error au visage en cas de demande inutile ! Donc bien que ce soit loin d’être une erreur au niveau de la fonction Random(), je pense qu'il serait judicieux de revoir ce fonctionnement pour éviter de nombreux plantages dans des script conçus en oubliant ce détail.
Signez ici
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11812
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [R] Souci avec la fonction Random

#9

Message par Tlem »

Personnellement, je pense que le tord des concepteurs de la fonction, c'est d'avoir accepté de pouvoir modifier la valeur mini de la fonction, car si ils avaient pris modèle sur la même fonction en C, le problème ne se poserait plus !
Encore un fois donc c'est en voulant offrir plus de fonctionnalités que les choses ce corses.

Deux solutions se présentes :
  • 1 - Les devellopeurs modifient la fonction pour faire plaisir à certains. :roll:
    2 - Ils modifient dans la partie Remark :
    When using integers Max-Min must be less than 2^31.
    par
    When using integers Max-Min must be different and less than 2^31.
et dans ce cas, c'est au programmeur de gérer son exception (comme en C :mrgreen: ).

@mikell : La fonction Random ne devrait pas te servir tel quelle, tout comme d'autres fonctions dans des cas similaires, car (c'est la discussion du moment) elle ne gère pas l'exception du Min=Max. :mrgreen:
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [R] Souci avec la fonction Random

#10

Message par mikell »

Tlem a écrit :@mikell : La fonction Random ne devrait pas te servir tel quelle, tout comme d'autres fonctions dans des cas similaires, car (c'est la discussion du moment) elle ne gère pas l'exception du Min=Max.
Certes mais il se trouve que c'est la seule que fournit autoit pour faire un choix aléatoire, et en tant que fonction intégrée elle devrait faire son boulot parfaitement :roll:
Ton analyse est totalement subjective :mrgreen:
Si on te dit :
" dans le tas de cartes qui est devant toi, tire une carte au hasard entre la première et la dernière "
ça va marcher jusqu'à ce qu'il ne reste plus qu'une carte (par exemple la dame de pique, pour reprendre l'exemple de jchd)
A ce moment-là, tu vas rigoler et dire "ce n'est plus du hasard ! " (et ton @error n'a qu'une justification morale donc subjective)
Mais reste que la carte que tu tireras alors SERA effectivement la dame de pique (justification mathématique donc objective)
La démonstration mathématique, jchd l'a faite de toutes les façons possibles sur le forum US et elle est imparable : en l'état, la fonction Random intégrée ne respecte pas son propre cahier des charges (sur le plan mathématique) donc la modifier ne serait pas "pour faire plaisir à certains" mais pour la rendre mathématiquement cohérente ^^

Rebelle rebelle :P :mrgreen:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11812
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [R] Souci avec la fonction Random

#11

Message par Tlem »

Hummm j'adore ce genre d'échange qui permet de voir les différentes manières de penser des uns et des autres. :lol:
mikell a écrit :en tant que fonction intégrée elle devrait faire son boulot parfaitement
Mais elle le fait !
mikell a écrit :Ton analyse est totalement subjective
Alors voyons si je l'explique autrement :
La fonction de base est utilisée comme ceci :

Code : Tout sélectionner

Random()
ou

Code : Tout sélectionner

Random(Rand_Max)
avec comme paramètres par défaut :

Code : Tout sélectionner

Random(Rand_Min = 0, Rand_Max = 1)
et donc la fonction retourne un décimal compris entre 0 et 1 (mais jamais 1) !!!

Partant de ce principe, nous sommes d'accord sur le fait que la fonction doit retourner une valeur aléatoire entre deux nombres différents qui représente un bornage.
En utilisant le paramètre Flag afin de déterminer un retour avec des entiers, la valeur de retour est une valeur comprise dans un intervalle de Rand_Min et Rand_Max (y compris ces derniers), si ce bornage est faussé par le fait que Rand_Min et Rand_Max sont égaux, comment obtenir une valeur aléatoire ???
► Afficher le texte
Cela n'est pas possible et donc on retourne 0 avec @error à 1 pour signaler une erreur de paramètres :
Remarks a écrit :Failure: Returns 0 and sets @error flag to 1 if bad parameters.
Tu me parle de ton problème de tirage de carte, mais en réalité, tu n'a pas de problème; c'est juste que tu n'avait pas géré l'erreur d'exception de l'utilisation de la fonction Random comme tu l'a fait pour ton besoin particulier et donc comme dans tous les cas identiques, il faut passer par une fonction utilisateur (UDF) spécifique aux besoins du code ou utiliser la fonction correctement*.
Les fonctions internes fournissent ce qu'elle sont sensé faire. Si l'on veut adapter leur comportement à tel ou tel cas alors il faut passer par un UDF !
mikell a écrit :La démonstration mathématique, jchd l'a faite de toutes les façons possibles sur le forum US et elle est imparable : en l'état, la fonction Random intégrée ne respecte pas son propre cahier des charges (sur le plan mathématique)
Tout simplement parce qu'il part d'un principe qui est faux (d'après mes connaissances actuelles) !
J'explique : Il donne comme argument ceci :
jchd a écrit :the interval [x, x] contains exactly one element which is x
dont la traduction est (pour ceux qui lirait ce magnifique débat et qui ne maitriserait pas trop l’Anglais) :
L'intervalle [x, x] contient exactement un élément qui est x
Or, c'est là que le bas blesse. Pour parler d'un intervalle, encore faudrait-il qu'il y en ai un. En reprenant sa définition, un intervalle mathématique est un ensemble de nombres délimité par deux nombres réels constituant une borne inférieure et une borne supérieure. Un intervalle contient tous les nombres réels compris entre ces deux bornes (tu retrouvera sur le lien ci-dessus les formules mathématique utilisées par Jean-Christophe).
Fort de cette définition, comment deux valeurs identiques peuvent elles représenter une borne inférieure et dans le même temps une borne supérieure ? C'est un raisonnement totalement insensé !
C'est un peut comme si on admettait qu'un nombre divisé par rien (0) était égale à lui même. Cela pourrait sembler correcte à certain, mais c'est mathématiquement faux !


*
► Afficher le texte
Edit :
jchd a écrit :... et je vois qu'on me chatouille.
J'en rajoute même avec ma plus belle plume (ça chatouille encore plus). :P
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
blacksoul305
Membre émérite
Membre émérite
Messages : 957
Enregistré le : ven. 18 mars 2011 11:49
Localisation : Au pays des programmeurs.
Status : Hors ligne

Re: [R] Souci avec la fonction Random

#12

Message par blacksoul305 »

Tlem a écrit :Edit :
jchd a écrit :... et je vois qu'on me chatouille.
J'en rajoute même avec ma plus belle plume (ça chatouille encore plus). :P
Épique ! :lol:

Dommage que mes connaissances soient limitées au point de ne pas pouvoir débattre avec vous...
Étudiant en 2ème année de Licence Informatique.
Avatar du membre
TT22
Membre émérite
Membre émérite
Messages : 1566
Enregistré le : lun. 18 avr. 2011 15:21
Localisation : La Quatrième Dimension
Status : Hors ligne

Re: [R] Souci avec la fonction Random

#13

Message par TT22 »

C'est marrant que ce sujet soit posté à ce moment, parce que je suis justement entrain de développer une fonction random() pour FSProg. J'ai donc été confronté au problème posé par mikell :roll:
Mais moi j'ai réglé le problème de la manière qu'il a suggérée :

Code : Tout sélectionner

if (Par1int == Par2int) {return Par1int;}
Cordialement,
TT22
Avatar du membre
sylvanie
Niveau 11
Niveau 11
Messages : 1556
Enregistré le : jeu. 26 juil. 2007 21:31
Localisation : Paris
Status : Hors ligne

Re: [R] Souci avec la fonction Random

#14

Message par sylvanie »

Image
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [R] Souci avec la fonction Random

#15

Message par mikell »

Boss, tu es à côté de la plaque et ton raisonnement est émotionnel, pas mathématique...

Je reprends les points marquants de ton post :

Lien n°1
En mathématiques, une suite aléatoire, ou suite infinie aléatoire, est une suite de nombres ne possédant aucune structure, régularité, ou règle de prédiction identifiable.
OK, mais tu oublies de dire que ces définitions sont controversées, et que quelques lignes plus bas, il y a écrit :
" Selon Schnorr, seules les propriétés « qui peuvent être testées à l'aide d'expériences statistiques réelles », qui ont « un sens physique », devraient être prises en compte "
Sans doute ce grand mathématicien devait penser aux tirages de cartes...

Lien n°2
un intervalle mathématique est un ensemble de nombres délimité par deux nombres réels constituant une borne inférieure et une borne supérieure
Là encore, si tu as bien lu la page de ce lien, 2 formules auraient dû te sauter aux yeux :

[a;b] = {a<=x<=b}
ce qui veut dire : si l'intervalle est INCLUSIF, x peut être égal aux bornes
Or, c'est bien le cas pour la fonction Random, en effet si min = 1 et max = 2 alors x peut être égal à 1 ou 2, comme le prouve ce petit script

Code : Tout sélectionner

$txt = ""
$n = 0
While $n<50
$txt &= Random(1,2,1) & @crlf
$n += 1
Wend
msgbox(0,"", $txt)
comment deux valeurs identiques peuvent elles représenter une borne inférieure et dans le même temps une borne supérieure ? C'est un raisonnement totalement insensé !
Non, c'est un raisonnement mathématique, et là on arrive la 2ème formule
[a;a] = {a}
ça, c'est on ne peut plus clair... en effet dans un intervalle INCLUSIF, si les bornes sont identiques, alors le résultat est un ensemble à élément unique qui contient la borne
Si tu désapprouves, il te faut vite aller sur ton lien de wikipedia pour modifier l'article :wink:

Donc si la fonction Random respecte une formule mais pas l'autre, c'est qu'elle est buggée...
Tu me parle de ton problème de tirage de carte, mais en réalité, tu n'a pas de problème; c'est juste que tu n'avait pas géré l'erreur d'exception de l'utilisation de la fonction Random comme tu l'a fait pour ton besoin particulier
Bah oui, je me suis évidemment fait mon UDF mais c'est quand même pas fun d'être obligé à ça parce qu'une fonction intégrée renvoie un @error alors qu'elle ne devrait pas....
Le code ci-dessous correspond 100% à ta demande
Absolument pas... si le tirage se fait avec un nombre de cartes constant, OK ça marche, mais si on décrémente ce nombre à chaque tirage, on tombe sur le bug ^^

@Iste
Sachant que l'appel a la fonction est inutile pour A = B, autant relever cette erreur un cran plus haut sur B <= A.
Et puis quoi encore ? :shock:
On baigne dans la subjectivité, où on va si autoit commence à juger de l'utilité ou pas d'une instruction que tu poses ?
Faux ou exact, d'accord, mais utile ?
C'est plus autoit, c'est l'ordinateur Carl dans 2001 :mrgreen:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

Re: [R] Souci avec la fonction Random

#16

Message par Iste »

Toutafé d'accord avec mikell
La fonction Random() d'AutoIt tel qu'elle est n'a aucune raison de ne pas accepter un range null.
Mathématiquement ou conceptuellement (vu que pour rand(a,b) a et b sont des retours possibles)

Mais uniquement si on passe le flag a 1
The result will be in the range of Min to Max INCLUSIVE when using integers (just short of Max when using floats).
Du coup, si on est a 0, on est exclusif, et rand(a,a) n'a pas de solution possible. Le @error est donc totalement justifier.

On se retrouve au final, comme l'a dit Thierry, dans une fonctions ou des "bonus" on été ajouté pour faire plaisirs à certains.
Mais sans pousser l'idée jusqu'au bout.

Le vrai souci est donc qu'on à deux fonction en une, une "bas niveau" et l'autre "haut niveau" et qu'elle partage la même gestion d’exception.

@mikell qui rajoute du texte pendant que je tape ^^ :
C'est une conception comme une autre. Il est tout a fait acceptable de refuser des calcul inutiles quand on sait que le dev va bien gérer l'appel a la fonction (ce qui n'est pas le cas en AutoIt)
Car si ici, c'est pas bien méchant, dans d'autre cas, on peut avoir une lourde fonction qui va travailler pour rien, et inclure le test dedans est une factorisation logique de code si l'on sait que sinon il faudra le faire a chaque foi avant.
Signez ici
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [R] Souci avec la fonction Random

#17

Message par mikell »

Iste a écrit :Du coup, si on est a 0, on est exclusif, et rand(a,a) n'a pas de solution possible. Le @error est donc totalement justifier.
Bien sûr... mais il se trouve que la fonction Random propose et est censée gérer plusieurs flags, et l'utilisation du flag 1 dans les scripts n'est pas spécialement rare :roll:
Il est donc approprié de dire : on a deux fonctions en une, et l'une des deux est buggée parce qu'elle PEUT dans certains cas être mathématiquement fausse

EDIT pour le rajout :mrgreen:
Sérieux, si le "jugement d'utilité" émis par la fonction est mathématiquement exact, ça ne pose aucun problème, mais il se trouve dans ce cas précis que ce n'est pas le cas ^^
Modifié en dernier par mikell le ven. 08 juin 2012 21:57, modifié 1 fois.
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

Re: [R] Souci avec la fonction Random

#18

Message par Iste »

Oui c'est exactement ca, on a deux fonctions dans une seule, et elles utilisent toutes les deux la même gestion d'exception qui est celle de la plus strict, laissant l'autre sur sa faim dans des cas qui devraient fonctionner.
T'as bien fait de lever le cas ici, j'avais jamais remarqué ca, et c'est a mon gout une reel erreur.
C'est également un tres bon exemple des soucis que l'on peut avoir en voulant faire des "bonus" pour les dev !
Signez ici
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [R] Souci avec la fonction Random

#19

Message par mikell »

En fait je crois que ce qui hérisse réellement Tlem, c'est qu'un minable chat orange pervers ait osé suggérer qu'une fonction intégrée du Beau Magnifique Autoit puisse être possiblement buggée :mrgreen:
(exceptionnellement, ça c'est *vraiment* du troll)
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11812
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [R] Souci avec la fonction Random

#20

Message par Tlem »

mikell a écrit :Boss, tu es à côté de la plaque et ton raisonnement est émotionnel, pas mathématique...
Ceci est ton avis, je n'ai point d'émotions en la circonstance, mais une simple logique de base.

En ce qui concerne les liens, tu ne fait que de prendre la partie qui t'intéresse (comme je l'ai fait) en interprétant de ton point de vue et en oubliant le principe de base de l'intervalle. ;)

En prenant ma logique la plus simple (binaire), et en lisant la définition d'un intervalle (mathématique), je lit :
En mathématiques, un intervalle (du latin intervallum) est étymologiquement un ensemble compris entre deux valeurs.
Maintenant, prenons la définition de 'Entre' :
- Que quelque chose se situe dans l'espace qui sépare des choses ou des êtres : Nous sommes tombés en panne entre Orléans et Blois.
- Que quelque chose se situe dans un intervalle de temps, une durée entre deux moments : Téléphonez-moi entre midi et deux heures.
- Un état intermédiaire : Une couleur entre le jaune et le vert.
- L'ensemble au sein duquel une possibilité de choix est offerte : Il a fallu choisir entre plusieurs candidats.
En restant simple, je constate qu'il est fait état ci-dessus de valeurs différentes.

Ce qui nous ramène à la première définition (je parle bien de la définition originelle et non celle qui peut être interprétée ou sa controverse), qui signifie donc qu'un intervalle est un ensemble compris entre deux valeurs différentes.
Soit [a;b] avec obligatoirement {a>x<b} puisque a<b
Et à ce titre, la fonction Random() d'AutoIt joue parfaitement ce rôle.
mikell a écrit :en mathématiques, dans un intervalle INCLUSIF, si les bornes sont identiques, alors le résultat est un ensemble à élément unique qui contient la borne
Surement, mais à partir du moment ou il est fait état que les bornes doivent être différentes, ce cas ne peut être pris en compte !
mikell a écrit :Donc si la fonction Random respecte une formule mais pas l'autre, c'est qu'elle est buguée, point.
Simple question d'interprétation.
mikell a écrit :
Le code ci-dessous correspond 100% à ta demande
Absolument pas... si le tirage se fait avec un nombre de cartes constant, OK ça marche, mais si on décrémente ce nombre à chaque tirage, on tombe sur le bug ^^
Ha ! :shock:
Et comment tu fait pour faire un tirage avec 0 carte ?

@Iste et mikell:
Hé hé je vois que ça tape dur ...
En ce qui me concerne, je ne suis toujours pas d'accord avec vous, car ceci est lié comme je l'ai déjà dit à une simple imprécision dans les commentaires de la fonction qui implique une interprétation différente selon celui qui lit.
The result will be in the range of Min to Max INCLUSIVE when using integers (just short of Max when using floats).
Vous partez du principe que Min peut être égal à Max or si il y à une notion de valeur mini et de valeur maxi, alors les valeurs doivent être différentes, sinon la description de la fonction aurait été :
Random ( [a [, b [, Flag]]] )

a [optional] The smallest number to be generated. The default is 0.
b [optional] The largest number to be generated. The default is 1.
Flag [optional] If this is set to 1 then an integer result will be returned. Default is a floating point number.

Remarks
The result will be in the range of a to b INCLUSIVE when using integers (just short of Max when using floats) and return a or b if a=b.
:P

@mikell : Je n'ai absolument rien d'hérissé et j'apprécie que tu souligne le 'possiblement buguée' qui est déjà moins impératif. Profite bien d'annoncer ta couleur actuelle car ça ne va pas durer. :P :P
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Répondre