amd64/121885: random() system call returning the same number
on amd64
Roland Smith
rsmith at xs4all.nl
Thu Mar 20 07:20:03 UTC 2008
The following reply was made to PR amd64/121885; it has been noted by GNATS.
From: Roland Smith <rsmith at xs4all.nl>
To: Lewis <moggie at elasticmind.net>
Cc: FreeBSD-gnats-submit at 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--
More information about the freebsd-amd64
mailing list