Add random util
Add a user-friendly tool to generate random numbers.
This commit is contained in:
parent
059ec45f82
commit
74e3f8b253
3 changed files with 41 additions and 0 deletions
|
@ -37,6 +37,7 @@ src = [
|
||||||
'src/util/net_intr.c',
|
'src/util/net_intr.c',
|
||||||
'src/util/process.c',
|
'src/util/process.c',
|
||||||
'src/util/process_intr.c',
|
'src/util/process_intr.c',
|
||||||
|
'src/util/rand.c',
|
||||||
'src/util/strbuf.c',
|
'src/util/strbuf.c',
|
||||||
'src/util/str.c',
|
'src/util/str.c',
|
||||||
'src/util/term.c',
|
'src/util/term.c',
|
||||||
|
|
24
app/src/util/rand.c
Normal file
24
app/src/util/rand.c
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
#include "rand.h"
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#include "tick.h"
|
||||||
|
|
||||||
|
void sc_rand_init(struct sc_rand *rand) {
|
||||||
|
sc_tick seed = sc_tick_now(); // microsecond precision
|
||||||
|
rand->xsubi[0] = (seed >> 32) & 0xFFFF;
|
||||||
|
rand->xsubi[1] = (seed >> 16) & 0xFFFF;
|
||||||
|
rand->xsubi[2] = seed & 0xFFFF;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t sc_rand_u32(struct sc_rand *rand) {
|
||||||
|
// jrand returns a value in range [-2^31, 2^31]
|
||||||
|
// conversion from signed to unsigned is well-defined to wrap-around
|
||||||
|
return jrand48(rand->xsubi);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint64_t sc_rand_u64(struct sc_rand *rand) {
|
||||||
|
uint32_t msb = sc_rand_u32(rand);
|
||||||
|
uint32_t lsb = sc_rand_u32(rand);
|
||||||
|
return ((uint64_t) msb << 32) | lsb;
|
||||||
|
}
|
16
app/src/util/rand.h
Normal file
16
app/src/util/rand.h
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
#ifndef SC_RAND_H
|
||||||
|
#define SC_RAND_H
|
||||||
|
|
||||||
|
#include "common.h"
|
||||||
|
|
||||||
|
#include <inttypes.h>
|
||||||
|
|
||||||
|
struct sc_rand {
|
||||||
|
unsigned short xsubi[3];
|
||||||
|
};
|
||||||
|
|
||||||
|
void sc_rand_init(struct sc_rand *rand);
|
||||||
|
uint32_t sc_rand_u32(struct sc_rand *rand);
|
||||||
|
uint64_t sc_rand_u64(struct sc_rand *rand);
|
||||||
|
|
||||||
|
#endif
|
Loading…
Reference in a new issue