-PR-
締切済み

ランダム関数を作りたい。

  • すぐに回答を!
  • 質問No.22004
  • 閲覧数2560
  • ありがとう数3
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 0% (0/3)

COBOLでランダム関数を自作したいのですが、
いろいろWEBで調べましたが、なかなか見つかりません
アルゴリズムを教えてください。
ちなみに動作するOSはOS/400です。
Cコンパイラーはありません。
通報する
  • 回答数3
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

回答 (全3件)

  • 回答No.1
レベル8

ベストアンサー率 20% (11/53)

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


  • 回答No.2
レベル11

ベストアンサー率 55% (155/280)

COBOLは知らないですが、乱数のアルゴリズムさえわかればいいで しょうか? 非常に単純な乱数のアルゴリズムとしては、C言語の rand() 関数 で使われている線形合同法があります。 基本的には、next という変数を用意して 1 などに初期化しておき、 rand() 関数が呼ばれるごとに next = next * 1103515245 + 12345 を実行し、乱数の最大値を ...続きを読む
COBOLは知らないですが、乱数のアルゴリズムさえわかればいいで
しょうか?

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

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

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

さらに質のいい乱数が必要なら、「M系列」をキーワードに検索し
てみてください。
  • 回答No.3
レベル8

ベストアンサー率 35% (7/20)

以下の手法はどうでしょうか? 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(添字)を乱数とする。 非 ...続きを読む
以下の手法はどうでしょうか?
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 カードを使えば更に複雑な事ができると思います。
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


新大学生・新社会人のパソコンの悩みを解決!

いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ