2015-11-10 6 views
0

J'essaie actuellement de faire un nombre aléatoire entre -0,5 et 0,5 ainsi:fonction java nombre aléatoire entre -0,5 et 0,5 avec distobution Gausian

public static double RandomNumberGenerator(long seed) 
{ 
    Random r = new Random(seed); 
    return r.nextDouble() >= 0.5? 0.5 : -0.5; 

    //PRINTING AND USAGE, SHOULD GO ABOVE 
    //System.out.println("Object after seed 12222222: " + RandomNumberGenerator(12222222)); 
} 

Ce que je puis exécuter comme ceci:

for (int j = 0; j < weights_one.length ; j++) 
    { 
     weights_one[j] = RandomNumberGenerator(System.currentTimeMillis()); 
    } 

Mais il est vraiment dysfonctionnel, parce que je finis toujours avec des poids qui seront les mêmes, à savoir

weights_one[0]: -0.5 
weights_one[1]: -0.5 
weights_one[2]: -0.5 
weights_one[3]: -0.5 
weights_one[4]: -0.5 

ce qui n'est pas bon, ils devraient être répartis de manière gausianly, comment puis-je y parvenir?

Répondre

1

La classe aléatoire crée des nombres pseudo-aléatoires. J'ai trouvé deux erreurs dans votre code:

  1. Pour chaque cycle, vous créez une instance aléatoire. Juste en créer un au début du pour.
  2. Nombre aléatoire généré entre [0, 1]. Pour traduire à l'intervalle [-0.5, 0.5] il suffit de soustraire 0.5 à la fonction aléatoire.

Votre code peut être remplacé par:

Random r = new Random(System.currentTimeMillis()); 
for (int j = 0; j < weights_one.length ; j++) 
{ 
    weights_one[j] = r.nextDouble() -0.5; 
} 
+0

Je travaille sur ce point, ce projet- pas exactement cette fonction, pendant tant d'heures que mon cerveau est sur feu Pouvez-vous me montrer ce que vous voulez dire? –

+0

Je viens de modifier la réponse pour vous montrer ce que je veux dire. – xcesco