# Random Numbers distributed evenly without pattern

Author Message
grvtomar

New User

Joined: 29 Apr 2015
Posts: 7
Location: Sri Lanka

 Posted: Sat Jul 21, 2018 3:34 am 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
sergeyken
Warnings : 2

Senior Member

Joined: 29 Apr 2008
Posts: 1080

 Posted: Sat Jul 21, 2018 4:29 am 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.
grvtomar

New User

Joined: 29 Apr 2015
Posts: 7
Location: Sri Lanka

 Posted: Sat Jul 21, 2018 6:13 am 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.
Robert Sample

Global Moderator

Joined: 06 Jun 2008
Posts: 8574
Location: Dubuque, Iowa, USA

Posted: Sat Jul 21, 2018 7:20 am

 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.
Rohit Umarjikar

Global Moderator

Joined: 21 Sep 2010
Posts: 2673
Location: NYC,USA

 Posted: Sat Jul 21, 2018 5:39 pm Try using one or many sequence objects in db2. Your DbA should help you if you at all approach him.
jerryte

Active User

Joined: 29 Oct 2010
Posts: 201

Posted: Wed Aug 15, 2018 9:17 pm

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.
Rohit Umarjikar

Global Moderator

Joined: 21 Sep 2010
Posts: 2673
Location: NYC,USA

 Posted: Wed Aug 15, 2018 11:23 pm That's good to know. here is the link for further details. CEERAN0â€”Calculate uniform random numbers
 View Bookmarks All times are GMT + 6 Hours

 Topic Forum Replies Similar Topics Feild level validation to test first ... JCL & VSAM 10 Line numbers contains last 6 digits o... TSO/ISPF 4 Incorrect output when trying to add n... PL/I & Assembler 10 RANDOM Function in COBOL COBOL Programming 2 Row-Numbers of distinct rows? DB2 1
Search our Forums: