Newsgroup: it.comp.lang.c++
Titolo: n.ri casuali nell'intervallo [0, 1]

devo generare dei numeri casuali nell'intervallo [0, 1]
ho pensato di usare:
	rand() / double(RAND_MAX)
ma forse c'è un metodo migliore? (anzi, giusto...)
infatti, dato che sulla mia piattaforma RAND_MAX = 
2147483647
mentre double(RAND_MAX) = 2.14748e+09, dunque 
double(RAND_MAX) < RAND_MAX, non rischio di ottenere
qualche risultato che è maggiore di 1? (rand() restituisce
un long int compreso tra 0 e RAND_MAX)
anche se questo fatto capiterebbe di rado,
io devo essere proprio sicuro che il risultato cada 
nell'intervallo [0, 1]...
grazie a chi mi saprà portare consiglio!
-- 
Davide Cavallari
* per contattarmi via e-mail, eliminare "NOSPAM" dall'indirizzo *

 nell'intervallo [0, 1]...
Anche se il compilatore decide di sostituire la divisione
con la moltiplicazione del reciproco, per via delle ottimizzazioni,
non dovrebbe esserci problema:
const double kmul = 
1./2147483647
.;
main()
{
    int n = 
2147483647
;
    double d = n * kmul;
    assert(d==1.);
    return 0;
}
Ovviamente, potresti anche utilizzare un RNG differente da quello
offerto dalla libreria del tuo compilatore, ma ci sono persone
molto preparate in materia che frequentano questo NG - io sono
solo uno spettatore - e ti sapranno consigliare al meglio.
Aldo.

 solo uno spettatore - e ti sapranno consigliare al meglio.
I post sui numeri random creano sempre flames pazzeschi... č meglio ritenere 
OT anche i suddetti messaggi...
8)
-- 
Luc.

 OT anche i suddetti messaggi...
I post sui numeri casuali non possono creare flames. Le persone che postano,
invece, possono crearli.
Un messaggio non può essere ritenuto ot solo perché è probabile che due o
tre lamer ne prendano parte.
Io trovo che la domanda di Davide sia perfettamente pertinente con il ng e
che la risposta di Aldo sia altrettanto pertinente e soddisfacente anche
considerando il saggio consiglio di utilizzare un generatore differente da
quello "di serie".
Se da qui ne nascerà un altro flame né Davide, né Aldo, né tu, né io potremo
esserne ritenuti responsabili.
Cristiano

 quello "di serie".
Le discussioni su come utilizzare il generatore della libreria standard
o su come implementare un generatore in C++ sono in argomento. Le
discussioni sui relativi meriti di diversi tipi di generatori non lo
sono e devono essere spostate altrove (ad esempio in un newsgroup sugli
algoritmi).
Ciao,
Nicola

"Nicola Musatti" ha scritto:

Potrei essere d'accordo.
Ma io credo che chi deve generare numeri casuali, li debba generare per
farci qualcosa di concreto, non li deve ammirare e basta.
Dicendo che rand() presenta molti punti deboli (e motivando quello che dico)
credo di fare un piacere a chi è interessato all'argomento.
Se poi da una domanda come quella di Davide ne nascesse una pacata
conversazione che sconfinasse un po' anche su altri generatori non standard
non ci vedo un grande problema.
Il vero problema si ha quando i lamer iniziano a prenderci parte iniziando
ad ingiuriare e a parlare a sproposito di argomenti per i quali non hanno né
competenza né interesse.
In ogni caso, se questo ng sugli algoritmi esiste e se proprio vi viene un
attacco d'ulcera spastica a sentir parlare di numeri casuali, credo che tu
possa inserire il ng in questione nel tuo messaggio standard in cui avvisi
dell'argomento ot. Io, sicuramente, non avrò alcuna difficoltà a spostarmi
lì, sperando che i lamer, invece, se ne restino qui.
Ciao
Cristiano