(rand()*1.0/RAND_MAX)*3.1;
RAND_MAX est une constante qui défini le maximum que peut renvoyer rand().
Donc du coup, rand()/ RAND_MAX renverra un nombre entre 0 et 1.
Le 1.0* est importante, car rand() et RAND_MAX renvoyant des entiers, le division sera entiere, et tu auras toujours 0.
En mettant *1.0, tu obliges le compilo a faire une division réelle (un peu comme si tu castais)
Apres, tu multiplie par 3.1 pour passer du range 0..1 au range 0..3.1