12345678910111213141516171819202122232425262728293031 |
- #include "halton.h"
- #include <cassert>
- // compute \phi_p^\pi(i)
- double phi(int p, permutation pi, int i) {
- double r = 0., pl = 1./p;
- while(i) {
- r += (double)pi[i%p]*pl;
- pl /= p;
- i /= p;
- }
- return r;
- }
- halton::halton(int dim, int *p) : dim(dim), p(p) {
- assert(dim > 0);
- for(int i = 0; i < dim; i++)
- pi.push_back(permutation(p[i]));
- }
- permutation& halton::get_pi(int i) {
- assert(0 <= i && i < dim);
- return pi[i];
- }
- void halton::compute(int i, double* res) {
- for(int d = 0; d < dim; d++) {
- res[d] = phi(p[d], pi[d], i);
- }
- }
|