Skip to content

Instantly share code, notes, and snippets.

@xdqi
Created November 19, 2022 01:53
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save xdqi/6ce24d80e7d99c815be34dd51add1b41 to your computer and use it in GitHub Desktop.
Save xdqi/6ce24d80e7d99c815be34dd51add1b41 to your computer and use it in GitHub Desktop.
Random double between [0.5,1)
#include <cstdio>
#include <cstdint>
// generates random number between [0.5, 1)
double getrand(FILE *f) {
union {
uint64_t u;
double d;
};
fread(&u, sizeof(u), 1, f);
u &= ~0xfff0'0000'0000'0000; // mask sign and exp
u |= 0x3fe0'0000'0000'0000; // reset sign and exp
return d;
}
int main() {
FILE *f = fopen("/dev/urandom", "rb");
for (uint64_t i = 0; i < 500'000'000; ++i) {
double d = getrand(f);
// printf("%f\n", d);
}
fclose(f);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment