subtilité de rand VG5000

Cette catégorie traite de développements récents pour nos vieilles machines, applications, jeux ou démos... Amis programmeurs, c'est ici que vous pourrez enfin devenir célèbres!

Modérateurs : Papy.G, fneck, Carl

Avatar du membre
Xavier_
Messages : 149
Enregistré le : 24 avr. 2020 21:20

Re: subtilité de rand VG5000

Message par Xavier_ » 07 mai 2020 03:21

Tout comme l'explication de ON X GOTO/GOSUB...
Si X=0 X<1 ou X>nb argument, la commande est ignoré.
C'est exactement ce qui est marqué sur le manuel… mais…

Enfin, bref… ils n'auraient pas le faire en anglais, et le traduire en voulant tromper les dyslexiques Français !
C'est petit et mesquin...

Markerror
Messages : 1585
Enregistré le : 31 oct. 2011 19:21
Localisation : Orléans
Contact :

Re: subtilité de rand VG5000

Message par Markerror » 07 mai 2020 08:06

Bon, qui refait une version du bouquin ? :-).

Avatar du membre
Carl
Modérateur
Messages : 11126
Enregistré le : 08 avr. 2007 13:21
Localisation : http://www.doledujura.fr
Contact :

Re: subtilité de rand VG5000

Message par Carl » 07 mai 2020 08:10

De mémoire, clefs pour VG5000 contient des erreurs...

Carl

Guillaume
Messages : 45
Enregistré le : 26 avr. 2020 15:24
Localisation : Nice

Re: subtilité de rand VG5000

Message par Guillaume » 07 mai 2020 08:41

Xavier_ a écrit :
07 mai 2020 01:58
:shock:

Code : Tout sélectionner

 10 FOR i=1 TO 999999
 20 a=RND(1):IF a=0 THEN PRINT i:END
 30 NEXT I
Pareil pour Zéro !
Donc, "compris entre 0 et 1"... ils sont dans les clous.
(exclus 0 et 1 pas compris dedans…)

[comme Carl il a déjà dit]
J'ai eu un zero dans mes essais hier.

Avatar du membre
Mokona
Messages : 515
Enregistré le : 17 déc. 2016 22:01
Localisation : Nord Est des Yvelines
Contact :

Re: subtilité de rand VG5000

Message par Mokona » 07 mai 2020 08:48

Oui, Clés pour VG5000µ contient des erreurs. C'est en large partie un copier/coller (traduit) des documentations techniques du VG5000µ et du Z80, mais avec des petites choses qui ont été traduites littéralement sans être comprises.

(Un de ces jours, je terminerai peut-être mon boulot de remise à plat de tout ça... un de ces jours... et il y aura des erreurs dedans, mais ça pourra être corrigé)

Guillaume
Messages : 45
Enregistré le : 26 avr. 2020 15:24
Localisation : Nice

Re: subtilité de rand VG5000

Message par Guillaume » 07 mai 2020 08:53

joaopa a écrit :
06 mai 2020 22:37
@Markerror. Merci de confirmer mes doutes.

@Guillaume: du coup, dans to programme Rode Lunner, qu'espérais-tu des intructions du type int(rnd(1)*5) (par exemple ligne 218)
Ligne 218 c'est pour fixer au hasard la longueur (en temps) du mode WAITING au démarrage du LEVEL. Pour ne pas que tous les ennemis se mettent en route tout de suite et en même temps. Je me sert d'un RND pour fixer cela. EL(EN)=INT(RND(1)*5)+5 qui donne une valeur entre 5 et 9 (nombre de cycle dans la boucle, correspondant normalement au double de mouvement 10 à 18 pour le héro).

A chaque fin de mode pour un ennemi, on change de mode au hasard pour une durée prise au hasard:
894 EL(N)=INT(RND(1)*10)+10:RETURN
Entre 10 et 19 cycles.

Note que on peut avoir un ennemi qui change de mode de poursuite et se retrouve au hasard dans le même mode que le mode précédent.

Avatar du membre
Carl
Modérateur
Messages : 11126
Enregistré le : 08 avr. 2007 13:21
Localisation : http://www.doledujura.fr
Contact :

Re: subtilité de rand VG5000

Message par Carl » 07 mai 2020 09:33

sur 900 000 tirages, voici les valeurs les plus basses...pas un seul zéro.
mini.jpg
mini.jpg (10.4 Kio) Vu 195 fois
Carl

Avatar du membre
Xavier_
Messages : 149
Enregistré le : 24 avr. 2020 21:20

Re: subtilité de rand VG5000

Message par Xavier_ » 07 mai 2020 10:14

Encore un truc bête…
INT(RND(1)) donnera TOUJOURS : 0

INT (0.0000001)=0
INT (0.9999999)=0

Donc, pour RND, comme on a jamais 1... on a toujours Zéro !

Il n'y a donc pas d'arrondis mais une valeur entière stricte...

__sam__
Messages : 5158
Enregistré le : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: subtilité de rand VG5000

Message par __sam__ » 07 mai 2020 10:31

Carl a écrit :
07 mai 2020 09:33
sur 900 000 tirages, voici les valeurs les plus basses...pas un seul zéro.
Avec autant de tirages, comme je suppose que l'état interne du générateur doit avoir au max 16bits, tu as du certainement rencontrer le cycle plusieurs fois (13 fois à la louche). Par contre si le générateur est sur 24bits, il faudrait itérer sur un peu plus de 16M pour parcourir tout l'espace d'état et voir si 0 ou 1 sortent.
Samuel.
A500 Vampire V2+ ^8^, A1200(030@50mhz/fpu/64mb/cf 8go),
GVP530 (MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.

Avatar du membre
Carl
Modérateur
Messages : 11126
Enregistré le : 08 avr. 2007 13:21
Localisation : http://www.doledujura.fr
Contact :

Re: subtilité de rand VG5000

Message par Carl » 07 mai 2020 11:09

j'ai relancé, le tirage est actuellement à 1.28 million
toujours pas de 0 ou 1
rnd stat.jpg
rnd stat.jpg (64.79 Kio) Vu 180 fois

Guillaume
Messages : 45
Enregistré le : 26 avr. 2020 15:24
Localisation : Nice

Re: subtilité de rand VG5000

Message par Guillaume » 07 mai 2020 11:32

Hello,

Effectivement, tu as raison, j'ai fait tourner sur plusieurs millions de tirages, je n'ai pas eu de 0 ni de 1.
Minimum: 0.000006 (6.83009 E-06)
Maximum: 0.999981

Je pense que j'ai du quiché en faisant mon print L après avoir stoppé le programme en mon trompant de variable pour avoir 0.

Avatar du membre
Mokona
Messages : 515
Enregistré le : 17 déc. 2016 22:01
Localisation : Nord Est des Yvelines
Contact :

Re: subtilité de rand VG5000

Message par Mokona » 07 mai 2020 16:59

En regardant de plus prêt ce que l'instruction fait : le nombre en sortie a un exposant fixé à $80. Cela ne peut donc jamais être un zéro.

La seule valeur qui se transcrit à zéro est lorsque l'exposant est $00 (valeur spécifique réservée).

Avatar du membre
Xavier_
Messages : 149
Enregistré le : 24 avr. 2020 21:20

Re: subtilité de rand VG5000

Message par Xavier_ » 07 mai 2020 17:11

@Markerror:
Bon, qui refait une version du bouquin ?
:-).
Bon, RND c'est fait, on passe à quoi ?

Non, sérieusement, ce Basic est très subtile et piégeux, même s'il est estampillé Microsoft.

Avatar du membre
Mokona
Messages : 515
Enregistré le : 17 déc. 2016 22:01
Localisation : Nord Est des Yvelines
Contact :

Re: subtilité de rand VG5000

Message par Mokona » 07 mai 2020 21:52

Voilà !
Capture d’écran de 2020-05-07 21-47-20.png
Capture d’écran de 2020-05-07 21-47-20.png (29.41 Kio) Vu 140 fois
Ce n'est pas un montage... mais une insertion de bonnes valeurs au bon moment avec un debugeur... Et je pense pouvoir montrer que ces valeurs ne peuvent jamais arriver. Pour 1, c'est absolument certain. Pour 0... je dois faire une dernière vérification, mais j'en suis quasi absolument certain.

Guillaume
Messages : 45
Enregistré le : 26 avr. 2020 15:24
Localisation : Nice

Re: subtilité de rand VG5000

Message par Guillaume » 07 mai 2020 23:00

RND 33 millions de tirages.jpg
RND 33 millions de tirages.jpg (297.39 Kio) Vu 135 fois
J'ai fait tourner le test avec 33 millions de tirage sur l'émulateur. (affichage tous les 1000 tirages)
Pas de 0 pas de 1.
J'ai arreté le test, le nombre de tirage me semble suffisant (ca avait convergé assez rapidement).

Répondre