On changing rand(3) to random(3) in awk(1)

Chenguang Li horus.li at gmail.com
Thu Aug 28 13:29:10 UTC 2014


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512

> Peter Pentchev <roam at ringlet.net> wrote:
>> On Thu, Aug 28, 2014 at 12:51:52PM +0300, Vitaly Magerya wrote:
>>> On 2014-08-28 09:21, Chenguang Li wrote:
>>> [snip]
>>> Index: run.c
>>> ===================================================================
>>> --- run.c       (revision 270740)
>>> +++ run.c       (working copy)
>>> @@ -1522,7 +1522,7 @@
>>>               break;
>>>       case FRAND:
>>>               /* in principle, rand() returns something in 0..RAND_MAX */
>>> -               u = (Awkfloat) (rand() % RAND_MAX) / RAND_MAX;
>>> +               u = (Awkfloat) (random() % RAND_MAX) / RAND_MAX;
>> 
>> You should not use RAND_MAX with random(3), since it returns values
>> between 0 and 0x7fffffff (inclusive); RAND_MAX only applies to rand(3).
>> 
>> A better patch would be something like this:
>> 
>> -               /* in principle, rand() returns something in 0..RAND_MAX */
>> -               u = (Awkfloat) (rand() % RAND_MAX) / RAND_MAX;
>> +               /* random() returns values in [0, 2147483647] */
>> +               u = (Awkfloat) random() / 2147483648;
>
> Hm.  Since random() is documented to return "long", wouldn't it be a bit
> better with #include <limits.h> and LONG_MAX here?

I am using RANDOM_MAX here to maintain the original code structure.
I've updated my patch, please check the gist. Thanks!

Chenguang Li

-----BEGIN PGP SIGNATURE-----

iQIcBAEBCgAGBQJT/y6XAAoJELG4cS+11lRhQwEQALocD2J3I+xbGYqKGkSQ8Irr
KnuZ21QJ8H+3eb9KLcJ24Tob/vdVi6eukHIDn1SbmDfdyUfm/ufKBObiQ98Qsyu2
/7PB9BcH3N6f9obkFEJWkBEx5Gc3HOAkFhsJFgRvutGVAi1ISTwmqyEcC+18DgqC
NB8j0c5CoFLI03rtJNH+m0Jx5PGPOIHK7t9MrHhKlRmxqbN+pClKDXWLp4/Qfsj9
I6BMLcXcdDMGJ/L81AQUFPbOUXlibjG5m2afV6PSyNwcrPaUT9yyL4lDUunz3IAo
ktGs2eDIiGXM36Iqh4jUk9bCXvJfYf1XuHEUCvhnvVHECDJGv6rJlFU3Eq0M5naN
ZMVc16zuxWg4J7BLwTqI1ocKD1TigvScnpWWjbfr53WEVRXlBlUHcmwHVyZ2knn5
NAVxF/kp9dB8XqJdIVkoFvge+tO9m+HKEtUxALRwjjql/xX0tNEY/F/lcipv4qUk
BKHUPauA5tupolFiI4ucWpOS7XbQBGRQdTEM4CwVrE/wkp6CeTMBagefy0UuGzi1
L/3gq0oMbr9yYjBf8flxO8jz1wbuWIVG00cNUW+ps0ixDsGiD/ea6nfwa8vsx2i3
FnicLPk+ulhlyPqKU70de2Jj7UtJuiVAtQCzEdP3AyJ757V9+y7epMzI7Z5nLHHZ
Q1f8DkLLZdyMDlG0siL4
=bY6X
-----END PGP SIGNATURE-----


More information about the freebsd-hackers mailing list