ID EN
System & OS

Random.user

R Base 3.6.2 🇮🇩 Bahasa Indonesia

Fungsi RNGkind memungkinkan generator nomor acak seragam dan normal berkode pengguna disediakan. Detailnya diberikan di sini.

Details

RNG seragam yang ditentukan pengguna dipanggil dari titik masuk dalam kode terkompilasi yang dimuat secara dinamis. Pengguna harus menyediakan titik masuk user_unif_rand, yang tidak memerlukan argumen dan mengembalikan pointer ke double. Contoh di bawah ini akan menunjukkan pola umum. Generator harus memiliki presisi minimal 25 bit. Secara opsional, pengguna dapat menyediakan titik masuk user_unif_init, yang dipanggil dengan argumen int unsigned ketika RNGkind (atau set.seed) dipanggil, dan dimaksudkan untuk digunakan untuk menginisialisasi kode RNG pengguna. Argumen tersebut dimaksudkan untuk digunakan untuk menetapkan ‘benih’; itu adalah argumen seed ke set.seed atau seed yang pada dasarnya acak jika RNGkind dipanggil. Jika hanya fungsi ini yang disediakan, tidak ada informasi tentang status generator yang dicatat di .Random.seed. Secara opsional, fungsi u

Contoh

Example
R
# NOT RUN {
##  Marsaglia's congruential PRNG
#include <R_ext/Random.h>

static Int32 seed;
static double res;
static int nseed = 1;

double * user_unif_rand()
{
    seed = 69069 * seed + 1;
    res = seed * 2.32830643653869e-10;
    return &res;
}

void  user_unif_init(Int32 seed_in) { seed = seed_in; }
int * user_unif_nseed() { return &nseed; }
int * user_unif_seedloc() { return (int *) &seed; }

/*  ratio-of-uniforms for normal  */
#include <math.h>
static double x;

double * user_norm_rand()
{
    double u, v, z;
    do {
        u = unif_rand();
        v = 0.857764 * (2. * unif_rand() - 1);
        x = v/u; z = 0.25 * x * x;
        if (z < 1. - u) break;
        if (z > 0.259/u + 0.35) continue;
    } while (z > -log(u));
    return &x;
}

## Use under Unix:
R CMD SHLIB urand.c
R
> dyn.load("urand.so")
> RNGkind("user")
> runif(10)
> .Random.seed
> RNGkind(, "user")
> rnorm(10)
> RNGkind()
[1] "user-supplied" "user-supplied"
# }