gnucobol-users
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [open-cobol-list] RANDOM-ly non-random


From: Peter Klosky
Subject: Re: [open-cobol-list] RANDOM-ly non-random
Date: Thu, 30 May 2013 13:20:52 -0700 (PDT)

Bruce,
 
There may be another issue.
 
First, the program compiled and ran here.  I did 1000 trials and saw no "ad infinitum" problems.
 
Second, neither your machine or mine gives the expected result.  The REM function is intended to limit the result to 0-19, inclusive, based on going to the link you mentioned and reading the author's intent.  The idea is that dividing any non-negative integer by 20 gives a remainder (REM) of less than twenty.  Few of your results are less than 20; same here.
 
Could be an alignment / argument passing type of issue.
 
Peter
 
 
 
$ uname -a
SunOS dmldev5 5.10 Generic_147148-26 i86pc i386 i86pc

$ cobc -V
cobc (OpenCOBOL) 1.1.0
Copyright (C) 2001-2009 Keisuke Nishida / Roger While
Built May 16 2013 16:16:51
Packaged Feb 06 2009 10:30:55 CET
 
...
trial 999         21
trial 1000         39

$ cat g
i=0
while test $i -lt 1000
do
i=`expr $i + 1`
echo  trial $i " " '\c'
  ./r | wc -l
sleep 1
done
From: Robert Wolfe <address@hidden>
To: Bruce M. Axtens <address@hidden>; "address@hidden" <address@hidden>
Sent: Thursday, May 30, 2013 12:37 PM
Subject: Re: [open-cobol-list] RANDOM-ly non-random

Odd, because when I go to compile this code, I get this:

address@hidden:~$ cobc random.cbl
random.cbl: In paragraph 'Main':
random.cbl:11: Error: syntax error, unexpected PERFORM, expecting ADDRESS or "Identifier"

System is Debian 7 "Wheezy" AMD64 running in an ESXi 5 virtual machine.

From: Bruce M. Axtens
Sent: Thursday, May 30, 2013 9:30 AM
To: address@hidden
Subject: [open-cobol-list] RANDOM-ly non-random

Context: MinGW

$ uname -a
MINGW32_NT-6.1 MERCURY 1.0.17(0.48/3/2) 2011-04-24 23:39 i686 Msys

$ cobc -v
cobc (OpenCOBOL) 1.1.0
Copyright (C) 2001-2009 Keisuke Nishida / Roger While
Built    May 29 2013 21:53:19
Packaged Feb 06 2009 10:30:55 CET

Sadly, I don't get to do much COBOL. The best I can do is the occasional RosettaCode task.

I was looking at <http://rosettacode.org/wiki/Loops/Break#COBOL>. I copied and pasted into a text editor, made it free-form, and started to fiddle.

I've got as far as this:
IDENTIFICATION DIVISION.
PROGRAM-ID. Random-Nums.

DATA DIVISION.
WORKING-STORAGE SECTION.
01    Num  PIC Z9.
01    SEED PIC 9V999999999.
PROCEDURE DIVISION.
Main.
    MOVE FUNCTION RANDOM(FUNCTION SECONDS-PAST-MIDNIGHT) TO SEED.
    PERFORM FOREVER
        PERFORM Generate-And-Display-Num

        IF Num = 10
            EXIT PERFORM
        ELSE
            PERFORM Generate-And-Display-Num
        END-IF
    END-PERFORM

    GOBACK
    .

Generate-And-Display-Num.
   COMPUTE Num =  FUNCTION REM(FUNCTION RANDOM * 100, 20)
   DISPLAY Num
   .
   END-PROGRAM.
The END-PROGRAM seemed to be mandatory. I wouldn't compile otherwise.

The thing that has me confused (and thus all the fiddling with RANDOM) is that the program runs properly occasionally, and other time just gets locked on a particular value and doesn't change.

A working runs looks like this:
$ breakloop.exe
23
67
23
21
67
18
14
17
27
11
16
25
29
26
12
23
90
27
14
20
30
29
10

but another run starts off nicely, but then gets stuck
$ breakloop.exe
25
18
29
80
14
16
26
24
26
36
18
29
54
47
29
29
29
... ad infinitum
Why is it so?

Kind regards,
Bruce.


------------------------------------------------------------------------------
Introducing AppDynamics Lite, a free troubleshooting tool for Java/.NET
Get 100% visibility into your production application - at no cost.
Code-level diagnostics for performance bottlenecks with <2% overhead
Download for free and get started troubleshooting in minutes.
http://p.sf.net/sfu/appdyn_d2d_ap1
_______________________________________________
open-cobol-list mailing list
address@hidden
https://lists.sourceforge.net/lists/listinfo/open-cobol-list



reply via email to

[Prev in Thread] Current Thread [Next in Thread]