function studentRandomBailey(nu) { const u1 = Math.random(); const u2 = Math.random(); // Application de la transformation directe const r = Math.sqrt(nu * (Math.pow(u1, -2.0 / nu) - 1.0)); const theta = 2.0 * Math.PI * u2; return r * Math.cos(theta); }
C'est l'exact analogue de la méthode de Box–Muller pour la loi normale : là où Box–Muller pose r = √(−2 ln u₁), Bailey pose r = √(ν(u₁−2/ν − 1)). On vérifie d'ailleurs que quand ν → ∞, u₁−2/ν − 1 ≈ −(2/ν)·ln u₁ : la formule de Bailey devient celle de Box–Muller, et la loi t(ν) devient la loi normale.
Le rayon r est distribué de sorte que le couple (r cos θ, r sin θ) ait une densité à symétrie circulaire dont chaque projection suit exactement la loi de Student : fν(x) = Γ((ν+1)/2)√(νπ) Γ(ν/2) (1 + x²/ν)−(ν+1)/2.
La courbe verte en pointillé rappelle la densité normale : pour ν petit, les queues de la loi de Student sont beaucoup plus lourdes — les points s'échappent loin du centre (à ν = 1, c'est la loi de Cauchy, sans espérance ni variance !). Quand on augmente ν, la courbe rouge vient se coller à la verte : Student tend vers Gauss.
Le premier volet montre un tirage au ralenti : u₁ fixe le rayon (les u₁ proches de 0 projettent le point très loin — ce sont eux qui fabriquent les queues lourdes), u₂ fixe l'angle, et l'ombre du point sur l'axe horizontal est la valeur tirée.