COBOLでランダム関数を自作したいのですが、
いろいろWEBで調べましたが、なかなか見つかりません
アルゴリズムを教えてください。
ちなみに動作するOSはOS/400です。
Cコンパイラーはありません。

A 回答 (3件)

以下の手法はどうでしょうか?


01 time-a.
 03 hh pic 9(2).
 03 mm pic 9(2).
 03 ss pic 9(2).
01 tbl.
 03 tbl-a pic x(3) occurs 100.

accept timeで時間を取得し、time-aにmove
その時間をもとにテーブルの添字の値を決定し、
テーブルtbl-a(添字)を乱数とする。
非常に簡単ですが、JOB実行時間によって内容が変化します。
COBOLでは確か乱数関数はなかったと思います。
(私も一度作ろうとして探したが、そんな関数は見つからなかった記憶がある)
sysin カードを使えば更に複雑な事ができると思います。
    • good
    • 0

COBOLは知らないですが、乱数のアルゴリズムさえわかればいいで


しょうか?

非常に単純な乱数のアルゴリズムとしては、C言語の rand() 関数
で使われている線形合同法があります。

基本的には、next という変数を用意して 1 などに初期化しておき、
rand() 関数が呼ばれるごとに
next = next * 1103515245 + 12345
を実行し、乱数の最大値を MAX として next を (MAX+1) で割った
余りを返せば、0~MAXまでの乱数が得られます。定数の値はこれに
限らないと思いますが、一般的には、この式が使われているようで
す。

ただし、線形合同法は、下位ビットほど乱数としての性質が悪いの
で、余りではなく上位ビットを使うように除算した方がいいです。
つまり、N通りの乱数がほしければ、rand() の結果を N 倍して
(MAX+1) で割るなどする方がいいとされています。(単純に
rand() を N 倍して、整数の範囲を超えないように注意)

さらに質のいい乱数が必要なら、「M系列」をキーワードに検索し
てみてください。
    • good
    • 0

それほど良質な乱数が必要なわけでは無いようなので,古典的な線形合同法で良いのではないでしょうか.

    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

今、見られている記事はコレ!

おしトピ編集部からのゆる~い質問を出題中

お題をもっとみる

このQ&Aを見た人が検索しているワード


このカテゴリの人気Q&Aランキング

おすすめ情報

カテゴリ