summaryrefslogtreecommitdiffhomepage
path: root/examples/rngtest.c
blob: caced0c39f73add999edb4ee1baeef993b5926d4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <stdio.h>
#include <time.h>
#include <stc/crandom.h>
#ifdef __cplusplus
#include <random>
#endif


#define NN 1000000000

int main(void)
{
    clock_t difference, before;
    uint64_t v;
    printf("start\n");

    crandom_eng32_t pcg = crandom_eng32_init(time(NULL));
    before = clock(); \
    v = 0;
    for (size_t i=0; i<NN; i++) {
        v += crandom_i32(&pcg);
    }
    difference = clock() - before;
    printf("pcg32: %.02f, %zu\n", (float) difference / CLOCKS_PER_SEC, v);

    crandom_eng64_t sfc = crandom_eng64_init(time(NULL));
    before = clock(); \
    v = 0;
    for (size_t i=0; i<NN; i++) {
        v += crandom_i64(&sfc) & 0xffffffff;
    }
    difference = clock() - before;
    printf("sfc64: %.02f, %zu\n", (float) difference / CLOCKS_PER_SEC, v);

    crandom_uniform_i32_t i32dist = crandom_uniform_i32_init(10, 20);
    for (int i=0; i<8; ++i) printf("%d ", crandom_uniform_i32(&pcg, i32dist));
    puts("");

    crandom_uniform_f32_t f32dist = crandom_uniform_f32_init(10, 20);
    for (int i=0; i<8; ++i) printf("%f ", crandom_uniform_f32(&pcg, f32dist));
    puts("");

    crandom_uniform_f64_t fdist = crandom_uniform_f64_init(10, 20);
    for (int i=0; i<8; ++i) printf("%f ", crandom_uniform_f64(&sfc, fdist));
    //for (int i=0; i<8; ++i) printf("%zu ", crandom_i64(&sfc));
    puts("");
}