summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--examples/rngtest.c25
-rw-r--r--stc/crandom.h3
2 files changed, 16 insertions, 12 deletions
diff --git a/examples/rngtest.c b/examples/rngtest.c
index 66e5f0c8..657e002d 100644
--- a/examples/rngtest.c
+++ b/examples/rngtest.c
@@ -6,7 +6,7 @@
#endif
-#define NN 1000000000
+#define NN 3000000000
int main(void)
{
@@ -14,16 +14,21 @@ int main(void)
uint64_t v;
crandom_eng64_t sfc = crandom_eng64_init(time(NULL));
- crandom_distrib_i64_t d10 = crandom_uniform_i64_init(10, 20);
-
- for (int i=0; i<30; ++i) printf("%02zd ", crandom_uniform_i64(&sfc, d10));
+ crandom_distrib_i32_t i32dist = crandom_uniform_i32_init(10, 20);
+ crandom_distrib_f32_t f32dist = crandom_uniform_f32_init(10, 20);
+
+ crandom_distrib_i64_t idist = crandom_uniform_i64_init(10, 20);
+ crandom_distrib_f64_t fdist = crandom_uniform_f64_init(10, 20);
+
+ for (int i=0; i<30; ++i) printf("%02zd ", crandom_uniform_i64(&sfc, idist));
puts("");
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);
+ //v += crandom_i32(&pcg);
+ v += crandom_uniform_i32(&pcg, i32dist);
}
difference = clock() - before;
printf("pcg32: %.02f, %zu\n", (float) difference / CLOCKS_PER_SEC, v);
@@ -31,20 +36,20 @@ int main(void)
before = clock(); \
v = 0;
for (size_t i=0; i<NN; i++) {
- v += crandom_i64(&sfc) & 0xffffffff;
+ //v += crandom_i64(&sfc) & 0xffffffff;
+ v += crandom_uniform_i64(&sfc, idist);
}
difference = clock() - before;
printf("sfc64: %.02f, %zu\n", (float) difference / CLOCKS_PER_SEC, v);
- crandom_distrib_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_distrib_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_distrib_f64_t fdist = crandom_uniform_f64_init(10, 20);
+
for (int i=0; i<8; ++i) printf("%f ", crandom_uniform_f64(&sfc, fdist));
puts("");
} \ No newline at end of file
diff --git a/stc/crandom.h b/stc/crandom.h
index cd6c98cd..96a07fc4 100644
--- a/stc/crandom.h
+++ b/stc/crandom.h
@@ -100,8 +100,7 @@ STC_INLINE int64_t crandom_uniform_i64(crandom_eng64_t* rng, crandom_distrib_i64
#elif defined(_MSC_VER)
int64_t hi; _mul128(crandom_i64(rng) >> 1, dist.range << 1, &hi); return dist.offset + hi;
#else
- return dist.offset + (((uint32_t) crandom_i64(rng) * dist.range) >> 32); // range up to 2^32
- //return dist.offset + crandom_i64(rng) % dist.range; // slow
+ return dist.offset + crandom_i64(rng) % dist.range; // slower
#endif
}