2010年6月5日土曜日

srand = 乱数の種を設定する - AWK

AWKの数値計算関数と関連機能
AWKの時刻取得関数と関連機能
○Gawk on Windows ○Gawk ○mawk32 ○Mawk ○(注記あり)awk
乱数の種を設定します。

o 呼び出し方を工夫すると、systimeに相当する経過秒数を取得する事が出来ます。
o 移植性を高めたい時は、種を指定する時、整数のみにします。


**** 書式
--------
srand( [種にする値] )
--------

o 種にする値 -- 乱数の種にしたい値。省略も可能です。
   + 指定が無いと、現在時刻(秒単位)を元に種を設定します。
   + 指定する時は、整数がおすすめです。
   + 整数しか種にならない処理系があるからです。(Gawk系)
o 戻り値 -- 前回の種(Gawk, mawk)、もしくは今回の種(awk)
   + 戻ってくるのは、実際に種として使った値です。渡した値とは限りません。


**** 使用例
--------
BEGIN {
  srand(); # 乱数の種を設定します。引数を指定しない時、種は現在時刻(秒まで)。
  print rand(); # 乱数その1
  print rand(); # 乱数その2

  print "# 以下、引数を指定した時の書き方です。";
  srand(3939); # 整数
  srand(39.39); # Gawkでは整数部分のみ有効。mawkは有効。
  srand("aaa39.39"); # Gawkでは0になります。mawkは有効。
}
--------

o 行末のセミコロンは、C言語の書き方に合わせました。無くても動きます。


**** 機能
o randで乱数を求める時に使う「種」を設定します。
o 種として使う事の出来る値は、実装毎に異なります。
   + srandで同じ種を設定すると、randは、プログラムを実行する度に同じ値を返します。
o 後ろに文字列が入っていても大丈夫です。
o srandを引数無しで呼び出す場合、特定日時からの経過秒数を自動設定します。
   + ですから、srandを複数回呼び出す場合、秒が進むまでの間は同じ種が設定されます。

** 処理系に依存するかもしれない動作
o 引数無しで呼び出した時、設定される種はsystimeに相当する経過秒数です。
o srandを2回連続で呼び出すと、AWKの種類に依存せずに、現在の時刻に当たる数値(= 経過秒数 = Unix time)を取り出す事が出来ます。

** 処理系に依存する動作
o 戻り値は、オリジナル(the one true awk)と、「Gawk, mawk」で異なります。
   + オリジナル(the one true awk)の場合、今回設定した種
   + mawk, Gawkの場合、前回設定した種
o この他に、種に出来る値も、実装毎に異なっています。
o Gawk系の場合(Gawk on Windows 3.1.7, Gawk for Windows 3.1.6)
   + 整数のみ種にする事が出来ます。
   + 実数を指定すると、整数部分を種にします。
   + 文字列を指定すると、0の指定と同じになります。
o mawk系の場合(mawk MBCS (32bit版) 1.3.3, Mawk for Windows 1.3.3)
   + 数値(整数や実数)や文字列を種にする事が出来ます。
o オリジナルの場合(the one true awk(updated May 1, 2007))
   + 数値(整数や実数)を種にする事が出来ます。
   + 文字列を指定すると、0の指定と同じになります。


**** 確認した処理系
o Gawk on Windows 3.1.7
o Gawk for Windows 3.1.6
o mawk MBCS (32bit版) 1.3.3
o Mawk for Windows 1.3.3
o original = the one true awk(updated May 1, 2007) -- 戻すのは今回の種


==
関連ページ:
    ▼AWKの数値計算関数と関連機能▼ABC順
    ▼AWKの時刻取得関数と関連機能▼ABC順
    ▼AWKプログラムを書く▼ABC順
    ▼AWK
    ▼制作メモ
    > and = AND演算する。整数をビット毎に論理積(Gawk専用)
    or = OR演算する。整数をビット毎に論理和(Gawk専用)
    > strftime = 時刻を文字列に変換する(Gawk, mawk32専用)
    +
    rand = 乱数を求める
    ツール。systime関数とsrand関数の戻り値予想(Unix time)
(2010年6月12日追加。オリジナルawkなどの動作)