net.finmath.randomnumbers.HaltonSequence Maven / Gradle / Ivy
/*
* (c) Copyright Christian P. Fries, Germany. Contact: [email protected].
*
* Created on 21 May 2018
*/
package net.finmath.randomnumbers;
import java.util.concurrent.atomic.AtomicLong;
/**
* Implements a multi-dimensional Halton sequence (quasi random numbers) with the given bases.
*
* @author Christian Fries
* @version 1.0
*/
public class HaltonSequence implements RandomNumberGenerator {
private static final long serialVersionUID = -4799340450248196350L;
private final int[] base;
private final AtomicLong currentIndex = new AtomicLong();
/**
* Constructs a Halton sequence with the given bases.
*
* The bases should be integers without common divisor greater than 1, for example, prime numbers.
*
* @param base The array of base integers. The length of the array defines the dimension of the sequence.
*/
public HaltonSequence(final int[] base) {
for(int i=0; i 0) {
x += (index % base) * factor;
factor /= base;
index /= base;
}
return x;
}
}