If you just wanted random bytes (i.e. uniformly distributed values in the range [0-255]), then you should have asked for that. The obvious answer would then be /dev/random, whose characteristics are described in the man page:
Thanks. The Yarrow algorithm seems strong.
What I really need is a fast way to generate large arrays of floats drawn from a normal distribution.
My plan is to make an array of floats drawn from a uniform distribution between 0 and 1, then use the Box-Muller transform (or the equivalent Marsaglia polar method) to transform the result into a normal distribution. I intend to use vecLib functions to operate on the entire array quickly for that purpose.
In order to get the uniformly distributed floats, I had the idea in mind to create an array of random unsigned integers, then cast each element to a float and multiply by the reciprocal of the maximum random number.
I would prefer to do the type-cast in place, meaning I need an integer format of the same size as a float. On my machine, uint and float are each 32 bits long (sizeof() says 4 for both), so that seems like it will work, though I do not know how future-proof that is. I need the float type because that is what works with single-precision vector functions in vecLib, so perhaps uint32_t is more reliable as the destination type for the random bytes from /dev/random.