J'ai écrit cette fonction pour obtenir un pseudo aléatoire entre 0 .. 1 inclus: Cependant, il retourne toujours 0.563585. Le même nombre, peu importe combien de fois j'ai exécuté mon application de console. P> EDIT: P> Voici toute mon application si nécessaire: P> #include <stdio.h>
#include <stdlib.h>
float randomFloat()
{
float r = (float)rand() / (float)RAND_MAX;
return r;
}
int main(int argc, char *argv[])
{
float x[] = {
0.72, 0.91, 0.46, 0.03, 0.12, 0.96, 0.79, 0.46, 0.66, 0.72, 0.35, -0.16,
-0.04, -0.11, 0.31, 0.00, -0.43, 0.57, -0.47, -0.72, -0.57, -0.25,
0.47, -0.12, -0.58, -0.48, -0.79, -0.42, -0.76, -0.77
};
float y[] = {
0.82, -0.69, 0.80, 0.93, 0.25, 0.47, -0.75, 0.98, 0.24, -0.15, 0.01,
0.84, 0.68, 0.10, -0.96, -0.26, -0.65, -0.97, -0.03, -0.64, 0.15, -0.43,
-0.88, -0.90, 0.62, 0.05, -0.92, -0.09, 0.65, -0.76
};
int outputs[] = {
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
};
int patternCount = sizeof(x) / sizeof(int);
float weights[2];
weights[0] = randomFloat();
weights[1] = randomFloat();
printf("%f\n", weights[1]);
float learningRate = 0.1;
system("PAUSE");
return 0;
}
5 Réponses :
Vous devez appeler avant d'utiliser EDIT: Comme le souligne Jonathan Leffler, cela est facilement prédit, alors n'essayez pas d'utiliser pour cryprographie. P> p> rand code> pour la première fois.
heure code> est dans
Soyez prudent avec l'utilisation du temps (); Il est assez facilement prévisible et vos séquences aléatoires peuvent donc être prédites aussi. Cela peut ne pas avoir d'importance dans ce cas, mais faites attention en général.
c'est-à-dire parce que le générateur aléatoire C est un pseudo em> -random générateur fort> (et c'est, BTW, une très bonne chose, avec de nombreuses applications). (La norme ANSI C nécessite un tel générateur pseudo-aléatoire) Essentiellement, chaque fois que votre demande de console est rétablie En ajoutant une ligne comme p> Vous obtiendrez une graine distincte à chaque fois, et la séquence de nombre produit en conséquence en conséquence. EDIT STRUT>: Time Inc.)
[D'une remarque d'Artelius]
À des fins de test, il est préférable de srand (quelque_const) et de modifier la valeur de la constante entre les courses. De cette façon, si un insecte se manifeste en raison d'une combinaison de nombres aléatoires, vous serez capable de le reproduire. P> P>
À des fins de test, il est préférable de srand (quelque_const) et de modifier la valeur de la constante entre les courses. De cette façon, si un insecte se manifeste en raison d'une combinaison de nombres aléatoires, vous serez capable de le reproduire.
@artelius, excellente suggestion. J'ai ajouté cela comme une note à la réponse elle-même!
@Artelius et MJV: C'est est i> un bon point; Il peut également être une bonne idée de permettre à l'utilisateur de spécifier la graine sur la ligne de commande au lieu d'utiliser le temps (), et il peut souvent (mais pas toujours) être une bonne idée de signaler la graine utilisée (que ce soit de ligne de commande ou toute autre source) pour travailler avec les résultats.
Vous devez initialiser une graine aléatoire avec vous pouvez prendre par exemple le temps système. P> P>
l'appelez-vous plus d'une fois? Rand () retournera toujours le même pseudo aléatoire. Vous voudrez peut-être appeler Srand () avec une belle graine, comme l'heure actuelle. P>
Drand48 est parfait pour votre usage, mieux que the (flotteur ) rand () / rand_max code>, parce que
drand48 () code> et
erand48 () code> Les fonctions renvoient des valeurs non négatives, de la double précision, des virgules flottants, uniformément réparties sur l'intervalle [0.0, 1.0] . p>
blockQuote>
Notez que la fonction RAND () ne doit pas nécessairement être un générateur de nombres aléatoires très «bon». Cela n'aura probablement pas d'importance si vous n'avez besoin que de deux décimales entre 0 et 1; Ce serait si vous aviez besoin de 4 décimales ou plus. Si vous avez besoin de plus d'endroits, regardez le
drand48 () code> famille de fonctions: opengroup.org/onlinepubs/9699919799/fonctions/drand48.html