let rec repartition = function (x:int) ->
 match x with
 | negatif when x <= 0 -> [| 1. ; 0. |]
 | 64 -> Array.make 2 Data.pas32
 | petit when petit < 64 ->
  begin
   let y = ref 1. in
    if x land 1 > 0 then
     y := !y *. Data.pas ;
    if x land 2 > 0 then
     y := !y *. Data.pas2 ;
    if x land 4 > 0 then
     y := !y *. Data.pas4 ;
    if x land 8 > 0 then
     y := !y *. Data.pas8 ;
    if x land 16 > 0 then
     y := !y *. Data.pas16 ;
    if x land 32 > 0 then
     y := !y *. Data.pas32 ;
    let z = 1. -. !y in
     let w = 1. /. ( sqrt ( max !y z ) ) in
      [| w *. !y ; w *. z |] ;
  end
 | grand when grand >= 127 -> [| 0. ; 1. |]
 | _ -> 
    (** 65 <= x <= 126 *)

  begin
   let a = repartition ( 127 - x ) in
    [| a.(1) ; a.(0) |] ;
  end