Innanzitutto hai inizializzato il seme del generatore di numeri casuali richiamando la funzione srand()?
Iniziamo a considerare
rand()%2
L'operatore % necessita che il left-operand (rand() in questo caso) e il right-operand (2 in questo caso) siano degli interi (la condizione è rispettata poichè la funzione rand() ritorna un intero). Ovviamente anche il risultato dell'operazione è un intero, quindi non potrai mai ottenere un float.
Il risultato di quell'operazione sarà semplicemente 0 se rand() è pari o 1 se rand() è dispari.
Consideriamo ora
(rand()/RAND_MAX)*(2.6)
Dal punto di vista logico ci siamo, nel senso che rand()/RAND_MAX dovrebbe restituire un numero compreso tra 0 e 1 e moltiplicandolo per un generico n si ottiene un numero appartenente all'intervallo [0;n].
Il problema è che in C/C++ la divisione restituisce risultati diversi a seconda del tipo degli operandi (dividendo e divisore). Possiamo dire che esiste una divisione intera (per cui 7/2=3) e una divisione non intera (per cui 7/2=3.5). Il quoziente viene valutato come divisione intera se entrambi gli operatori sono interi, e come divisione non intera se ALMENO uno dei due operandi è in virgola mobile (float, double, ...).
Tornando al caso in esame, essendo rand() e RAND_MAX due interi, il quoziente di rand()/RAND_MAX sarà 0 (molto probabilmente) o 1 (se rand()=RAND_MAX, ma la probabilità è di 1/(RAND_MAX+1) ). Se vuoi che il quoziente non venga calcolato come divisione intera devi convertire almeno uno dei due operandi in float/double.
Ciò può essere fatto in due modi (ipotizziamo che n sia una variabile di tipo double/float):
- attraverso casting esplicito, cioè (float)rand()/rand_MAX*n (o equivalentemente rand()/(float)rand_MAX*n);
- oppure scrivendo n*rand()/rand_MAX. In questo caso viene svolto prima il prodotto n*rand() che restituirà un risultato di tipo float, infatti nel momento in cui viene svolta un'operazione (+, -, *, /) tra tipi nativi diversi, l'operando col tipo più "semplice" viene convertito automaticamente (casting implicito) nel tipo dell'altro operando più "complesso" (questo è il motivo per cui n*rand() restituisce un float e per cui in una divisione basta che solo uno dei due operandi sia di tipo float affinchè anche il quoziente sia di tipo float).