Add guf_rand_splitmix32
This commit is contained in:
parent
461006746e
commit
05f995e855
@ -27,6 +27,7 @@
|
||||
#endif
|
||||
|
||||
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_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"
|
||||
|
||||
/*
|
||||
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)
|
||||
*/
|
||||
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);
|
||||
}
|
||||
|
||||
/*
|
||||
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_ASSERT_RELEASE(state);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user