Some NumPy random number generation functions take a dtype parameter whereas others don't. Some of them take an out parameter whereas others don't. Just glancing at it, there seems to be no rhyme or reason why this would be the case but is there some hidden consistency underneath the hood to explain why some have these params and others don't? Is there any reason that things like random.randn and numpy.random.Generator.normal don't take a dtype and out parameters? If I need to create a huge array of random numbers whose dtype is float16 or float32 then what is the BKM to do this when the routine I would like to use generates an array of float64 and with the 64-bit data type the array won't fit in memory?