View previous topic :: View next topic
|
Author |
Message |
grvtomar
New User
Joined: 29 Apr 2015 Posts: 7 Location: Sri Lanka
|
|
|
|
Hi Mainframers,
I want to create random numbers using COBOL. These numbers should have the properties
1. It should be random
2. Evenly distributed
which means If It of 4 digits
0001- 999 . - around 10%
1001- 1999 . around 10%
2001- 2999 . around 10%
..... - ......
and so on..
3. It should not have some pattern
I am not sure if it is possible with COBOL. I tried to do it with Random function+Db2 nano-seconds(seed). I got the purely random numbers. But I am not able to achieve point 2 and point 3 using that. Any approach in Cobol would be helpful
Many Thanks |
|
Back to top |
|
|
sergeyken
Senior Member
Joined: 29 Apr 2008 Posts: 2141 Location: USA
|
|
|
|
All known RANDOM functions do provide even distribution of values, and no obviously visible pattern.
I recommend not to make simple things to become very complex. |
|
Back to top |
|
|
grvtomar
New User
Joined: 29 Apr 2015 Posts: 7 Location: Sri Lanka
|
|
|
|
Sorry, my question was not clear I guess..
SO
Random Function used to generate two random-digits series
Randoms digits-1 Random Digits-2
xxxx yyyy
gggg hhhh
.....
....
...
(1000 numbers for each random-digits)
Both the series is having similar pattern and non-even distributing. |
|
Back to top |
|
|
Robert Sample
Global Moderator
Joined: 06 Jun 2008 Posts: 8700 Location: Dubuque, Iowa, USA
|
|
|
|
Quote: |
Sorry, my question was not clear I guess.. |
No, you are not being clear at all.
FUNCTION RANDOM in COBOL generates a pseudo-random sequence of values from a rectangular distribution (IBM's words, not mine). What that means is that if you THINK you are seeing patterns or non-uniformly distributed values, you need to review what you are doing:
- are you using a seed value for FUNCTION RANDOM?
- are you converting the returned values to your value range correctly?
- what does your code look like?
Properly used, FUNCTION RANDOM in COBOL will return uniformly distributed values that are pseudo-random (named this because computers cannot provide truly random values). So if you're not seeing this, you have made some mistake in your use of the function. |
|
Back to top |
|
|
Rohit Umarjikar
Global Moderator
Joined: 21 Sep 2010 Posts: 3076 Location: NYC,USA
|
|
|
|
Try using one or many sequence objects in db2. Your DbA should help you if you at all approach him. |
|
Back to top |
|
|
jerryte
Active User
Joined: 29 Oct 2010 Posts: 203 Location: Toronto, ON, Canada
|
|
|
|
Below shows sample code to call the Language Environment subroutine to generate a random number between 0 and 1 as a double floating point.
Code: |
05 W-CEERAN0-SEED PIC S9(08) COMP-5 VALUE 0.
05 W-CEERAN0-NUM COMP-2.
CALL 'CEERAN0'
USING W-CEERAN0-SEED
W-CEERAN0-NUM
OMITTED
END-CALL
|
If you want a 4 digit number then multiply the result by 10000 and then move to an PIC 9(4) field. |
|
Back to top |
|
|
Rohit Umarjikar
Global Moderator
Joined: 21 Sep 2010 Posts: 3076 Location: NYC,USA
|
|
Back to top |
|
|
|