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などの動作)

rand = 乱数を求める - AWK

AWKの数値計算関数と関連機能
○(開始時に注意)Gawk on Windows ○(開始時に注意)Gawk ○mawk32 ○Mawk ○awk
乱数を求めます。(擬似乱数です。)
移植性を高めたい時は、randを初使用する前に、srandを呼び出します。

**** 書式
--------
rand()
--------

o 戻り値 -- 擬似乱数。0以上1未満。但し、0は含まないかもしれません。


**** 使用例
--------
BEGIN {
  srand(); # 乱数の種を設定します。
  print rand(); # 乱数その1
  print rand(); # 乱数その2
}
--------

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


**** 機能
o 乱数を求めます。完全な乱数ではなく、同じ条件では同じ値を返します。
o srandで種を指定すると、その種に従って擬似乱数を作ります。
o Gawkで動作させたい方は、下記 = 実装依存の動作もご覧下さい。

** 処理系に依存するかもしれない動作
o Gawk on Windows 3.1.7 の場合、戻り値に0を含まないみたいです。
o mawk MBCS (32bit版) 1.3.3の場合、戻り値には 0を含みません。

** 処理系に依存する動作
o Gawk系の場合、最初の種は固定値です。(= 1みたいです。)
   + 確認したのは、Gawk on Windows 3.1.7 と Gawk for Windows 3.1.6です。
   + srandを呼び出さずに randを呼び出すと、プログラムを実行する度に同じ値を返します。
o mawk系とオリジナルでは、srandを事前に呼び出さなくても、プログラムを実行する度に違う値を返します。
   + 確認したのは、mawk MBCS (32bit版) 1.3.3、Mawk for Windows 1.3.3、the one true awk(updated May 1, 2007)です。
   + randを初めて使う前に、srandを呼び出しているみたいです。


**** 確認した処理系
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
    ▼制作メモ
    > srand = 乱数の種を設定する
    and = AND演算する。整数をビット毎に論理積(Gawk専用)
    or = OR演算する。整数をビット毎に論理和(Gawk専用)
(2010年6月12日追加。オリジナルawkなどの動作)

sqrt = 平方根を求める - AWK

AWKの数値計算関数と関連機能
○Gawk on Windows ○Gawk △(強制終了あり)mawk32 ○Mawk △(注記あり)awk
平方根を求めます。

**** 書式
--------
sqrt( 調べたい値 )
--------

o 調べたい値 -- 正の数値(n >= 0)。文字列で指定する事も出来ます(例:"39.39だよ")。
o 戻り値 -- 結果


**** 使用例
--------
BEGIN {
  print sqrt(3); # 1.73205

  print "# 以下、計算結果の確認です。";
  print sqrt("          39"); # 6.245
  print sqrt("39aaa"); # 6.245
  print sqrt("aaa39"); # 0
}
--------

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


**** 機能
o 数値であると解釈して、平方根を求めます。
o 負の値を指定した時、処理系によって動作が異なります。

o 数値は、文字列の形で指定する事も出来ます。
o 数値の後ろに文字列が続いていても、大丈夫です。
o 先頭に数値以外の文字がある場合
   + 半角空白は読み飛ばします。
   + それ以外の文字があると、0 だと解釈します。

** 処理系に依存する動作
o 負の値を指定すると、例外(mawk MBCS (32bit版) 1.3.3)を除いて、計算不能値(NaN相当の値)を返します。
   + Gawk on Windows 3.1.7の表示は「-1.#IND」。
   + Gawk for Windows 3.1.6の表示は「NaN」
   + mawk MBCS (32bit版) 1.3.3の場合、エラーメッセージを出して終了します。
   + Mawk for Windows 1.3.3の表示は「-2147483647」。表示は整数ですが、内部の値は計算不能値です。
   + original = the one true awk(updated May 1, 2007)の表示は「-1.#IND」。但し、負の値で連続呼び出しすると、2回目以降、1回置きに 1を返しました。


**** 確認した処理系
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
    ▼制作メモ
    > sin = 正弦を求める
    cos = 余弦を求める
    atan2 = 逆正接(arctan = アークタンジェント)を求める
(2010年6月18日追加。実装依存の動作)
(2010年6月12日追加。オリジナルawkなどの動作)

AWKの関数、変数、制御文(目的別) - AWK

AWKプログラムを書く
o 組み込み関数と関連機能
▼数値計算
▼文字列操作
▼時刻取得
▼入出力とコマンド実行
▼インターネット接続(Gawk専用)
▼国際化対応 i18n(Gawk専用)

o その他の機能
▼パターンと制御文
▼配列操作
▼正規表現

o 公式マニュアル
Gawkの操作説明書(マニュアル)をオンラインで見る方法
mawkの操作説明書(マニュアル)をオンラインで見る方法
--------
o 新しい発見がありましたら、随時更新する予定です。


**** 未調査の機能について
o 以下の機能につきましては、まだメモを書いていません。
o 興味のある方は、Gawkのマニュアルや他の方のページをご覧下さい。
    + 演算子の優先順位
    + 正規表現(執筆中)
    + Gawk のインターネット対応の内、Windows版で確認出来なかった機能
    + Gawk の国際化対応(i18n)の内、Windows版で確認出来なかった機能
    + Gawk 4の新機能


==
関連ページ:
    ▼AWKプログラムを書く
    ▼AWKプログラムを動かす
    ▼AWK
    ▼制作メモ
    > ▼AWKの関数、変数、制御文(ABC順)