Add guf_rand_splitmix32
This commit is contained in:
parent
461006746e
commit
05f995e855
@ -27,6 +27,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
GUF_RAND_KWRDS uint64_t guf_rand_splitmix64(uint64_t *state);
|
GUF_RAND_KWRDS uint64_t guf_rand_splitmix64(uint64_t *state);
|
||||||
|
GUF_RAND_KWRDS uint32_t guf_rand_splitmix32(uint32_t *state);
|
||||||
|
|
||||||
GUF_RAND_KWRDS void guf_randstate_init(guf_randstate *state, uint64_t seed);
|
GUF_RAND_KWRDS void guf_randstate_init(guf_randstate *state, uint64_t seed);
|
||||||
GUF_RAND_KWRDS void guf_randstate_jump(guf_randstate *state); // Advance the state; equivalent to 2^128 calls to guf_rand_u64(state)
|
GUF_RAND_KWRDS void guf_randstate_jump(guf_randstate *state); // Advance the state; equivalent to 2^128 calls to guf_rand_u64(state)
|
||||||
@ -65,7 +66,7 @@ GUF_RAND_KWRDS float guf_rand_normal_sample_one_f32(guf_randstate *state, float
|
|||||||
#include "guf_math.h"
|
#include "guf_math.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
splitmix64 (public domain) written in 2015 by Sebastiano Vigna (vigna@acm.org)
|
splitmix64 written in 2015 by Sebastiano Vigna (vigna@acm.org) (released as public domain)
|
||||||
cf. https://prng.di.unimi.it/splitmix64.c (last-retrieved 2025-02-11)
|
cf. https://prng.di.unimi.it/splitmix64.c (last-retrieved 2025-02-11)
|
||||||
*/
|
*/
|
||||||
GUF_RAND_KWRDS uint64_t guf_rand_splitmix64(uint64_t *state)
|
GUF_RAND_KWRDS uint64_t guf_rand_splitmix64(uint64_t *state)
|
||||||
@ -77,6 +78,20 @@ GUF_RAND_KWRDS uint64_t guf_rand_splitmix64(uint64_t *state)
|
|||||||
return z ^ (z >> 31);
|
return z ^ (z >> 31);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
splitmix32 written in 2016 by Kaito Udagawa (released under CC0 <http://creativecommons.org/publicdomain/zero/1.0/>)
|
||||||
|
cf. https://github.com/umireon/my-random-stuff/blob/master/xorshift/splitmix32.c (last-retrieved 2025-03-28)
|
||||||
|
*/
|
||||||
|
GUF_RAND_KWRDS uint32_t guf_rand_splitmix32(uint32_t *state)
|
||||||
|
{
|
||||||
|
GUF_ASSERT(state);
|
||||||
|
uint32_t z = (*state += 0x9e3779b9);
|
||||||
|
z = (z ^ (z >> 16)) * 0x85ebca6b;
|
||||||
|
z = (z ^ (z >> 13)) * 0xc2b2ae35;
|
||||||
|
return z ^ (z >> 16);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
GUF_RAND_KWRDS void guf_randstate_init(guf_randstate *state, uint64_t seed)
|
GUF_RAND_KWRDS void guf_randstate_init(guf_randstate *state, uint64_t seed)
|
||||||
{
|
{
|
||||||
GUF_ASSERT_RELEASE(state);
|
GUF_ASSERT_RELEASE(state);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user