halton.cpp 565 B

12345678910111213141516171819202122232425262728293031
  1. #include "halton.h"
  2. #include <cassert>
  3. // compute \phi_p^\pi(i)
  4. double phi(int p, permutation pi, int i) {
  5. double r = 0., pl = 1./p;
  6. while(i) {
  7. r += (double)pi[i%p]*pl;
  8. pl /= p;
  9. i /= p;
  10. }
  11. return r;
  12. }
  13. halton::halton(int dim, int *p) : dim(dim), p(p) {
  14. assert(dim > 0);
  15. for(int i = 0; i < dim; i++)
  16. pi.push_back(permutation(p[i]));
  17. }
  18. permutation& halton::get_pi(int i) {
  19. assert(0 <= i && i < dim);
  20. return pi[i];
  21. }
  22. void halton::compute(int i, double* res) {
  23. for(int d = 0; d < dim; d++) {
  24. res[d] = phi(p[d], pi[d], i);
  25. }
  26. }