Variables aléatoires, Pbs sur G3 |
Bienvenue invité ( Connexion | Inscription )
Variables aléatoires, Pbs sur G3 |
22 Oct 2004, 17:38
Message
#1
|
|
Nouveau Membre Groupe : Membres Messages : 38 Inscrit : 30 Jun 2004 Membre no 20 616 |
Bonjour à tous,
j'ai un petit pb avec les variables aléatoires d'AppleScript. Voilà, j'ai créé une petite appli pour mon gamin afin qu'il s'exerce (en s'amusant !) à un peu de calcul mental. J'avais tout fignolé, la possibilité d'un 2e joueur, le score et les temps. Les variables (du style : set A to random number from 1 to 100 with seed 0) me servent évidemment à afficher des nombres qui changent d'un tirage à l'autre. Sur mon G4, ça fonctionne sans problème (aussi bien en OS9 qu'en X.3) Le hic ! c'est que passé sur le G3 (blanc, 266 MHz), sur OS9, les valeurs sont les mêmes d'un tirage sur l'autre, même en biaisant avec une variable du style : set B to random number from 100 to 200 with seed 0 set A to B mod 100 (pour retrouver des nombres compris entre 0 et 100). J'obtiens toujours 67 ou 66. J'imagine que c'est une question de processeur. Connaissez-vous un moyen de contourner cette difficulté et d'afficher des nombres qui soient vraiment aléatoires. Merci d'avance pour vos conseils, |
|
|
22 Oct 2004, 20:10
Message
#2
|
|
Macbidouilleur de bronze ! Groupe : Membres Messages : 368 Inscrit : 19 Nov 2003 Membre no 11 803 |
Quelles sont les versions respectives d'OS 9 ?
Je pense que ce doit être la 9.2.2 sur ton G4. Sur le G3, s'il n'y a pas OS X d'installé, le mieux est la 9.1. Je pencherai plutôt pour un bug d'Applescript. Mais ce n'est qu'à "vue de nez". -------------------- --> Visitez mon site dédié à AppleScript sous Mac OS X zeRafioScripter et donnez-moi vos impressions !
|
|
|
22 Oct 2004, 20:26
Message
#3
|
|
Macbidouilleur d'Or ! Groupe : Membres Messages : 6 580 Inscrit : 20 Mar 2003 Membre no 6 765 |
QUOTE(Cicero @ 22 Oct 2004, 17:38) set A to random number from 1 to 100 with seed 0 La plupart des générateurs pseudo-aléatoires ont besoin d'une valeur initiale (le paramètre seed que tu mets à 0) elle même 'aléatoire' sinon, la séquence est toujours la même. Tu peux te servir des ticks ou de la date actuelle, du genre: CODE set B to random number from 100 to 200 with seed time of (current date)
-------------------- késtananafout' (:
|
|
|
22 Oct 2004, 20:40
Message
#4
|
|
Macbidouilleur d'Or ! Groupe : Membres Messages : 5 675 Inscrit : 3 Nov 2003 Lieu : CUL (Communauté Urbaine de Lille !) Bon Appartement Chaud Membre no 11 246 |
QUOTE(chombier @ 22 Oct 2004, 21:26) La plupart des générateurs pseudo-aléatoires ont besoin d'une valeur initiale (le paramètre seed que tu mets à 0) elle même 'aléatoire' sinon, la séquence est toujours la même. Tu peux te servir des ticks ou de la date actuelle, du genre: CODE set B to random number from 100 to 200 with seed time of (current date) [right][snapback]892094[/snapback][/right] D'accord avec chombier : je ne connais pas la syntaxe, mais ce qui est sûr c'est que sur une calculette programmable, quand on utilise la fonction random, elle donne toujours le même nombre en premier, c'est pourquoi, au début d'un programme, il faut toujours une boucle du genre "tant que" pour que tant que l'on n'a pas appuyé sur une touche, le processeur tire des nombres au hasard. Si bien que quand on démarre vraiment le programme, la fonction random donne vraiment un nombre au hasard ! Me suis-je bien fait comprendre ou ai-je embrouillé la réponse de chombier ? Ce message a été modifié par Jack the best - 22 Oct 2004, 20:42. -------------------- iMac 27" Retina 5K 1To Fusion drive 8 Go RAM Intel Core I5 quadricœur à 3,5 GHz Mojave 10.14.6 , iMac Intel Core I5 3,1 GHz 1To (El Capitan 10.11.6 depuis le 13/9/2016) en rade carte mère !, MacBook Pro 17" 500 Go Snow Leopard, iMac G5 20" PPC Tiger 250 Go Rev A, iPhone 14 128Go OS 16.1.1 et SONY pour la photo numérique Minolta pour l'argentique Pink #FD3F92 Breton MB Attention aux huîtres, SURTOUT celles qui mangent des oiseaux ! How much wood would a woodchuck chuck if a woodchuck could chuck wood ? |
|
|
22 Oct 2004, 21:59
Message
#5
|
|
Nouveau Membre Groupe : Membres Messages : 38 Inscrit : 30 Jun 2004 Membre no 20 616 |
Il s'agit de 9.2 (sur le G3).
Entre-temps j'ai essayé avec une variable de la forme : set A4 to some item of {1, 2, 3, , 100} et ça marche dans ce cas. Mais ce n'est pas très satisfaisant (ça va encore parce que la plage de 1 à 100 n'est pas trop étendue, mais dans le cas contraire !). De plus, mon G3 m'affiche le message : "Impossible d'enregistrer les modifications du script car la mémoire disponible est insuffisante -108 " Bizarre. L'inconvénient de me servir de la date pour modifier le paramètre seed (set A to random number from 1 to 100 with seed time of (current date)) est que, voulant charger 2 variables en même temps (je souhaite obtenir une addition du type A + B avec A et B aléatoires), eh bien il m'affiche des nombres A et B identiques. Qu'est-ce que les "ticks" évoqués par chombier ? |
|
|
22 Oct 2004, 22:17
Message
#6
|
|
Macbidouilleur d'Or ! Groupe : Membres Messages : 6 580 Inscrit : 20 Mar 2003 Membre no 6 765 |
QUOTE(Cicero @ 22 Oct 2004, 21:59) Il s'agit de 9.2 (sur le G3). Entre-temps j'ai essayé avec une variable de la forme : set A4 to some item of {1, 2, 3, , 100} et ça marche dans ce cas. Mais ce n'est pas très satisfaisant (ça va encore parce que la plage de 1 à 100 n'est pas trop étendue, mais dans le cas contraire !). De plus, mon G3 m'affiche le message : "Impossible d'enregistrer les modifications du script car la mémoire disponible est insuffisante -108 " Bizarre. L'inconvénient de me servir de la date pour modifier le paramètre seed (set A to random number from 1 to 100 with seed time of (current date)) est que, voulant charger 2 variables en même temps (je souhaite obtenir une addition du type A + B avec A et B aléatoires), eh bien il m'affiche des nombres A et B identiques. Qu'est-ce que les "ticks" évoqués par chombier ? [right][snapback]892181[/snapback][/right] Il faut que tu n'initialises le random seed qu'une seule fois dans ton programme: CODE set A to random number from 0 to 100 with seed time of (current date) set B to random number from 0 to 100 Le tick, c'est un compteur en 1/60éme de secondes depuis le démarrage du Macintosh. Mais en fait je ne crois pas qu'il soit directement accessible dans AppleScript sans une osax. Ce message a été modifié par chombier - 22 Oct 2004, 22:20. -------------------- késtananafout' (:
|
|
|
23 Oct 2004, 16:46
Message
#7
|
|
Macbidouilleur de bronze ! Groupe : Membres Messages : 368 Inscrit : 19 Nov 2003 Membre no 11 803 |
Vos interventions sont très instructives, mais
Je ne comprends par pourquoi le code de Cicero fonctionne comme il faut sur son G4 et pas sur son G3? J'ai lancé la commande 'random number from 100 to 200 with seed 0' sur mon G4 OSX 10.2.8. Les valeurs renvoyées sont toujours différentes. Il me semble plutôt qu'il y a une évolution d'AppleScript qui rectifie un bug ou qui change un comportement. J'ai (dans un placard) un PowerBook WallStreet sous 9.1. Dès que j'ai le temps, je me propose de faire un essai de ce code et de vous en donner les résultats. Je n'ai pas pu attendre: Sous 9.1, la commande renvoie toujours le même résultat, comme vous l'expliquez. En ajoutant la date, ça fonctionne parfaitement: random number from 100 to 200 with seed ((current date) as integer) Ce message a été modifié par zeRafioScripter - 23 Oct 2004, 17:03. -------------------- --> Visitez mon site dédié à AppleScript sous Mac OS X zeRafioScripter et donnez-moi vos impressions !
|
|
|
23 Oct 2004, 17:30
Message
#8
|
|
Macbidouilleur d'Or ! Groupe : Membres Messages : 2 844 Inscrit : 10 Jul 2002 Membre no 2 871 |
Et en faisant juste :
random number from 100 to 200 ? |
|
|
23 Oct 2004, 18:25
Message
#9
|
|
Macbidouilleur d'Or ! Groupe : Membres Messages : 6 580 Inscrit : 20 Mar 2003 Membre no 6 765 |
QUOTE(zeRafioScripter @ 23 Oct 2004, 16:46) Vos interventions sont très instructives, mais
Je ne comprends par pourquoi le code de Cicero fonctionne comme il faut sur son G4 et pas sur son G3? Parcequ'Apple a sans doute changé le générateur aléatoire. QUOTE(zeRafioScripter @ 23 Oct 2004, 16:46) J'ai lancé la commande 'random number from 100 to 200 with seed 0' sur mon G4 OSX 10.2.8. Les valeurs renvoyées sont toujours différentes. Il me semble plutôt qu'il y a une évolution d'AppleScript qui rectifie un bug ou qui change un comportement. J'ai (dans un placard) un PowerBook WallStreet sous 9.1. Dès que j'ai le temps, je me propose de faire un essai de ce code et de vous en donner les résultats. Je n'ai pas pu attendre: Sous 9.1, la commande renvoie toujours le même résultat, comme vous l'expliquez. En ajoutant la date, ça fonctionne parfaitement: random number from 100 to 200 with seed ((current date) as integer) [right][snapback]892893[/snapback][/right] Ben oui, mais deux appels consécutifs réinitialiseront le générateur aléatoire avec la même valeur de base (le seed), et redonneront donc la même valeur, à moins que, coup de bol, le système ne passe d'une seconde à l'autre à juste entre les deux appels. Il faut initialiser le random seed une seule fois, au lancement de l'application, et ensuite, on peut juste appeler "random number from 100 to 200" sans seed. -------------------- késtananafout' (:
|
|
|
23 Oct 2004, 19:01
Message
#10
|
|
Macbidouilleur de bronze ! Groupe : Membres Messages : 368 Inscrit : 19 Nov 2003 Membre no 11 803 |
Ma précédente intervention n'était pas pour contredire mais pour comprendre.
Pour les ticks (sous 9), il y a l'osax Jon's commands : http://www.seanet.com/~jonpugh/ -------------------- --> Visitez mon site dédié à AppleScript sous Mac OS X zeRafioScripter et donnez-moi vos impressions !
|
|
|
24 Oct 2004, 00:28
Message
#11
|
|
Expressivité Bovine Groupe : Membres Messages : 1 268 Inscrit : 23 Jun 2003 Lieu : Chez les Gones, mais vert de coeur... Membre no 8 222 |
J'ai juste une question HS, mais comment ça marche un générateur aléatoire???
-------------------- Hackintosh | i3 540 3,07 Ghz | 8 Go DDR 1333 | SSD 60 Go Vertex 2 | Samsung EcoGreen F3 500 Go | Radeon 5770 HD 1Go DDR5 | Mac Os Lion 10.7.4
Synology Ds211j 2 x 1To RAID 1 iPhone 3GS | 16Go | iOS 5.1.1 Plus t'en chies fort, moins t'en chies longtemps. - proverbe montagnard - |
|
|
24 Oct 2004, 11:12
Message
#12
|
|
Nouveau Membre Groupe : Membres Messages : 38 Inscrit : 30 Jun 2004 Membre no 20 616 |
J'ai continué mes expériences au sujet des variables aléatoires en suivant vos conseils. Et j'ai l'impression que cela dépend de l'ordi.
- Sur un premier Power PC G3 (266) tournant en 9.2.2, la meilleure solution est effectivement d'afficher une variable quelconque du style set A to random number from 1 to 100 with seed time of (current date) Ensuite la fonction random donnera bien des nombres aléatoires. Sinon avec le paramètre seed = 0, les séquences de nombres sortent toujours dans le même ordre. - Sur un second G3, plus ancien (7200/90) et tournant en 8.6, là en revanche je n'ai plus de problèmes. Quel que soit le paramétrage de seed, j'ai bien des valeurs aléatoires. Curieux ! |
|
|
24 Oct 2004, 12:31
Message
#13
|
|
Macbidouilleur de bronze ! Groupe : Membres Messages : 368 Inscrit : 19 Nov 2003 Membre no 11 803 |
Je me souviens bien avoir utilisé cette fonction sous Système 8.x sans avoir besoin de l'initialiser. C'est ce que je voulais dire par :
QUOTE Il me semble plutôt qu'il y a une évolution d'AppleScript qui rectifie un bug ou qui change un comportement. On peut le dire autrement: Dans Applescript, la fonction Random est "pré-parametrée" pour être automatiquement initialisée à chaque appel. Un bug ou un oubli de la part des développeurs a pour conséquence que sous certaines versions de Mac OS (toutes les versions 9?) l'initialisation n'est pas prise en compte (cf. «rectifie un bug»). A moins que ça n'ait été un choix des développeurs (cf. «qui change un comportement»), sur lequel ils sont revenus. Ce message a été modifié par zeRafioScripter - 24 Oct 2004, 12:34. -------------------- --> Visitez mon site dédié à AppleScript sous Mac OS X zeRafioScripter et donnez-moi vos impressions !
|
|
|
25 Oct 2004, 08:12
Message
#14
|
|
Tendance cubiste Groupe : Membres Messages : 1 595 Inscrit : 17 Sep 2003 Lieu : Là où ce qui tombe des arbres à l'automne commence par 'F' et finit par 'n' Membre no 9 643 |
QUOTE(le grimpeur @ 24 Oct 2004, 01:28) J'ai juste une question HS, mais comment ça marche un générateur aléatoire??? Souvent on utilise des suite récurrentes du type :[right][snapback]893162[/snapback][/right] Xn = (aXn-1 + b ) Mod N Où Mod est l'opérateur modulo ! En choississant bien a, b, N (constantes) et X0 (graine du générateur) on peut obtenir des séquences pseudo aléatoires. Un grand classique : Xn = 7^5 Xn-1 mod (2^31-1) qui produit une séquence de 2^31 - 1 nombres (si X0 != 0 ) Ce genre de générateurs est utile quand on veut pouvoir répéter une séquence. D'autres générateurs nécessitent un peu de hard (comme mesurer la tension aux bornes d'une diode), mais ne sont plus répétitifs ce qui est d'un bon aloi dans certains cas mais peut poser des problèmes dans d'autres cas. Ce message a été modifié par Bac's - 27 Oct 2004, 14:02. -------------------- G5 1,6GHz 1 270Mo RAM OS/X 10.4.1 + STHome Hyper-Bidouillé
C'est à force de rater que l'on finit par réussir. Devise Shadok. [Editus moderatus]Plus de bannières merci... [Editus Bacsus]Oui chef, bien chef ! |
|
|
26 Oct 2004, 20:11
Message
#15
|
|
Expressivité Bovine Groupe : Membres Messages : 1 268 Inscrit : 23 Jun 2003 Lieu : Chez les Gones, mais vert de coeur... Membre no 8 222 |
(mode HS fin)
Merci beaucoup (/mode HS fin) -------------------- Hackintosh | i3 540 3,07 Ghz | 8 Go DDR 1333 | SSD 60 Go Vertex 2 | Samsung EcoGreen F3 500 Go | Radeon 5770 HD 1Go DDR5 | Mac Os Lion 10.7.4
Synology Ds211j 2 x 1To RAID 1 iPhone 3GS | 16Go | iOS 5.1.1 Plus t'en chies fort, moins t'en chies longtemps. - proverbe montagnard - |
|
|
Nous sommes le : 5th May 2024 - 12:15 |