Lrand48() vs molti dubbi
Salve forum ^^ Non riesco proprio a capire il funzionamento di questa funzione:
double calc(){
double calc;
int n;
calc=generacausale(0.1,0.2);
n=(lrand48()%2);
if(n==0)calc=-calc;
return calc;
}
generacasuale alla 4 riga è una funzione che genera un numero causale in distribuzione uniforme. Quello che non comprendo va dalla 5 riga in poi... cosa succede esattamente con lrand48()%2? In teoria capisco che uno dei possibili risultati di questa funzione è 0, perche in tal caso calc diventa -calc. Ma continua a rimenermi oscuro il suo funzionamento...
double calc(){
double calc;
int n;
calc=generacausale(0.1,0.2);
n=(lrand48()%2);
if(n==0)calc=-calc;
return calc;
}
generacasuale alla 4 riga è una funzione che genera un numero causale in distribuzione uniforme. Quello che non comprendo va dalla 5 riga in poi... cosa succede esattamente con lrand48()%2? In teoria capisco che uno dei possibili risultati di questa funzione è 0, perche in tal caso calc diventa -calc. Ma continua a rimenermi oscuro il suo funzionamento...
Risposte
lrand48 restituisce un numero casuale di cui viene calcolato il resto della divisione per due (restituisce quindi il bit meno significativo). I valori che può assumere sono 0 (quando il numero casuale è pari) e 1 (quando il numero casuale è dispari). La funzione calcola quindi un numero casuale di valore assoluto compreso tra 0.1 e 0.2 e che può essere sia positivo che negativo.
lrand48()restituisce un numero positivo long.
poi con il
lrand48()%2si ricava il resto in modulo 2
e poi controlla se il resto è 0 (ossia se i numero è divisibile per 2 senza resto) e se lo è allora nega il numero presente in calc e lo restituisce
Ottimo! Grazie infinite ragazzi!