public double nextDouble(double tau){
  double u, u1, v, x, y;
  if (tau != tau_set) {
    s=1.0 / tau;
    sm1=1.0 - s;
    tau_set=tau;
  }
  do {
    u=randomGenerator.raw();
    u=(2.0 * u) - 1.0;
    u1=Math.abs(u);
    v=randomGenerator.raw();
    if (u1 <= sm1) {
      x=u1;
    }
 else {
      y=tau * (1.0 - u1);
      x=sm1 - s * Math.log(y);
      v=v * y;
    }
  }
 while (Math.log(v) > -Math.exp(Math.log(x) * tau));
  if (u < 0.0)   return x;
 else   return -x;
}

public double nextDouble ( double tau ) { double u , u1 , v , x , y ; if ( tau != tau_set ) { s = 1.0 / tau ; sm1 = 1.0 - s ; tau_set = tau ; } do { u = randomGenerator . raw ( ) ; u = ( 2.0 * u ) - 1.0 ; u1 = Math . abs ( u ) ; v = randomGenerator . raw ( ) ; if ( u1 <= sm1 ) { x = u1 ; } else { y = tau * ( 1.0 - u1 ) ; x = sm1 - s * Math . log ( y ) ; v = v * y ; } } while ( Math . log ( v ) > - Math . exp ( Math . log ( x ) * tau ) ) ; if ( u < 0.0 ) return x ; else return - x ; }
returns a random number from the distribution ; bypasses the internal state .
