2010年6月6日日曜日

log = 自然対数(ln)を求める - AWK

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

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

o 調べたい値 -- 正の数値(n > 0)。文字列を指定する事も出来ます(例:"39.39だよ")。
o 戻り値 -- 計算結果。自然対数(ln = eを底とする対数)の値


**** 使用例
--------
BEGIN {
  print log(10); # 2.30259

  print "# 以下、計算結果の確認です。";
  print log(1); # 0
  print log(0.01); # -4.60517
  print log("0.01aaa"); # -4.60517
  print log("          0.01"); # -4.60517
##   print log("aaa0.01"); # -∞ or error
##   print log(0); # -∞ or error
}
--------

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


**** 機能
o 数値であると解釈して、自然対数を求めます。
   + 関数電卓の「log」とは異なります。「ln」に相当する機能です。
o 0や負の値を指定した時、処理系によって動作が異なります。

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

** 処理系に依存する動作
o 正の数字を指定する時、小数点以下 0が300個から400個並んだ辺りで、値が0扱いとなります。
o 0や、0扱いとなる小さな値を指定すると、mawk系以外は、負の無限大を返します。
   + Gawk for Windows 3.1.6 の場合
     + 表示結果は(正の?)無限大になります。(表示は「Infinity」)。内部の値は、負の無限大です。
   + mawk系の場合(mawk MBCS (32bit版) 1.3.3、Mawk for Windows 1.3.3)
     + エラーメッセージを出して終了します。
   + その他の場合(Gawk on Windows 3.1.7、original = the one true awk(updated May 1, 2007))
     + 表示結果も値も、負の無限大となります。(表示は「-1.#INF」)
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系の場合、負の無限大の値は、 ("-inf" + 0) (= Gawk拡張表現)と比較出来ます = 一致します。


**** 確認した処理系
o Gawk on Windows 3.1.7
o Gawk for Windows 3.1.6 -- 0指定時、表示結果のみ正の無限大になる(ように見える)
o mawk MBCS (32bit版) 1.3.3 -- 強制終了あり(0付近と負の値)
o Mawk for Windows 1.3.3 -- 強制終了あり(0付近)
o original = the one true awk(updated May 1, 2007) -- 負の値を指定しての連続呼び出しで不正値を返す


==
関連ページ:
    ▼AWKの数値計算関数と関連機能▼ABC順
    ▼AWKプログラムを書く▼ABC順
    ▼AWK
    ▼制作メモ
    > exp = 指数関数を求める
    rand = 乱数を求める(擬似乱数)
    srand = 乱数の種を設定する
(2010年6月18日追加。オリジナルawkなどの動作)