Date: Thu, 20 Mar 2008 07:20:02 GMT From: Roland Smith <rsmith@xs4all.nl> To: freebsd-amd64@FreeBSD.org Subject: Re: amd64/121885: random() system call returning the same number on amd64 Message-ID: <200803200720.m2K7K2qu005994@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
The following reply was made to PR amd64/121885; it has been noted by GNATS. From: Roland Smith <rsmith@xs4all.nl> To: Lewis <moggie@elasticmind.net> Cc: FreeBSD-gnats-submit@freebsd.org Subject: Re: amd64/121885: random() system call returning the same number on amd64 Date: Thu, 20 Mar 2008 08:18:50 +0100 --LZvS9be/3tNcYl/X Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Wed, Mar 19, 2008 at 10:02:31PM +0000, Lewis wrote: > --- random.c begins here --- > #include <stdio.h> > #include <strings.h> > #include <stdlib.h> > #include <time.h> > #include <sys/types.h> > #include <unistd.h> >=20 > int main(int argc, char ** argv) { >=20 > srandom(time(0) * getpid()); > printf("time: %d\n", time(0)); > printf("pid: %d\n", getpid()); > =09 > double r_num; This should be 'long random;', see random(3). With this change it works. Or, see below. > int i, percent =3D 50; > /* Constant 0x7fffffff is equal to (2**31)-1, which is the > * maximum value returned by the random() number function. > * http://web.mit.edu/answers/c/c_random_numbers.html 2008/03/19 */ >=20 > for (i =3D 0; i < 100; i++) { > /*r_num =3D ((float) random() / (float) 0x7fffffff);*/ > r_num =3D random(); >=20 > if (r_num < (percent / 100)) { > printf("random: %u - Dropped packet.\n",r_num); > } else { > printf("random: %u - Sent packet.\n", r_num); And if you want to use doubles, you should have used '%f' of '%g' here, instead of '%u'. In which case it works as well. > } > } > } >=20 > /* Sample program output: (long r_num): time: 1205997021 pid: 59547 random: 1651842516 - Sent packet. random: 658819253 - Sent packet. random: 597332715 - Sent packet. random: 635700682 - Sent packet. random: 996321444 - Sent packet. random: 870878043 - Sent packet. random: 1977054922 - Sent packet. random: 955816479 - Sent packet. random: 367175873 - Sent packet. random: 16441391 - Sent packet. random: 1188837559 - Sent packet. random: 1906346020 - Sent packet. random: 151679052 - Sent packet. (double r_num, with '%g' in printf) time: 1205997420 pid: 59748 random: 9.87536e+08 - Sent packet. random: 1.5497e+09 - Sent packet. random: 2.13094e+09 - Sent packet. random: 1.08434e+09 - Sent packet. random: 1.94301e+09 - Sent packet. random: 1.34453e+09 - Sent packet. random: 1.77993e+09 - Sent packet. random: 1.10691e+09 - Sent packet. random: 1.95755e+09 - Sent packet. random: 1.70928e+09 - Sent packet. random: 1.66913e+09 - Sent packet. random: 1.90308e+09 - Sent packet. I think this PR can be closed. Roland --=20 R.F.Smith http://www.xs4all.nl/~rsmith/ [plain text _non-HTML_ PGP/GnuPG encrypted/signed email much appreciated] pgp: 1A2B 477F 9970 BA3C 2914 B7CE 1277 EFB0 C321 A725 (KeyID: C321A725) --LZvS9be/3tNcYl/X Content-Type: application/pgp-signature Content-Disposition: inline -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.8 (FreeBSD) iEYEARECAAYFAkfiD9oACgkQEnfvsMMhpyWrOgCgl+gm3rRA5xYbYr6ljdxXBQ2a 9N0AniIMhHMxQscViXBWyzszwjkmxGpJ =pXIk -----END PGP SIGNATURE----- --LZvS9be/3tNcYl/X--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200803200720.m2K7K2qu005994>