Skip site navigation (1)Skip section navigation (2)
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>