Skip to content
  • Sergio Gelato's avatar
    ITS#8204 Remove bias towards the first record in RFC2782 shuffle implementation. · ee7502ac
    Sergio Gelato authored and Quanah Gibson-Mount's avatar Quanah Gibson-Mount committed
    Prior to this change, given two records of weight 1 the algorithm would
    return them in the order (0,1) with 100% probability instead of the
    desired 50%. This was due to an off-by-one error in the range test.
    
    srv_rand() returns a float in the range [0.0, 1.0[, so r is an integer in the
    range [0, total[. The correct probability for record 0 to be chosen is
    a[0].weight/total, not (a[0].weight+1)/total.
    ee7502ac