It returns an integer if assiged to an integer variable, and it returns a floating point value if assiged to a floating number variable.
That's wrong no matter what else the function does. The returned value is always floating point, single precision for classic Blitz languages and double for BlitzMax.
Of course, if assigned to an integer variable then the value is converted to an integer. For example "n% = Rnd(1,4)" can only produce the results 1,2,3 in BlitMax.
But in earlier Blitz languages the conversion is done by rounding to the nearest integer. Hence the possible values are 1,2,3,4. This is no doubt the source of confusion about the end of the range being included.
It also a source of error. The length of the interval is 3. The integer results 1,2,3 in BlitzMax are equally likely, each occuring about 1/3 of the time. But the 1,2,3,4 of older Blitzes are not equally likely. The 2 and 3 each have probability 1/3, but the 1 and 4 split the other 1/3. This was particularly problematic in Blitz's early days when there was no Rand function.