funzione numero casuale
- exodd
- Messaggi: 728
- Iscritto il: 09 mar 2007, 19:46
- Località: sulle pendici della provincia più alta d'europa
funzione numero casuale
esiste una libreria in C che abbia una funzione che ti ritorna un numero casuale da 0 a n?
Tutto è possibile: L'impossibile richiede solo più tempo
in geometry, angles are angels
"la traslazione non è altro che un'omotetia di centro infinito e k... molto strano"
julio14 ha scritto: jordan è in realtà l'origine e il fine di tutti i mali in $ \mathbb{N} $
ispiratore del BTAEvaristeG ha scritto:Quindi la logica non ci capisce un'allegra e convergente mazza.
in geometry, angles are angels
"la traslazione non è altro che un'omotetia di centro infinito e k... molto strano"
http://www.cplusplus.com/reference/clib ... dlib/rand/
http://members.cox.net/srice1/random/crandom.html
http://members.cox.net/srice1/random/crandom.html
"Fu chiaro sin dall'inizio che ogni qual volta c'era un lavoro da fare, il gatto si rendeva irreperibile." (George Orwell - La fattoria degli animali)
Google?
la risposta e' no. Ma c'e' una funzione che ritorna un intero tra 0 e $ ~2^n-1 $ con n i bit della macchina (se ben ricordo). Cmq il valore massimo e' memorizzato in una variabile/macro.
di conseguenza te la puoi costruire con rand() e RAND_MAX
la risposta e' no. Ma c'e' una funzione che ritorna un intero tra 0 e $ ~2^n-1 $ con n i bit della macchina (se ben ricordo). Cmq il valore massimo e' memorizzato in una variabile/macro.
di conseguenza te la puoi costruire con rand() e RAND_MAX
impara il [tex]~\LaTeX[/tex] e mettilo da par[tex]\TeX~[/tex]
Software is like sex: it's better when it's free (Linus T.)
membro: Club Nostalgici
Non essere egoista, dona anche tu! http://fpv.hacknight.org/a8.php
Software is like sex: it's better when it's free (Linus T.)
membro: Club Nostalgici
Non essere egoista, dona anche tu! http://fpv.hacknight.org/a8.php
-
- Messaggi: 1776
- Iscritto il: 17 nov 2007, 19:12
Io uso questo per ritornare un intero tra 0 e n-1:
Però non ho mai dovuto scrivere roba dove l'uniformità dei valori casuali fosse critica, e so che la maggior parte delle implementazioni di rand() fanno veramente cagare...
Codice: Seleziona tutto
#define rnd_i(n) ((int)((double)(n)*(rand())/(RAND_MAX+1.0)))
[quote="Pigkappa"]Penso che faresti un favore al mondo se aprissi un bel topic di bestemmie da qualche parte in modo che ti bannino subito.[/quote]
Il problema e' che la funzione rand si basa su un generatore che se non viene cambiato almeno una volta, ti crea sempre la stessa sequenza pseudo-random (perche' di default viene posto a 1).
Un trucco per avere una sequenza piu' casuale e' settare all'inizio in maniera piu' o meno casuale il generatore della sequenza pseudo-random (per esempio basandosi sul clock di sistema che in teoria viene incrementato ogni volta dall'inizio dei tempi).
Quindi ti conviene usare prima la funzione srand per creare un generatore piu' o meno casuale e poi la funzione rand ogni volta che ti serve un numero casuale. Il codice puo' essere qualcosa del tipo:
/*Creo un generatore piu' o meno casuale di sequenze random*/
srand((unsigned int)time(NULL));
E poi per avere un numero tra 0 e n chiamo la funzione:
(rand() % (n+1))
con la condizione che (n+1) sia minore uguale a RAND_MAX
oppure usare la funzione che ha scritto Tibor.
Bye
Un trucco per avere una sequenza piu' casuale e' settare all'inizio in maniera piu' o meno casuale il generatore della sequenza pseudo-random (per esempio basandosi sul clock di sistema che in teoria viene incrementato ogni volta dall'inizio dei tempi).
Quindi ti conviene usare prima la funzione srand per creare un generatore piu' o meno casuale e poi la funzione rand ogni volta che ti serve un numero casuale. Il codice puo' essere qualcosa del tipo:
/*Creo un generatore piu' o meno casuale di sequenze random*/
srand((unsigned int)time(NULL));
E poi per avere un numero tra 0 e n chiamo la funzione:
(rand() % (n+1))
con la condizione che (n+1) sia minore uguale a RAND_MAX
oppure usare la funzione che ha scritto Tibor.
Bye
-
- Messaggi: 1776
- Iscritto il: 17 nov 2007, 19:12
Deh, così non viene uniforme nemmeno nel caso ideale in cui rand() è uniforme.flexwifi ha scritto:(rand() % (n+1))
Non che col mio metodo sia uniforme, ma è distribuita il meglio possibile, se è chiaro cosa intendo...
[quote="Pigkappa"]Penso che faresti un favore al mondo se aprissi un bel topic di bestemmie da qualche parte in modo che ti bannino subito.[/quote]