diff --git a/404.html b/404.html index ae63d0f..481d3b6 100644 --- a/404.html +++ b/404.html @@ -6,7 +6,7 @@ Page not found (404) • dqrng - + @@ -32,7 +32,7 @@ dqrng - 0.3.2.2 + 0.3.2.4 @@ -109,7 +109,7 @@

Page not found (404)

-

Site built with pkgdown 2.0.7.

+

Site built with pkgdown 2.0.8.

diff --git a/articles/cpp-api.html b/articles/cpp-api.html index a7ac72d..bcb1f3a 100644 --- a/articles/cpp-api.html +++ b/articles/cpp-api.html @@ -6,7 +6,7 @@ C++ API • dqrng - + @@ -33,7 +33,7 @@ dqrng - 0.3.2.2 + 0.3.2.4 @@ -91,7 +91,7 @@

C++ API

Ralf Stubner

-

2024-04-09

+

2024-04-15

Source: vignettes/cpp-api.Rmd @@ -197,14 +197,25 @@

Random variates with expo
+

Random variates with Rademacher distribution +

+
Rcpp::IntegerVector dqrng::dqrrademacher(size_t n)
+
+
n
+
+number of observations +
+
+
+

Random sampling

-
Rcpp::IntegerVector dqrng::dqsample_int(int n, int size, bool replace = false,
-                                        Rcpp::Nullable<Rcpp::NumericVector> probs = R_NilValue,
-                                        int offset = 0)
-Rcpp::NumericVector dqrng::dqsample_num(double n, double size, bool replace = false,
-                                        Rcpp::Nullable<Rcpp::NumericVector> probs = R_NilValue,
-                                        int offset = 0)
+
Rcpp::IntegerVector dqrng::dqsample_int(int n, int size, bool replace = false,
+                                        Rcpp::Nullable<Rcpp::NumericVector> probs = R_NilValue,
+                                        int offset = 0)
+Rcpp::NumericVector dqrng::dqsample_num(double n, double size, bool replace = false,
+                                        Rcpp::Nullable<Rcpp::NumericVector> probs = R_NilValue,
+                                        int offset = 0)
n
@@ -230,6 +241,92 @@

Random sampling

The two functions are used for “normal” and “long-vector” support in R.

+

+
+

Getting and setting the RNG state +

+
std::vector<std::string> dqrng::dqrng_get_state()
+void dqrng::dqrng_set_state(std::vector<std::string> state)
+
+
state
+
+a std::vector<std::string> as produced by +dqrng_get_state() +
+
+
+
+

Accessing the global RNG +

+
Rcpp::XPtr<dqrng::random_64bit_generator> dqrng::get_rng()
+

Direct usage of this method is discouraged. The +prefered way of accesing the global RNG is to instantiate +dqrng::random_64bit_accessor within your function. Note +that you MUST NOT delete the global RNG. Using +dqrng::random_64bit_accessor makes this impossible. In +addition, you SHOULD NOT store a reference to the RNG permanently, +because it can be invalidated by calls to dqRNGkind. +Therefore, instances of dqrng::random_64bit_accessor SHOULD +be stored as (non-static) variables in functions.

+

Note that dqrng::random_64bit_accessor supports UniformRandomBitGenerator +and can therefore be used together with any C++11 distribtion function. +In addition, the follwing functions are supported, since they are +inherited from the abstract parent class +random_64bit_generator:

+
// clone RNG and seelct a different stream
+std::unique_ptr<random_64bit_generator> clone(uint64_t stream)
+// uniform doubles in [0,1) and double-int-pairs
+double uniform01()
+std::pair<double, int> generate_double_8bit_pair()
+// uniform integers in a range 
+uint32_t operator() (uint32_t range)
+uint64_t operator() (uint64_t range)
+ResultType variate<ResultType, DistTmpl>(param1, ... paramN)
+generate<DistTmpl>(container, param1, ... paramN)
+generate<DistTmpl>(start, end, param1, ... paramN)
+Dist::result_type variate<Dist>(param1, ... paramN)
+generate<Dist>(container, param1, ... paramN)
+generate<Dist>(start, end, param1, ... paramN)
+
+
stream
+
+RNG stream to use for the cloned RNG +
+
range
+
+Integers are generated in closed interval [0, range] +
+
ResultType
+
+Expected result from the distribution template DistTmpl +
+
DistTmpl
+
+Distribution template like std::uniform_distribution. +DistTmpl<ResultType> defines the full distribution. +
+
Dist
+
+Full distribution like +std::uniform_distribution<double> or +dqrng::normal_distriubtion. +
+
param1, ... paramN
+
+Necessary parameters to initialize the distribution. +
+
container
+
+A container that is to be filled with variates from the distribution +function. Needs to support std::begin and +std::end. +
+
start, end
+
+Forward iterators pointing to start and end of a range to be filled with +variates from the distribution function. +
+
@@ -250,7 +347,7 @@

Random sampling

-

Site built with pkgdown 2.0.7.

+

Site built with pkgdown 2.0.8.

diff --git a/articles/dqrng.html b/articles/dqrng.html index 69a374c..1c4976c 100644 --- a/articles/dqrng.html +++ b/articles/dqrng.html @@ -6,7 +6,7 @@ Fast Pseudo Random Number Generators for R • dqrng - + @@ -33,7 +33,7 @@ dqrng - 0.3.2.2 + 0.3.2.4 @@ -91,7 +91,7 @@

Fast Pseudo Random Number Generators for R

Ralf Stubner

-

2024-04-09

+

2024-04-15

Source: vignettes/dqrng.Rmd @@ -166,7 +166,7 @@

Usage from Rsystem.time(cat("pi ~= ", piR(N), "\n")) #> pi ~= 3.140899 #> user system elapsed -#> 0.364 0.044 0.408 +#> 0.370 0.029 0.399

Using dqrng is about three times faster:

 library(dqrng)
@@ -174,46 +174,46 @@ 

Usage from Rsystem.time(cat("pi ~= ", piR(N, rng = dqrng::dqrunif), "\n")) #> pi ~= 3.141457 #> user system elapsed -#> 0.222 0.041 0.262

+#> 0.170 0.035 0.206

Since the calculations add a constant off-set, the speed-up for the RNGs alone has to be even greater:

 system.time(stats::runif(N))
 #>    user  system elapsed 
-#>   0.078   0.013   0.090
+#>   0.087   0.003   0.090
 system.time(dqrng::dqrunif(N))
 #>    user  system elapsed 
-#>   0.049   0.008   0.056
+#> 0.023 0.007 0.031

Similar for the exponential distribution:

 system.time(stats::rexp(N))
 #>    user  system elapsed 
-#>   0.338   0.004   0.342
+#>   0.342   0.005   0.346
 system.time(dqrng::dqrexp(N))
 #>    user  system elapsed 
-#>   0.063   0.008   0.071
+#> 0.047 0.000 0.047

And for the normal distribution:

 system.time(stats::rnorm(N))
 #>    user  system elapsed 
-#>   0.367   0.000   0.367
+#>   0.366   0.000   0.366
 system.time(dqrng::dqrnorm(N))
 #>    user  system elapsed 
-#>   0.086   0.008   0.093
+#> 0.066 0.003 0.070

As well as for sampling with and without replacement:

 system.time(for (i in 1:100)   sample.int(N, N/100, replace = TRUE))
 #>    user  system elapsed 
-#>   0.573   0.004   0.577
+#>   0.576   0.000   0.576
 system.time(for (i in 1:100) dqsample.int(N, N/100, replace = TRUE))
 #>    user  system elapsed 
-#>   0.031   0.016   0.047
+#>   0.031   0.017   0.047
 system.time(for (i in 1:100)   sample.int(N, N/100))
 #>    user  system elapsed 
-#>   1.533   0.304   1.837
+#>   1.430   0.293   1.722
 system.time(for (i in 1:100) dqsample.int(N, N/100))
 #>    user  system elapsed 
-#>   0.061   0.008   0.069
+#> 0.051 0.007 0.059

It is also possible to register the supplied generators as user-supplied RNGs. This way set.seed() and dqset.seed() influence both (dq)runif and @@ -373,15 +373,14 @@

Using the header only library// [[Rcpp::export]] Rcpp::NumericVector splitmix_rnorm(const int n, const double mean = 0.0, const double sd = 1.0) { auto rng = dqrng::generator<SplitMix>(42); - dqrng::normal_distribution dist(mean, sd); - Rcpp::NumericVector result(n); - std::generate(result.begin(), result.end(), [&dist, &rng](){return dist(*rng);}); - return result; -} -/*** R -splitmix_rnorm(10) -system.time(splitmix_rnorm(1e7)) -*/ + Rcpp::NumericVector result(n); + rng->generate<dqrng::normal_distribution>(result, mean, sd); + return result; +} +/*** R +splitmix_rnorm(10) +system.time(splitmix_rnorm(1e7)) +*/

Since SplitMix is a very fast RNG, the speed of this function is comparable to dqrnorm. Generally speaking you can use any C++11 compliant RNG with 64 bit output size. For example, here the 64 @@ -395,16 +394,15 @@

Using the header only library// [[Rcpp::export]] Rcpp::NumericVector threefry_rnorm(const int n, const double mean = 0.0, const double sd = 1.0) { auto rng = dqrng::generator<sitmo::threefry_13_64>(42); - dqrng::normal_distribution dist(mean, sd); - Rcpp::NumericVector result(n); - std::generate(result.begin(), result.end(), [&dist, &rng](){return dist(*rng);}); - return result; -} - -/*** R -threefry_rnorm(10) -system.time(threefry_rnorm(1e7)) -*/ + Rcpp::NumericVector result(n); + rng->generate<dqrng::normal_distribution>(result, mean, sd); + return result; +} + +/*** R +threefry_rnorm(10) +system.time(threefry_rnorm(1e7)) +*/

Note that for the (recommended) Threefry engine with 20 rounds some additional integration is provided in the dqrng_threefry.h header file.

@@ -422,16 +420,15 @@

Using the header only library// [[Rcpp::export]] Rcpp::NumericVector std_rnorm(const int n, const double mean = 0.0, const double sd = 1.0) { auto rng = dqrng::generator<dqrng::xoroshiro128plus>(42); - std::normal_distribution<double> dist(mean, sd); - Rcpp::NumericVector result(n); - std::generate(result.begin(), result.end(), [&dist, &rng](){return dist(*rng);}); - return result; -} - -/*** R -std_rnorm(10) -system.time(std_rnorm(1e7)) -*/ + Rcpp::NumericVector result(n); + rng->generate<std::normal_distribution>(result, mean, sd); + return result; +} + +/*** R +std_rnorm(10) +system.time(std_rnorm(1e7)) +*/

Typically this is not as fast as dqrnorm, but the technique is useful to support distributions not (yet) included in dqrng. Note however, that the algorithms used for the distributions from @@ -560,7 +557,7 @@

Accessing the global RNG

-

Site built with pkgdown 2.0.7.

+

Site built with pkgdown 2.0.8.

diff --git a/articles/index.html b/articles/index.html index b8d0e76..26dfae2 100644 --- a/articles/index.html +++ b/articles/index.html @@ -1,5 +1,5 @@ -Articles • dqrngArticles • dqrng @@ -17,7 +17,7 @@ dqrng - 0.3.2.2 + 0.3.2.4 @@ -87,7 +87,7 @@

All vignettes

-

Site built with pkgdown 2.0.7.

+

Site built with pkgdown 2.0.8.

diff --git a/articles/parallel.html b/articles/parallel.html index 4111e95..795fb52 100644 --- a/articles/parallel.html +++ b/articles/parallel.html @@ -6,7 +6,7 @@ Parallel RNG usage • dqrng - + @@ -33,7 +33,7 @@ dqrng - 0.3.2.2 + 0.3.2.4 @@ -91,7 +91,7 @@

Parallel RNG usage

Ralf Stubner

-

2024-04-09

+

2024-04-15

Source: vignettes/parallel.Rmd @@ -204,7 +204,7 @@

Xo(ro)shiro: jump ahead with OpenMP// [[Rcpp::export]] std::vector<double> parallel_random_sum(int n, int m, int ncores) { dqrng::uniform_distribution dist(0.0, 1.0); // Uniform distribution [0,1) - dqrng::xoshiro256plusplus rng(42); // properly seeded rng + dqrng::xoshiro256plusplus rng(42); // properly seeded rng std::vector<double> res(m); // ok to use rng here @@ -239,6 +239,71 @@

Xo(ro)shiro: jump ahead with OpenMP +

In the previous example it was necessary to create our own RNG +object. It would be nice if it were possible to use dqrng’s global RNG +instead. To showcase this, we implement the same procedure as before, +but this time make use of dqrng::random_64bit_accessor to +access the global RNG and its clone(stream) method that +creates a cloned version with a different stream:

+
#include <Rcpp.h>
+// [[Rcpp::depends(dqrng, BH)]]
+#include <dqrng.h>
+#include <dqrng_distribution.h>
+// [[Rcpp::plugins(cpp11)]]
+// [[Rcpp::plugins(openmp)]]
+#include <omp.h>
+
+// [[Rcpp::export]]
+std::vector<double> random_sum(int n, int m) {
+  dqrng::uniform_distribution dist(0.0, 1.0); // Uniform distribution [0,1)
+  auto rng = dqrng::random_64bit_accessor{};  // properly seeded rng
+  std::vector<double> res(m);
+  for (int i = 0; i < m; ++i) {
+    double lres(0);
+    for (int j = 0; j < n; ++j) {
+      lres += dist(rng);
+    }
+    res[i] = lres / n;
+  }
+  return res;
+}
+
+// [[Rcpp::export]]
+std::vector<double> parallel_random_sum(int n, int m, int ncores) {
+  dqrng::uniform_distribution dist(0.0, 1.0); // Uniform distribution [0,1)
+  auto rng = dqrng::random_64bit_accessor{};  // properly seeded rng
+  std::vector<double> res(m);
+  // ok to use rng here
+
+#pragma omp parallel num_threads(ncores)
+{
+  // make thread local copy of rng and advance it by 1 ... ncores jumps
+  auto lrng = rng.clone(omp_get_thread_num() + 1);      
+
+#pragma omp for
+  for (int i = 0; i < m; ++i) {
+    double lres(0);
+    for (int j = 0; j < n; ++j) {
+      lres += dist(*lrng);
+    }
+    res[i] = lres / n;
+  }
+}
+// ok to use rng here
+return res;
+}
+
+/*** R
+bm <- bench::mark(
+  parallel_random_sum(1e7, 8, 4),
+  random_sum(1e7, 8),
+  check = FALSE
+)
+bm[,1:4]
+*/
+

Notes that the thread local RNG uses std::unique_ptr +instead of Rcpp::Xptr since it is used in parallel +code.

PCG: multiple streams with RcppParallel @@ -260,66 +325,110 @@

PCG: multiple streams with RcppP wrap it as dqrng::generator. The resulting correlation matrix should be close to the identity matrix if the different streams are independent:

-
#include <Rcpp.h>
-// [[Rcpp::depends(dqrng, BH)]]
-#include <pcg_random.hpp>
-#include <dqrng_sample.h>
-// [[Rcpp::plugins(cpp11)]]
-// [[Rcpp::depends(RcppParallel)]]
-#include <RcppParallel.h>
-
-struct RandomFill : public RcppParallel::Worker {
-  RcppParallel::RMatrix<int> output;
-  uint64_t seed;
-
-  RandomFill(Rcpp::IntegerMatrix output, const uint64_t seed) : output(output), seed(seed) {};
-
-  void operator()(std::size_t begin, std::size_t end) {
-    auto rng = dqrng::generator<pcg64>(seed, end);
-    for (std::size_t col = begin; col < end; ++col) {
-      auto sampled = dqrng::sample::sample<std::vector<int>, uint32_t>(*rng, 100000, output.nrow(), true);
-      RcppParallel::RMatrix<int>::Column column = output.column(col);
-      std::copy(sampled.begin(), sampled.end(), column.begin());
-    }
-  }
-};
-
-// [[Rcpp::export]]
-Rcpp::IntegerMatrix parallel_random_matrix(const int n, const int m, const int ncores) {
-  Rcpp::IntegerMatrix res(n, m);
-  RandomFill randomFill(res, 42);
-  RcppParallel::parallelFor(0, m, randomFill, m/ncores + 1);
-  return res;
-}
-
-/*** R
-res <- parallel_random_matrix(1e6, 8, 4)
-head(res)
-symnum(x = cor(res), cutpoints = c(0.001, 0.003, 0.999),
-       symbols = c(" ", "?", "!", "1"),
-       abbr.colnames = FALSE, corr = TRUE)
-*/
+
#include <Rcpp.h>
+// [[Rcpp::depends(dqrng, BH)]]
+#include <dqrng_generator.h>
+#include <dqrng_sample.h>
+// [[Rcpp::plugins(cpp11)]]
+// [[Rcpp::depends(RcppParallel)]]
+#include <RcppParallel.h>
+
+struct RandomFill : public RcppParallel::Worker {
+  RcppParallel::RMatrix<int> output;
+  uint64_t seed;
+
+  RandomFill(Rcpp::IntegerMatrix output, const uint64_t seed) : output(output), seed(seed) {};
+
+  void operator()(std::size_t begin, std::size_t end) {
+    auto rng = dqrng::generator<pcg64>(seed, end);
+    for (std::size_t col = begin; col < end; ++col) {
+      auto sampled = dqrng::sample::sample<std::vector<int>, uint32_t>(*rng, 100000, output.nrow(), true);
+      RcppParallel::RMatrix<int>::Column column = output.column(col);
+      std::copy(sampled.begin(), sampled.end(), column.begin());
+    }
+  }
+};
+
+// [[Rcpp::export]]
+Rcpp::IntegerMatrix parallel_random_matrix(const int n, const int m, const int ncores) {
+  Rcpp::IntegerMatrix res(n, m);
+  RandomFill randomFill(res, 42);
+  RcppParallel::parallelFor(0, m, randomFill, m/ncores + 1);
+  return res;
+}
+
+/*** R
+res <- parallel_random_matrix(1e6, 8, 4)
+head(res)
+symnum(x = cor(res), cutpoints = c(0.001, 0.003, 0.999),
+       symbols = c(" ", "?", "!", "1"),
+       abbr.colnames = FALSE, corr = TRUE)
+*/

Head of the random matrix:

      [,1]  [,2]  [,3]  [,4]  [,5]  [,6]  [,7]  [,8]
-[1,] 67984 16279 69262  7126 21441 37720 51107 51045
-[2,] 69310 21713 82885 81157 54051  5261 91165 17833
-[3,] 76742 31232 78953  4626 94939 29416 85652 78296
-[4,] 76349 47427  1770 37957 33888 59134 94591 65793
-[5,] 85008 89224 43493  7925 60866  2464 14080 10763
-[6,] 38017 88509 51195 73086  1883 68193 75259 62216
+[1,] 16144 89512 16144 53103 16144 41760 16144 99788 +[2,] 21200 86552 21199 38327 21198 90293 21198 45713 +[3,] 124 60045 97553 79574 99977 84423 87126 35715 +[4,] 6590 93044 18536 98945 66969 53338 38426 53560 +[5,] 80618 42051 15815 79380 71590 98006 87220 63036 +[6,] 49954 90168 12614 32488 54145 68029 34733 48989

Correlation matrix:

[1,] 1              
 [2,]   1            
-[3,]   ? 1          
-[4,]     ? 1        
-[5,]         1      
-[6,] ? ?     ? 1    
-[7,]     ?       1  
-[8,]     ?         1
+[3,] ?   1          
+[4,]   ?   1        
+[5,]     ? ? 1      
+[6,]   ?       1    
+[7,] ?           1  
+[8,]       ?     ? 1
 attr(,"legend")
 [1] 0 ‘ ’ 0.001 ‘?’ 0.003 ‘!’ 0.999 ‘1’ 1

So as expected the correlation matrix is almost equal to the identity matrix.

+

As in the previous section, we can again switch from seeding our own +RNG to starting from the global RNG and selecting separate substreams +from there. RNG selection and seeding can then be handled from R:

+
#include <Rcpp.h>
+// [[Rcpp::depends(dqrng, BH)]]
+#include <dqrng.h>
+#include <dqrng_sample.h>
+// [[Rcpp::plugins(cpp11)]]
+// [[Rcpp::depends(RcppParallel)]]
+#include <RcppParallel.h>
+
+struct RandomFill : public RcppParallel::Worker {
+  RcppParallel::RMatrix<int> output;
+  dqrng::random_64bit_accessor rng{};
+
+  RandomFill(Rcpp::IntegerMatrix output) : output(output) {};
+
+  void operator()(std::size_t begin, std::size_t end) {
+    auto lrng = rng.clone(end);
+    for (std::size_t col = begin; col < end; ++col) {
+      auto sampled = dqrng::sample::sample<std::vector<int>, uint32_t>(*lrng, 100000, output.nrow(), true);
+      RcppParallel::RMatrix<int>::Column column = output.column(col);
+      std::copy(sampled.begin(), sampled.end(), column.begin());
+    }
+  }
+};
+
+// [[Rcpp::export]]
+Rcpp::IntegerMatrix parallel_random_matrix(const int n, const int m, const int ncores) {
+  Rcpp::IntegerMatrix res(n, m);
+  RandomFill randomFill(res);
+  RcppParallel::parallelFor(0, m, randomFill, m/ncores + 1);
+  return res;
+}
+
+/*** R
+dqRNGkind("pcg64")
+dqset.seed(42)
+res <- parallel_random_matrix(1e6, 8, 4)
+head(res)
+symnum(x = cor(res), cutpoints = c(0.001, 0.003, 0.999),
+       symbols = c(" ", "?", "!", "1"),
+       abbr.colnames = FALSE, corr = TRUE)
+*/


@@ -346,7 +455,7 @@

PCG: multiple streams with RcppP

-

Site built with pkgdown 2.0.7.

+

Site built with pkgdown 2.0.8.

diff --git a/articles/sample.html b/articles/sample.html index aa28311..25dbcc8 100644 --- a/articles/sample.html +++ b/articles/sample.html @@ -6,7 +6,7 @@ Fast sampling methods • dqrng - + @@ -33,7 +33,7 @@ dqrng - 0.3.2.2 + 0.3.2.4

@@ -91,7 +91,7 @@

Fast sampling methods

Ralf Stubner

-

2024-04-09

+

2024-04-15

Source: vignettes/sample.Rmd @@ -418,7 +418,7 @@

Technicalities

-

Site built with pkgdown 2.0.7.

+

Site built with pkgdown 2.0.8.

diff --git a/authors.html b/authors.html index 5b680d0..41e3ef5 100644 --- a/authors.html +++ b/authors.html @@ -1,5 +1,5 @@ -Authors and Citation • dqrngAuthors and Citation • dqrng @@ -17,7 +17,7 @@ dqrng - 0.3.2.2 + 0.3.2.4 @@ -63,7 +63,7 @@
@@ -110,13 +110,13 @@

Citation

Stubner R (2024). dqrng: Fast Pseudo Random Number Generators. -R package version 0.3.2.2, https://github.com/daqana/dqrng, https://daqana.github.io/dqrng/. +R package version 0.3.2.4, https://github.com/daqana/dqrng, https://daqana.github.io/dqrng/.

@Manual{,
   title = {dqrng: Fast Pseudo Random Number Generators},
   author = {Ralf Stubner},
   year = {2024},
-  note = {R package version 0.3.2.2, https://github.com/daqana/dqrng},
+  note = {R package version 0.3.2.4, https://github.com/daqana/dqrng},
   url = {https://daqana.github.io/dqrng/},
 }
@@ -131,7 +131,7 @@

Citation

-

Site built with pkgdown 2.0.7.

+

Site built with pkgdown 2.0.8.

diff --git a/index.html b/index.html index 3a92a7e..ed1225b 100644 --- a/index.html +++ b/index.html @@ -6,26 +6,13 @@ Fast Pseudo Random Number Generators • dqrng - + - + Changelog • dqrngChangelog • dqrng @@ -17,7 +17,7 @@ dqrng - 0.3.2.2 + 0.3.2.4 @@ -163,7 +163,7 @@

Examples

sigma <- matrix(c(4,2,2,3), ncol=2)
 x <- dqrmvnorm(n=500, mean=c(1,2), sigma=sigma)
 colMeans(x)
-#> [1] 0.9358251 2.0251444
+#> [1] 0.8614361 2.0263967
 var(x)
 #>          [,1]     [,2]
-#> [1,] 3.909685 1.884089
-#> [2,] 1.884089 2.976024
+#> [1,] 3.930309 1.917535
+#> [2,] 1.917535 2.881480
 plot(x)
 
 
@@ -122,7 +122,7 @@

Examples

-

Site built with pkgdown 2.0.7.

+

Site built with pkgdown 2.0.8.

diff --git a/reference/dqrng-functions.html b/reference/dqrng-functions.html index 7d471a1..29ebeff 100644 --- a/reference/dqrng-functions.html +++ b/reference/dqrng-functions.html @@ -1,5 +1,5 @@ -R interface — dqRNGkind • dqrngR interface — dqRNGkind • dqrng dqrng - 0.3.2.2 + 0.3.2.4 @@ -250,7 +250,7 @@

Examples

-

Site built with pkgdown 2.0.7.

+

Site built with pkgdown 2.0.8.

diff --git a/reference/dqrng-package.html b/reference/dqrng-package.html index e12ea13..99547af 100644 --- a/reference/dqrng-package.html +++ b/reference/dqrng-package.html @@ -1,5 +1,5 @@ -dqrng: Fast Pseudo Random Number Generators — dqrng-package • dqrngdqrng: Fast Pseudo Random Number Generators — dqrng-package • dqrngUnbiased Random Samples and Permutations — dqsample • dqrngUnbiased Random Samples and Permutations — dqsample • dqrng @@ -17,7 +17,7 @@ dqrng - 0.3.2.2 + 0.3.2.4 @@ -116,7 +116,7 @@

See also

-

Site built with pkgdown 2.0.7.

+

Site built with pkgdown 2.0.8.

diff --git a/reference/generateSeedVectors.html b/reference/generateSeedVectors.html index ebd8b72..b58534a 100644 --- a/reference/generateSeedVectors.html +++ b/reference/generateSeedVectors.html @@ -1,5 +1,5 @@ -Generate seed as a integer vector — generateSeedVectors • dqrngGenerate seed as a integer vector — generateSeedVectors • dqrng @@ -17,7 +17,7 @@ dqrng - 0.3.2.2 + 0.3.2.4 @@ -179,7 +179,7 @@

Examples

-

Site built with pkgdown 2.0.7.

+

Site built with pkgdown 2.0.8.

diff --git a/reference/index.html b/reference/index.html index 6aedbb9..1d9898d 100644 --- a/reference/index.html +++ b/reference/index.html @@ -1,5 +1,5 @@ -Function reference • dqrngFunction reference • dqrng @@ -17,7 +17,7 @@ dqrng - 0.3.2.2 + 0.3.2.4 @@ -106,7 +106,7 @@

All functions
-

Site built with pkgdown 2.0.7.

+

Site built with pkgdown 2.0.8.

diff --git a/reference/user-supplied-rng.html b/reference/user-supplied-rng.html index cf5a95f..e7692dc 100644 --- a/reference/user-supplied-rng.html +++ b/reference/user-supplied-rng.html @@ -1,5 +1,5 @@ -Registering as user-supplied RNG — register_methods • dqrngRegistering as user-supplied RNG — register_methods • dqrng