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: Hiroki MINEMATSU
Subject: Re: [open-cobol-list] RANDOM-ly non-random
Date: Fri, 31 May 2013 11:38:23 +0900
User-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130509 Thunderbird/17.0.6

Hello, Bruce

OpenCOBOL RANDOM returned biased value.

It is look like conacatinate '0.' and int(rand()*(2**32)) .

so, you execute this.

perl -e '$a = 0; for (1..1000) {$p = int(rand() * (2 ** 31)) ;$a +=
"0.".$p; }; print $a ;print "\n";'

it will show about 347 instead of 500.

Since it is wrong, we have to correct libcob.so.


(2013/05/30 23:30), Bruce M. Axtens wrote:
> 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
> 


-- 
峰松 浩樹    有限会社ランカードコム
850-0057 長崎県長崎市大黒町11番13号
TEL: 095-840-0021 FAX: 095-895-7869


reply via email to

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