1) per gli estremi la funzione è aperta a destra, cioè ritorna <2^31, mentre non lo è a sinistra (può tornare 0).
Quando torna 0 ovviamente chiude a destra, qualsiasi cosa ci metti.
Puoi vedere come funzionano gli addendini ricordando come cos'è RAND_MAX, cioè il massimo che viene ritornato
Se supponi di avere una funzione random più semplice, cioè tra 0 e 2^2, avrai 4 possibili risultati
0,1,2,3 (4 no perchè è aperto a destra).
Ora supponiamo di esaminare coi parametri
X=4
Y=10
(X,Y] (aperto a sx)
double casuale=X + ((lrand48()+1.)/(RAND_MAX+1.))*(X-Y)
(0+1)/(3+1) = 1/4
(1+1)/(3+1) = 2/4
(2+1)/(3+1) = 3/4
(3+1)/(3+1) = 4/4
Quindi i valori (salvo errori) saranno
4+ 1/4 * (6) = 5.5
4+ 2/4 * (6) = 7
4+ 3/4 * (6) = 8.5
4+ 4/4 * (6) = 10
cioè aperto a sinistra, chiuso a destra
[X,Y) (aperto a dx).
Togliendo il "+1" si prende il caso 0 (e quindi chiude a sinistra)
double casuale=X + (lrand48()/(RAND_MAX+1.))*(X-Y)
(0)/(3+1) = 0
(1)/(3+1) = 1/4
(2)/(3+1) = 2/4
(3)/(3+1) = 3/4
4+ 0 * (6) = 0
4+ 1/4 * (6) = 5.5
4+ 2/4 * (6) = 7
4+ 3/4 * (6) = 8.5
ed è chiuso a sinistra, ma aperto a destra
Ti lascio per esercizio gli altri due casi, essenzialmente il "+1" e "+2" fanno "scorrere" la lista dei numeri, eliminando lo zero (+1) e l'estremo superiore (+2)
Detto questo: la "vera" domanda è
qual'è un buon generatore? la risposta è "non si sa di preciso", si adottano test più o meno empirici per saggiarne la qualità.
Riguardo all'ultimo punto ovviamente non sapendo esattamente come è implementata la funzione non ci si può fidare più di tanto.

Rispondi quotando