2010年6月6日日曜日

exp = 指数関数を求める - AWK

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

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

o 調べたい値 -- 数値。文字列を指定する事も出来ます(例:"3.9だよ")。
o 戻り値 -- 計算結果。eを底とする指数関数の値


**** 使用例
--------
BEGIN {
  print exp(10);

  print "# 以下、計算結果の確認です。";
  print exp(1);
  print exp(0.01);
  print exp("0.01aaa");
  print exp("          0.01");
  print exp("aaa0.01"); # 1
  print exp(0); # 1
  print exp(-10); # アンダーフローのテストです。
  print exp(-700);
  print exp(-750); # 0
  print exp(10); # オーバーフローのテストです。
  print exp(709); #
##   print exp(710); # error
}
--------

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


**** 機能
o 数値であると解釈して、eを底とする指数関数の値を求めます。

o 実装の精度を超える、大きな値を指定すると、エラーメッセージを出します。
o 実装の精度を超える、小さな値を指定すると、計算結果が 0 になります。
o 計算結果が0近くになるような使い方をする時には、計算誤差に要注意です。
   + この時、誤差が上位の位に含まれているかもしれません。

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

** 処理系に依存する動作
o 指定する値が709を超えた辺りで、オーバーフローを起こします。
   + Gawk on Windows 3.1.7の表示は「1」。表示は変ですが、内部の値は正の無限大でした。
   + Gawk for Windows 3.1.6の表示は「Infinity」
   + mawk MBCS (32bit版) 1.3.3の場合、エラーメッセージを出して終了します。
   + Mawk for Windows 1.3.3の表示は「1.#INF」
   + original = the one true awk(updated May 1, 2007)の表示は「1.#INF」
o 指定する値が-700から-750の間辺りで、実質0になります。
   + Gawk系(gawk on Windows 3.1.7、Gawk for Windows 3.1.6)の場合、値は0なのですが、("inf" + 0)(= 正の無限大)と比較すると真になりますので、ご注意下さい。
      + 原因は、("inf" + 0)の書き方にあると推測しましたが、気になりましたので、メモしました。


**** 確認した処理系
o Gawk on Windows 3.1.7 -- 実質0の時、正の無限大と比較すると真。オーバーフロー時、表示と内部の値が合わない
o Gawk for Windows 3.1.6 -- 実質0の時、正の無限大と比較すると真
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
    ▼制作メモ
    > rand = 乱数を求める
    srand = 乱数の種を設定する
    and = AND演算する。整数をビット毎に論理積(Gawk専用)
    +
    log = 自然対数(ln)を求める
(2010年8月17日追加。"inf"+0表記について)
(2010年8月13日削除。機能説明に混入していたlogの説明を削除)
(2010年6月19日追加。オリジナルawkなどの動作)