#pragma once #include #define RND ((double)rand() / (double)RAND_MAX) //============================================================= class Halton { // 1D Halton sorozat //============================================================= int base; // a szamrendszer alapja double value; // az sorozat aktualis eleme double inv_base; // a szamrendszer alapjanak reciproka public: void SetBase( int b ) { // alap beallitasa + sorozat inicializalasa base = b; inv_base = 1.0/base; value = 0.0; } int GetBase( ) { return base; } void Set( long i ) { // A sorozat i. elemenek szamitasa double f = inv_base = 1.0/base; value = 0.0; while ( i > 0 ) { value += f * (double)(i % base); i /= base; f *= inv_base; } } double Next( ) { // a sorozat soron kovetkezo elemenek szamitasa double r = 1.0 - value - 0.0000000001; if (inv_base < r) value += inv_base; else { double h = inv_base, hh; do { hh = h; h *= inv_base; } while ( h >= r ); value += hh + h - 1.0; } return value; } operator double( ) { return value; } };