View Full Version : Random con C++
Salve, vorrei sapere se in questo modo ottengo numeri casuali da -1000 a 1000??
O se c'è un altro modo simile per farlo??
numero_casuale=(rand()%(2000+1))-1000;
Grazie ;)
Questa ormai e' una FAQ :)
Chi si prende la briga di scriverla?
float FloatRand()
{
return rand() / (RAND_MAX + 1);
}
int IntRand(unsigned int range, int bias)
{
return (int) (range * frand()) + bias;
}
...
unsigned int x = IntRand(2000, -1000);
Questa e' la versione piu' C++ (ma puzza di overengineering):
class IntRand
{
public:
IntRand(
unsigned int range,
int bias)
: m_Range(range)
, m_Bias(bias)
{
}
unsigned int Generate(void)
{
float randomFloatValue = rand() / (RAND_MAX + 1);
return (int) (m_Range * randomFloatValue) + m_Bias;
}
private:
unsigned int m_Range;
int m_Bias;
};
...
IntRand intRand(2000, -1000); // da -1000 a +1000
intRand.Generate();
Edit: Refactoring! :D
Ziosilvio
25-01-2005, 16:12
Cerca nei vecchi post.
Scoprirai non solo come si fa, ma anche il motivo per cui il metodo che tu suggerisci non è particolarmente consigliato.
Ziosilvio scommetto che non si ottiene una distribuzione uniforme se RAND_MAX non e' un multiplo di x per rand()%x! :D
Ziosilvio
25-01-2005, 18:05
Originariamente inviato da Ubi-Wan
Ziosilvio scommetto che non si ottiene una distribuzione uniforme se RAND_MAX non e' un multiplo di x per rand()%x! :D
Cerca nei vecchi post :D e non confondere RAND_MAX, che è il massimo valore ottenibile, con RAND_MAX+1 che è il numero di valori distinti ottenibili ;)
Ziosilvio
25-01-2005, 18:07
Uh uh... non me ne ero accorto subito...
Originariamente inviato da fek
float FloatRand()
{
return rand() / (RAND_MAX + 1);
}
Questa funzione restituisce sempre 0.0 --- ESERCIZIO: dire perché.
Originariamente inviato da Ziosilvio
Uh uh... non me ne ero accorto subito...
Questa funzione restituisce sempre 0.0 --- ESERCIZIO: dire perché.
Perche' sono stupido e non l'ho castato a float...
Versione corretta:
float FloatRand()
{
return (float) rand() / (RAND_MAX + 1);
}
Originariamente inviato da Ziosilvio
Cerca nei vecchi post :D e non confondere RAND_MAX, che è il massimo valore ottenibile, con RAND_MAX+1 che è il numero di valori distinti ottenibili ;)
sapevo che c'era di sicuro qualcosa che non andava in quello che avevo scritto :)
Grazie delle informazioni, volevo sapere se la parola bias ha qualche significato specifico o è solo una parola utilizzata a caso!
Originariamente inviato da Misagi
Grazie delle informazioni, volevo sapere se la parola bias ha qualche significato specifico o è solo una parola utilizzata a caso!
http://www.moreorless.net/diz/MoL_B.html
bias = deviazione
Originariamente inviato da Ziosilvio
Cerca nei vecchi post :D e non confondere RAND_MAX, che è il massimo valore ottenibile, con RAND_MAX+1 che è il numero di valori distinti ottenibili ;)
Sembra una pignoleria ma non lo è affatto :D
Un po' di tempo fa ho scritto un algoritmo che generava automaticamente labirinti di grosse dimensioni, ma spesso mi capitava di avere una o due caselle "cannate". Dopo un lungo e intenso debug mi sono accorto che succedeva quando disgraziatamente ottenevo il risultato 1 dal random :p (1 volta su 30000 :D)
vBulletin® v3.6.4, Copyright ©2000-2026, Jelsoft Enterprises Ltd.