package umontreal.iro.lecuyer.randvar;
import umontreal.iro.lecuyer.probdist.Distribution;
import umontreal.iro.lecuyer.rng.RandomStream;
/**
* This class permits one to create continuous univariate
* distribution using UNURAN via its string API.
*
*/
public class UnuranContinuous extends RandomVariateGen {
private RandUnuran unuran = new RandUnuran();
/**
* Same as {@link #UnuranContinuous UnuranContinuous}(s, s, genStr).
*
*/
public UnuranContinuous (RandomStream s, String genStr) {
if (s == null)
throw new IllegalArgumentException ("s must not be null.");
unuran.mainStream = unuran.auxStream = s;
unuran.init (genStr);
if (!unuran.isContinuous()) {
unuran.close();
throw new IllegalArgumentException ("not a continuous distribution");
}
}
/**
* Constructs a new continuous random number generator using
* the UNURAN generator specification string genStr,
* main stream s, and auxiliary stream aux.
*
*/
public UnuranContinuous (RandomStream s, RandomStream aux,
String genStr) {
if (s == null)
throw new IllegalArgumentException ("s must not be null.");
if (aux == null)
throw new IllegalArgumentException ("aux must not be null.");
unuran.mainStream = s;
unuran.auxStream = aux;
unuran.init (genStr);
if (!unuran.isContinuous()) {
unuran.close();
throw new IllegalArgumentException ("not a continuous distribution");
}
}
public double nextDouble() {
if (unuran.nativeParams == 0)
throw new IllegalStateException();
return unuran.getRandCont (unuran.mainStream.nextDouble(), unuran.nativeParams);
}
public void nextArrayOfDouble (double[] v, int start, int n) {
if (v == null || start < 0 || n < 0 || (start+n) > v.length)
throw new IllegalArgumentException();
if (unuran.unifArray == null || unuran.unifArray.length < n)
unuran.unifArray = new double[n];
if (unuran.mainStream != unuran.auxStream &&
(unuran.unifAuxArray == null || unuran.unifAuxArray.length < n))
unuran.unifAuxArray = new double[n];
unuran.getRandContArray (unuran.nativeParams, unuran.unifArray,
unuran.unifAuxArray, v, start, n);
}
protected void finalize() {
unuran.close();
}
public Distribution getDistribution() { return null; }
public RandomStream getStream() { return unuran.mainStream; }
/**
* Returns the auxiliary random number stream.
*
*/
public RandomStream getAuxStream() {
return unuran.auxStream;
}
}
Ads help maintain this website.