...

GeorgeHaldane

47

Karma

2025-04-14

Created

About Me

C++ developer. Working in the field of computational mathematics.

Recent Activity

  • Thank you for noticing! Turns out [0, 1] is an artifact of the old documentation carried back from the time where generic GCC / clang approach used to produce occasional 1's due to some issues in N4958 specification. This is fixed in a new commit.

    For floats there are essentially 3 approaches that are selected based on the provided range & PRNG:

      1) Shift + multiply (like `(rng >> 11) * 0x1.0p-53`)
      2) "Low-high" from the paper by J. Doornik
      https://www.doornik.com/research/randomdouble.pdf
      3) Canonical GCC implementation
    
    All of these generate values in [0, 1) range which is now reflected in the docs properly. For most actual cases 1st method is the one selected.

HackerNews