On 05/21/16 16:55, Conrad Meyer wrote:
On Sat, May 21, 2016 at 1:40 PM, Pedro Giffuni <p...@freebsd.org> wrote:


On 05/21/16 14:05, Conrad Meyer wrote:
Won't this still return a negative integer in many cases?

random(9) returns u_long, whereas this rand() routine returns 'int'.

Even on architectures where long is the same size as ordinary
integers, the range of possible results of the 'random() / 2 + 1'
expression, before implicit cast to signed, is [1, 2^31] (inclusive).


According to:
sys/libkern/random.c

The result is uniform on [0, 2^31 - 1].

Ah, I missed that.  Sorry!  In that case, I'm not sure why this is
needed — the result fits in a non-negative 2's complement signed
integer.


Actually, I had missed it too. And I also had no idea we were working around the zero singularity.

I will revert the change and will do an adjustment for the case where
we use 0 as a seed (which in MS should be equivalent to 1).

Pedro.
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to