add 0 to 1 float to xorshift implementation

This commit is contained in:
NunoSempere 2023-06-03 03:47:10 -06:00
parent 131ea138ae
commit 00684179e1
2 changed files with 12 additions and 3 deletions

Binary file not shown.

View File

@ -12,15 +12,21 @@ uint32_t xorshift32(uint32_t* state)
return *state = x; return *state = x;
} }
float rand_xorshift32(uint32_t* state){
return (float) xorshift32(state) / UINT32_MAX;
}
int main(){ int main(){
uint32_t** states = malloc(4 * sizeof(uint32_t*)); uint32_t** states = malloc(4 * sizeof(uint32_t*));
for(int i=0; i<4;i++){ for(int i=0; i<4;i++){
states[i] = malloc(sizeof(uint32_t)); states[i] = malloc(sizeof(uint32_t));
*states[i] = i + 1; *states[i] = i + 1;
} }
printf("%i\n", xorshift32(states[0])); for(int i=0; i<100; i++){
printf("%i\n", xorshift32(states[1])); printf("%u\n", xorshift32(states[0]));
printf("%f\n", rand_xorshift32(states[1]));
}
for(int i=0; i<4;i++){ for(int i=0; i<4;i++){
free(states[i]); free(states[i]);
} }
@ -28,3 +34,6 @@ int main(){
return 0; return 0;
} }
// See <https://stackoverflow.com/questions/53886131/how-does-xorshift32-works>
// https://en.wikipedia.org/wiki/Xorshift