我试图创建一个随机数字发生器(从中随机数字稍后将被转换成[A-Z]字符)。我有随机发生器的主要部分工作,但我不断收到相同的随机结果0.6734141422
。随机函数总是返回相同的结果,尽管不同的种子
我正面临着另一个问题:我的程序编译速度过快一半。由于我以毫秒为单位使用当前日期,所以让我的程序快速编译将意味着RANDOM
函数会使用相同的种子。我一直在考虑简单地添加一个计数器,它会将每个种子的计数器分配到RANDOM
之前。这是否足够,还是有更多优雅的解决方案?
有人可以向我解释为什么我总是收到相同的随机结果,即使应用不同的种子值?每次执行程序时我都会得到这个结果。
我正在使用PerCobol编译器,就像我读过的那样,它与OpenCobol一致。
综上所述:
- 我应该如何克服等于种子队?
为什么我用不同的种子接收相同的随机结果?
000100 IDENTIFICATION DIVISION. 000200 PROGRAM-ID. RandomTest. ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. 01 RANDOMRESULT PIC S9V9(10). 01 WS-CURRENT-DATE-DATA. 05 WS-CURRENT-DATE. 10 WS-CURRENT-YEAR PIC 9(04). 10 WS-CURRENT-MONTH PIC 9(02). 10 WS-CURRENT-DAY PIC 9(02). 05 WS-CURRENT-TIME. 10 WS-CURRENT-HOURS PIC 9(02). 10 WS-CURRENT-MINUTE PIC 9(02). 10 WS-CURRENT-SECOND PIC 9(02). 10 WS-CURRENT-MILLISECONDS COMP-2. 05 WS-DIFF-FROM-GMT PIC S9(04). PROCEDURE DIVISION. PRGRM. PERFORM 4 TIMES MOVE FUNCTION CURRENT-DATE TO WS-CURRENT-DATE-DATA COMPUTE RANDOMRESULT = FUNCTION RANDOM (WS-CURRENT-MILLISECONDS) DISPLAY "Seed value: " WS-CURRENT-MILLISECONDS UPON SYSOUT DISPLAY "Random result: " RANDOMRESULT UPON SYSOUT END-PERFORM STOP RUN.
输出示例:
Seed value: 8.222829361429599E-67
Random result: 0.6734141422
Seed value: 8.964670591567083E-67
Random result: 0.6734141422
Seed value: 9.335591206635825E-67
Random result: 0.6734141422
Seed value: 9.335591206635825E-67
Random result: 0.6734141422
如果你对我的接近原来的问题(包括创建的字母数字字符的随机密码)的建议,我会很高兴听到它好。
编辑: 通过省略种子,这两个问题都立即修复。更多背后的结论可以在下面的评论中找到。如果有人解释为什么不同的种子仍然具有相同的价值,我很乐意听到它!
谢谢,清除它! – 2013-03-04 21:52:46