µLua DS - Forum officiel | Official forum Forum Index

µLua DS - Forum officiel | Official forum
Le bon endroit pour en savoir plus sur MicroLua et pour parler de vos projets ! | The right place to learn more about MicroLua and talk about your projects !

 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister   ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

[Résolu] La fonction math.rand()

 
Post new topic   Reply to topic    µLua DS - Forum officiel | Official forum Forum Index -> Section française -> Report de bugs
Previous topic :: Next topic  
Author Message
Fantasix
Modérateur

Offline

Joined: 26 Apr 2010
Posts: 1,317
Localisation: SCREEN_UP, en -1, -1

PostPosted: Wed 9 Jun 2010 - 16:35    Post subject: [Résolu] La fonction math.rand() Reply with quote

Bonjour tout le monde,

Bon, ce n'est pas réellement un bug, mais je ne savais pas où le placer sinon.

J'ai constaté que la fonction math.rand() n'est pas totalement aléatoire.

Bon, pour m'expliquer, il sera préférable de le faire avec un exemple tiré de mon Jeu, TBM.Adventure :

Le BlackMage, lors d'un combat, est positionné "aléatoirement" sur le plateau de jeu, ce qui donne :

Zone rouge = Positions éventuelles

Code:

bm.caseX = math.random(1,2)
bm.caseY = math.random(1,8)


Jusque là, tout va bien.

Mais ! Lorsque je ferme MLS (ou bien éteins ma DS), et que je relance le script, la position générée est à nouveau la meme !!

J'ai fait des tests, et ce n'est pas seulement dans ce cas de figure o_o'

On dirait que MicroLua suit un certain chemin, quelle empruntera toujours ...

L'aléatoire est il réellement aléatoire  ?? ... That is the question xD

Fanta'
_________________


BMA News :

Création du Homebrew Storage en cours ...


Last edited by Fantasix on Sat 19 Mar 2011 - 16:37; edited 1 time in total
Back to top
Visit poster’s website
Publicité






PostPosted: Wed 9 Jun 2010 - 16:35    Post subject: Publicité

PublicitéSupprimer les publicités ?
Back to top
Quent42340


Offline

Joined: 03 Jun 2009
Posts: 1,388
Localisation: Veauche

PostPosted: Wed 9 Jun 2010 - 17:13    Post subject: [Résolu] La fonction math.rand() Reply with quote

Hum... As-tu essayé en utilisant math.randomseed() avant ? Je ne connais pas trop les fonctions mathématiques mais je pense qu'elle sert à quelque chose...
_________________
Mes projets: https://github.com/Quent42340


Back to top
Visit poster’s website
Ghuntar


Offline

Joined: 03 Aug 2009
Posts: 323
Localisation: near Paris

PostPosted: Wed 9 Jun 2010 - 17:47    Post subject: [Résolu] La fonction math.rand() Reply with quote

La doc est là :


http://www.lua.org/manual/5.1/manual.html#pdf-math.random


En fait, c'est pas vraiment aléatoire. Le mieux est d'utiliser math.randomseed(x) avec une valeur de x à peu près aléatoire genre un os.time :


 
Code:
 math.randomseed(os.time())


Ensuite tu peux tranquillement faire tes math.random().
Par contre, pour os.time, je crois me rappeler qu'il y avait un problème, mais je ne sais plus si c'était sur no$gba ou sur le vrai hardware.

Ghuntar.
_________________
http://code.google.com/p/ghuntlet/


Last edited by Ghuntar on Wed 9 Jun 2010 - 17:56; edited 1 time in total
Back to top
Quent42340


Offline

Joined: 03 Jun 2009
Posts: 1,388
Localisation: Veauche

PostPosted: Wed 9 Jun 2010 - 17:48    Post subject: [Résolu] La fonction math.rand() Reply with quote

Oui voilà, merci Ghuntar d'avoir complété mon message =)
_________________
Mes projets: https://github.com/Quent42340


Back to top
Visit poster’s website
Fantasix
Modérateur

Offline

Joined: 26 Apr 2010
Posts: 1,317
Localisation: SCREEN_UP, en -1, -1

PostPosted: Wed 9 Jun 2010 - 17:50    Post subject: [Résolu] La fonction math.rand() Reply with quote

Hum merci...

J'ai mis un math.randomseed(os.time()) avant, et ca fonctionne.

Néanmoins, c'est quand même bizarre...

Fanta'
_________________


BMA News :

Création du Homebrew Storage en cours ...


Back to top
Visit poster’s website
Ghuntar


Offline

Joined: 03 Aug 2009
Posts: 323
Localisation: near Paris

PostPosted: Wed 9 Jun 2010 - 22:17    Post subject: [Résolu] La fonction math.rand() Reply with quote

Qu'est-ce qui est bizarre ? Qu'une machine ne puisse pas te fournir un résultat VRAIMENT aléatoire ? Moi ça me parait normal.


Ghuntar.


 
_________________
http://code.google.com/p/ghuntlet/


Back to top
Fantasix
Modérateur

Offline

Joined: 26 Apr 2010
Posts: 1,317
Localisation: SCREEN_UP, en -1, -1

PostPosted: Wed 9 Jun 2010 - 22:28    Post subject: [Résolu] La fonction math.rand() Reply with quote

Mouais j'sais pas, j'm'y connais pas vraiment donc bon x)

Mais oui, c'est bien ça que je trouvais bizarre ^.^

M'enfin, maintenant ça fonctione, donc tout va bien =D

Manta'
_________________


BMA News :

Création du Homebrew Storage en cours ...


Back to top
Visit poster’s website
Reylak
Administrateur

Offline

Joined: 24 Nov 2008
Posts: 2,838
Localisation: Toulouse

PostPosted: Thu 10 Jun 2010 - 17:54    Post subject: [Résolu] La fonction math.rand() Reply with quote

Tu sais Fanta', l'aléatoire dans la prog, ça n'est qu'une série de calcul sur un nombre que tu donnes à la fonction seed(), qui sont tellement compliqués et farfelus que ça devient quasiment aléatoire. Mais imagine que la base des calculs soit toujours la même : comme les calculs ne changent pas, le résultat est le même. D'où l'intérêt du seed(), avec par exemple os.time(), qui varie tout le temps justement Smile

Et comme l'a dit Ghuntar, j'avais rencontré un problème avec l'os.time(), qui n'est pas mis à jour sur MLS si je me rappelle bien (ou no$GBA), mais sur la DS ça marche très bien. Je veux dire qu'il ne change pas au cours du programme, ce qui est assez handicapant.
_________________


Plein d'infos sur le SourceForge !


Back to top
Visit poster’s website MSN Skype
Fantasix
Modérateur

Offline

Joined: 26 Apr 2010
Posts: 1,317
Localisation: SCREEN_UP, en -1, -1

PostPosted: Thu 10 Jun 2010 - 19:53    Post subject: [Résolu] La fonction math.rand() Reply with quote

Moui, certes, c'est pas faux x)

Merci pour les précisions donc, j'essayerais de retenir tout ça *o*

Fanta'
_________________


BMA News :

Création du Homebrew Storage en cours ...


Back to top
Visit poster’s website
thomh@ck


Offline

Joined: 01 Aug 2011
Posts: 360
Localisation: Notepad++

PostPosted: Wed 4 Jun 2014 - 13:30    Post subject: [Résolu] La fonction math.rand() Reply with quote

je déterre ce topic mais c'est juste pour être sur.

Donc pour obtenir un aléatoire convainquant il suffit de faire:

 
Code:
 math.randomseed(os.time())
 var = math.random(1,80)
 screen.print(SCREEN_UP,10,10,var)


 Et le résultat sera vraiment aléatoire entre 1 et 80  d'une utilisation à l'autre du script ?  car en souvenir pour mon jeux ' papa noel ' la musique devait être aléatoire et ne l'était en fin de compte pas ! et pour mon nouveaux projet j'en est besoin ...

Merci Wink
_________________
Vous aimez l'Origami ?


Back to top
Visit poster’s website
Thomas99


Offline

Joined: 12 Apr 2012
Posts: 142
Localisation: Le forum.

PostPosted: Wed 4 Jun 2014 - 14:11    Post subject: [Résolu] La fonction math.rand() Reply with quote

Comme dit plus haut, l'aléatoire n'existe pas en informatique, on parle de pseudo-aléatoire. En Lua, on utilise donc math.randomseed(), qui change la valeur sur laquelle l'algorithme se base pour générer les nombres "aléatoires" (le seed). os.time(), que tu utilise comme seed ici, change souvent (précision d'une seconde je crois, je sais plus si µLua change ça) donc si on lance le script et que os.time() a changé (une seconde après), ça changera aussi les nombres qui seront générés par math.random(). Mais bon l'algorithme de pseudo-aléatoire (ce qui s'appelle un PRNG au passage) de Lua est très prévisible et les premiers nombres générés sont souvent identiques avec des seeds proches. Mais à moins d'avoir des besoins cryptographiques c'est normalement suffisant.

Donc oui ça sera "aléatoire", mais ça ne se verra peut-être pas tout de suite, et ça dépendra du moment où tu lance ton script.
_________________
Publié : ctrµLua, Candran
A publier : TCPDebugger, FastShell
A finir : µPortal, LLUL, µStore, serveur wifis, microlua.js, d'autres trucs
Mon site \o/


Back to top
Visit poster’s website
thomh@ck


Offline

Joined: 01 Aug 2011
Posts: 360
Localisation: Notepad++

PostPosted: Wed 4 Jun 2014 - 14:38    Post subject: [Résolu] La fonction math.rand() Reply with quote

Cool merci ;-) pour ce que j'en fait c'est parfait :-)
_________________
Vous aimez l'Origami ?


Back to top
Visit poster’s website
thermo_nono
Modérateur

Offline

Joined: 31 Dec 2008
Posts: 2,415
Localisation: La Géhenne

PostPosted: Wed 4 Jun 2014 - 17:37    Post subject: [Résolu] La fonction math.rand() Reply with quote

Une petite précision en espérant ne pas dire de bêtise : 
Dans l'exemple que tu as mis plus haut, la première ligne peux n'être exécutée qu'une fois au début. 

 
Code:
math.randomseed(os.time())
for i = 1, 5 do
 var = math.random(1,80)
 screen.print(SCREEN_UP,10,10,var)
end

 

_________________
“Qui reçoit une idée de moi reçoit de la connaissance sans diminuer la mienne, comme celui qui allume sa chandelle à la mienne reçoit la lumière sans me plonger dans l’obscurité.” - Thomas Jefferson


Back to top
Visit poster’s website MSN
thomh@ck


Offline

Joined: 01 Aug 2011
Posts: 360
Localisation: Notepad++

PostPosted: Wed 4 Jun 2014 - 18:49    Post subject: [Résolu] La fonction math.rand() Reply with quote

oui merci Thermo, je met cette ligne juste après mes déclarations variables ! pour le moment sur MLS ça passe bien, je teste sur hardware ce soir !
_________________
Vous aimez l'Origami ?


Back to top
Visit poster’s website
Display posts from previous:   
Post new topic   Reply to topic    µLua DS - Forum officiel | Official forum Forum Index -> Section française -> Report de bugs All times are GMT + 1 Hour
Page 1 of 1

 
Jump to:  

Index | Create a forum | Free support forum | Free forums directory | Report a violation | Cookies | Charte | Conditions générales d'utilisation
Powered by phpBB © 2001, 2005 phpBB Group