469,323 Members | 1,631 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 469,323 developers. It's quick & easy.

rand() question

so i generate a serial number with the exact code below (three lines):

$number1 = 10000 + int(rand(99999));
$number2 = 10000 + int(rand(99999));
$shrwsn = "$number1-$number2";

the point is i want TWO five digit numbers separated by a dash "-"
and all is cool, but i just noticed, that for the three entries i have made
test wise:

79109-72626
106421-1023 these last two are six and four digits.....
108629-3542

WHY? these were all made with the SAME script...............
Jul 19 '05 #1
4 4976
In article <10***************@nntp.acecape.com>, no****@nospam.com says...
so i generate a serial number with the exact code below (three lines):

$number1 = 10000 + int(rand(99999));
$number2 = 10000 + int(rand(99999));
$shrwsn = "$number1-$number2";

the point is i want TWO five digit numbers separated by a dash "-"
So why don't you do:

$shrwsn = sprintf("%05d-%05d", rand(100000), rand(100000));
and all is cool, but i just noticed, that for the three entries i have made
test wise:

79109-72626
106421-1023 these last two are six and four digits.....
108629-3542

WHY? these were all made with the SAME script...............


--
Go to http://MarcDashevsky.com to send me e-mail.
Jul 19 '05 #2
i'll do that, but somehow the two OFF results don't ake sense to me
"Marc Dashevsky" <us****@MarcDashevsky.com> wrote in message
news:MP************************@netnews.comcast.ne t...
In article <10***************@nntp.acecape.com>, no****@nospam.com says...
so i generate a serial number with the exact code below (three lines):

$number1 = 10000 + int(rand(99999));
$number2 = 10000 + int(rand(99999));
$shrwsn = "$number1-$number2";

the point is i want TWO five digit numbers separated by a dash "-"


So why don't you do:

$shrwsn = sprintf("%05d-%05d", rand(100000), rand(100000));
and all is cool, but i just noticed, that for the three entries i have made test wise:

79109-72626
106421-1023 these last two are six and four digits.....
108629-3542

WHY? these were all made with the SAME script...............


--
Go to http://MarcDashevsky.com to send me e-mail.

Jul 19 '05 #3
daniel kaplan wrote:
so i generate a serial number with the exact code below (three lines):

$number1 = 10000 + int(rand(99999));
That creates a number between 10000 and 109999, which can be 6 digits.
106421-1023 these last two are six and four digits.....
108629-3542


They look like a six digit number with a hyphen and a five or six
digit number where the result has been truncated to 11 characters.

$result = substr "106421-10230",0,11; # or "106421-102300"
$result = substr "108629-35429",0,11;

-Joe
Jul 19 '05 #4
Hi Daniel

As a Pascal/C/Modula-2 compiled languages rule OK programmer, my gut
reaction is integer overflow. Perl performs all of its numerical
calculations using floating point math in a manner that is determined by the
CPU and the operating system on which it is running. This will obviously
vary from platform to platform. To be honest I doubt that this is in fact
the explanation and someone more knowledgeable than I will set you straight.

But there are two things that might help you home in on the problem.

First off, try the same routine, but with numbers in a range less than
32,000.

Second, have you tried using the integer pragma?

use integer;
#your integer arithmetic code goes here
no integer;
#back to using floating point
On a different note, if you want your numbers to be as close to random as
possible, you should set a random seed first. If you don't Perl is quite
likely to produce the same 'random' series each time you run it. So you
should certainly mod your code to be something like:

srand();
$randomNumber = int(rand(999));

You can provide a seed parameter to srand, but if you don't it will use the
current time.
Happy problem solving

Ian


On 2004/09/15 01:58, in article 10***************@nntp.acecape.com, "daniel
kaplan" <no****@nospam.com> wrote:
so i generate a serial number with the exact code below (three lines):

$number1 = 10000 + int(rand(99999));
$number2 = 10000 + int(rand(99999));
$shrwsn = "$number1-$number2";

the point is i want TWO five digit numbers separated by a dash "-"
and all is cool, but i just noticed, that for the three entries i have made
test wise:

79109-72626
106421-1023 these last two are six and four digits.....
108629-3542

WHY? these were all made with the SAME script...............


Jul 19 '05 #5

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

11 posts views Thread by Tom McCallum | last post: by
36 posts views Thread by Ben Justice | last post: by
36 posts views Thread by Profetas | last post: by
5 posts views Thread by vib | last post: by
26 posts views Thread by Gary Wessle | last post: by
13 posts views Thread by Spiros Bousbouras | last post: by
10 posts views Thread by Rafael Cunha de Almeida | last post: by
15 posts views Thread by Rich Fife | last post: by
reply views Thread by zhoujie | last post: by
reply views Thread by Gurmeet2796 | last post: by
reply views Thread by listenups61195 | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.