From owner-freebsd-hackers@FreeBSD.ORG Thu Aug 28 13:39:49 2014 Return-Path: Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id DA59AE3C for ; Thu, 28 Aug 2014 13:39:49 +0000 (UTC) Received: from nimbus.fccf.net (nimbus.fccf.net [77.77.144.35]) by mx1.freebsd.org (Postfix) with ESMTP id 5E000172C for ; Thu, 28 Aug 2014 13:39:48 +0000 (UTC) Received: from straylight.m.ringlet.net (unknown [78.90.13.150]) by nimbus.fccf.net (Postfix) with ESMTPSA id E5EB6503 for ; Thu, 28 Aug 2014 16:39:47 +0300 (EEST) Received: from roam (uid 1000) (envelope-from roam@ringlet.net) id 254004e by straylight.m.ringlet.net (DragonFly Mail Agent v0.9); Thu, 28 Aug 2014 16:38:46 +0300 Date: Thu, 28 Aug 2014 16:38:46 +0300 From: Peter Pentchev To: Chenguang Li Subject: Re: On changing rand(3) to random(3) in awk(1) Message-ID: <20140828133846.GB2385@straylight.m.ringlet.net> Mail-Followup-To: Chenguang Li , Vitaly Magerya , freebsd-hackers@freebsd.org References: <53FEFBB8.5040305@gmail.com> <20140828131526.GA2385@straylight.m.ringlet.net> <5C40F611-22EB-49E4-8925-37922E771C0F@gmail.com> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="mojUlQ0s9EVzWg2t" Content-Disposition: inline In-Reply-To: <5C40F611-22EB-49E4-8925-37922E771C0F@gmail.com> User-Agent: Mutt/1.5.23 (2014-03-12) Cc: freebsd-hackers@freebsd.org, Vitaly Magerya X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.18-1 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 28 Aug 2014 13:39:50 -0000 --mojUlQ0s9EVzWg2t Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Thu, Aug 28, 2014 at 09:28:48PM +0800, Chenguang Li wrote: > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA512 >=20 > > Peter Pentchev 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 > >>> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > >>> --- run.c (revision 270740) > >>> +++ run.c (working copy) > >>> @@ -1522,7 +1522,7 @@ > >>> break; > >>> case FRAND: > >>> /* in principle, rand() returns something in 0..RAND_MA= X */ > >>> - u =3D (Awkfloat) (rand() % RAND_MAX) / RAND_MAX; > >>> + u =3D (Awkfloat) (random() % RAND_MAX) / RAND_MAX; > >>=20 > >> 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). > >>=20 > >> A better patch would be something like this: > >>=20 > >> - /* in principle, rand() returns something in 0..RAND_M= AX */ > >> - u =3D (Awkfloat) (rand() % RAND_MAX) / RAND_MAX; > >> + /* random() returns values in [0, 2147483647] */ > >> + u =3D (Awkfloat) random() / 2147483648; > > > > Hm. Since random() is documented to return "long", wouldn't it be a bit > > better with #include and LONG_MAX here? >=20 > I am using RANDOM_MAX here to maintain the original code structure. > I've updated my patch, please check the gist. Thanks! Right, but you've hard-coded RANDOM_MAX to 2^32-1. I don't think this is correct; I do believe that you should use LONG_MAX for this value. Of course, #define RANDOM_MAX LONG_MAX could be fine for this purpose here, but the point is to use LONG_MAX instead of 2^32-1. G'luck, Peter --=20 Peter Pentchev roam@ringlet.net roam@FreeBSD.org p.penchev@storpool.com PGP key: http://people.FreeBSD.org/~roam/roam.key.asc Key fingerprint 2EE7 A7A5 17FC 124C F115 C354 651E EFB0 2527 DF13 --mojUlQ0s9EVzWg2t Content-Type: application/pgp-signature; name="signature.asc" Content-Description: Digital signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAEBCAAGBQJT/zDeAAoJEGUe77AlJ98TWzUP/ApHYpwoiHG+Blo5AuPItI+U 8/5EBQpjcggTvZxwsmOHZfsWTWN1wNIOpfoaTn8XHGgHUraysXq39EJWJgGfLyf6 oZjRlr7vMXRf/km5A9unMQLLHteHfBqwkBBtqpJfdvkMZmwKV9xXar62SBAZJFCh uykfLy8H3ceqs47DI4AjrsAjmqLXKt8w2kSpWSzLHf1PFPS8Ow8ZhOV+j2jnvNsx P3nAzOkspPiAotEwI8S1ss4K0r6eP9Vw1crftH3stYhBfDiK3VdrE/uhghZrJwxt 1Yjy7ZapKdqin5q5osYBoRyRwNGtoty4gHUCPuFgk8F9+lUPX7CFEAQjEZIeAQoN vg3JuuQlDQXpgOELQrRohxBi/6i5MeaztqkmXczzP/+lHWVYkiEbIrtCainuA1IY I8Lg9DJ8H8CibJlMxy8tIElyqEcfS9w7SDnS3GLzeiz9UuYQDtJqGxLvkzMIS8tA 1UHVoveD5ihL+OQQx2UCYfXGwgnKrhe8UxTAGoczStXDqACps0U4zY9c5bUqk2l5 BexRwEryKwiPOXR4tjb9vCp5sBj1oUIgsXzzcpoX5rWvIjN8QLVLLERLiQT7K9mB GqLUsFw5VGx6FC834ohYy84nMRTlMrVymfJL04bLcI5rr03zCWj4BL9mMFpr1B2V hZzE937WTmhzpe8RUOfC =b6nG -----END PGP SIGNATURE----- --mojUlQ0s9EVzWg2t--