fonction set.seed()

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Eric Wajnberg
Messages : 776
Enregistré le : 11 Aoû 2008, 15:37
Contact :

Re: fonction set.seed()

Messagepar Eric Wajnberg » 03 Mar 2017, 09:02

François Bonnot a écrit :
Utiliser les fractions de seconde devrait régler le problème comme le montre cet exemple qui donne (presque toujours) des heures différentes correspondant au temps d'exécution des commandes figurant sur la même ligne:

Code : Tout sélectionner

t <- as.numeric(Sys.time()) ; sprintf("%1.20f",t) ; t <- as.numeric(Sys.time()) ; sprintf("%1.20f",t)

Non, ceci ne marche pas, je le crains, et ce pour deux raisons.

La première est que l'argument à fournir à set.seed() est un int (ou est casté dans un int). Du coup, même si on affiche plein de décimales, ca ne change rien. Il suffit d'essayer :

Code : Tout sélectionner

as.numeric(Sys.time());as.numeric(Sys.time())

La seconde est que si on veux travailler sur des fractions de secondes, en fait le système ne descend pas en dessous de la milliseconde, ce qui laisse encore largement trop peu de possibilités pour avoir des suites vraiment aléatoires. C'est une des raisons pour lesquelles je passe au C et tape dans /dev/random ou /dev/urandom.

HTH, Eric.

François Bonnot
Messages : 537
Enregistré le : 10 Nov 2004, 15:19
Contact :

Re: fonction set.seed()

Messagepar François Bonnot » 03 Mar 2017, 10:53

l'argument à fournir à set.seed() est un int (ou est casté dans un int). Du coup, même si on affiche plein de décimales, ca ne change rien

Mon code tient bel et bien compte de cela en n'utilisant justement que la partie décimale par le biais de t-floor(t)
(as.numeric n'affiche pas les décimales mais elles sont stockées en interne)

le système ne descend pas en dessous de la milliseconde, ce qui laisse encore largement trop peu de possibilités pour avoir des suites vraiment aléatoires

Oui, cet argument est recevable car la partie décimale ne pourrait alors pas prendre plus de 1000 valeurs différentes.
Pourtant l'exemple suivant portant sur la partie décimale donne un entier de 12 chiffres significatifs mais c'est peut-être seulement un artefact dû au stockage interne de l'heure:

Code : Tout sélectionner

> t <- as.numeric(Sys.time()) ; sprintf("%1.0f",1e12*(t-floor(t)))
[1] "190937995911"
François

Eric Wajnberg
Messages : 776
Enregistré le : 11 Aoû 2008, 15:37
Contact :

Re: fonction set.seed()

Messagepar Eric Wajnberg » 03 Mar 2017, 11:02

Bon. Ok. Je ne sais alors pas comment Sys.time() récupère le temps système plus précisément que la milliseconde. Les outils "time" disponibles en C ne savent pas faire ceci il me semble, et R est codé en C. Mais bon.

Merci pour l'info.

Eric.


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité