2010年6月6日日曜日

atan2 = 逆正接を求める - AWK

AWKの数値計算関数と関連機能 ▲
○Gawk on Windows ○Gawk ○mawk32 ○Mawk ○awk
逆正接(arctan = 三角関数のアークタンジェント)を求めます。
(平面座標の2つの値(y, x)を指定して、角度を求めます。)

**** 書式
--------
atan2( y座標の値, x座標の値 )
--------

指定する 2つの値の単位は、同じであれば何でも OKです。
o y -- 数値。文字列を指定する事も出来ます(例:"39.39だよ")。
o x -- 数値。文字列を指定する事も出来ます(例:"39.39だよ")。
o 戻り値 -- 計算結果。角度です。(単位はラジアン)


**** 使用例
--------
BEGIN {
  print atan2(3,9); # 0.321751

  print "# 以下、計算結果の確認です。";
  print atan2(3.3, 9.9); # 0.321751
  print atan2("          3","          9"); # 0.321751
  print atan2("3aaa","9aaa"); # 0.321751
  print atan2("aaa3", "aaa9"); # 0
}
--------

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


**** 機能
o 数値であると解釈して、逆正接を求めます。計算結果の値の単位はラジアンです。
o 計算結果が0となる辺りでは、誤差が上位桁に登場します。乗算などを行う時は要注意です。

o 数値は、文字列の形で指定する事も出来ます。
o 数値の後ろに文字列が続いていても、大丈夫です。
o 先頭に数値以外の文字がある場合
   + 半角空白は読み飛ばします。
   + それ以外の文字があると、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
    ▼制作メモ
    > ラジアンの意味
    log = 自然対数(ln)を求める
    exp = 指数関数を求める
    +
    sin = 正弦を求める
    cos = 余弦を求める
(2010年6月12日追加。オリジナルawkなどの動作)

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

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

AWKの数値計算関数と関連機能 - AWK

AWKの関数、変数、制御文 ▲
**** 数値計算の手引き
数値計算関数使用時の注意点まとめ
数値から文字列にする時に、実数を7桁以上表示させる方法
AWKプログラムの中で、8進数や16進数を使う方法
    + 配列操作は、「▼AWKの配列操作関数と関連機能」


**** 組み込み関数
o 基本
int = 実数や文字列を整数化する
strtonum = 10進数、8進数、16進数の文字列を数値に変換する(Gawk専用)
sqrt = 平方根を求める

o 三角関数
sin = 正弦を求める
cos = 余弦を求める
atan2 = 逆正接(arctan = アークタンジェント)を求める
  ラジアンの意味

o 指数と対数
log = 自然対数(ln)を求める
exp = 指数関数を求める

o 乱数
rand = 乱数を求める(擬似乱数)
srand = 乱数の種を設定する

o ビット操作
and = AND演算する。整数をビット毎に論理積(Gawk専用)
or = OR演算する。整数をビット毎に論理和(Gawk専用)
xor = XOR演算する。整数をビット毎に排他的論理和(Gawk専用)
compl = NOT演算する。整数の1の補数(Gawk専用)
lshift = 整数を左にビットシフトする(Gawk専用)
rshift = 整数を右にビットシフトする(Gawk専用)


**** 関係する変数
o 文字列にする時に使う値
OFMT = 数値から文字列への自動変換に使う書式その1。数値1つだけの時
CONVFMT = 数値から文字列への自動変換に使う書式その2。数値と文字列を結合する時


**** 関係する演算子
o 算術
+   = 加算
-   = 減算
*   = 乗算
/   = 除算(3/4 = 0.75)
%   = 剰余(割った余り)
^   = 累乗(= べき乗。2^3 = 2 * 2 * 2 = 8)
   + 「^」キーは、キーボードの右上にあります。数字の「0」キーの2つ右。

o 代入
=   = 代入
+=  = 加算して代入。(x += 39) の意味は (x = x + 39)
-=  = 減算して代入。(x -= 39) の意味は (x = x - 39)
*=  = 乗算して代入。(x *= 39) の意味は (x = x * 39)
/=  = 除算して代入。(x /= 39) の意味は (x = x / 39)
%=  = 剰余を求めて代入。(x %= 39) の意味は (x = x % 39)
^=  = 累乗して代入。(x ^= 39) の意味は (x = x ^ 39)
++  = 1を加算。++の位置で意味が変わります。
    + (y = ++x)の意味は、(y = (++x))
    + (y = x++)の意味は、(y = x; ++x)
--  = 1を減算。--の位置で意味が変わります。
    + (y = --x)の意味は、(y = (--x))
    + (y = x--)の意味は、(y = x; --x)

o 比較
==  = 等しい時に真。比較の時は、等号を2つ並べます。
!=  = 等しくない時に真
>   = 左辺よりも大きい時に真
>=  = 左辺よりも大きいか、等しい時に真
<   = 左辺よりも小さい時に真
<=  = 左辺よりも小さいか、等しい時に真
o この他に、文字列として比較する事も出来ます。但し、使い方によっては、有効桁が6桁程度に減るかもしれません。

o 条件演算
?:  = A ? B : Cの形。条件Aによって、どちらか1つの値を取ります。

数値計算機能サポート状況
名前Gawk on
Windows
3.1.7
Gawk for
Windows
3.1.6
mawk32
1.3.3
Mawk for
Windows
1.3.3
awk
(May 1,
2007)
説明
基本  
int○○○○○実数や文字列を整数化する
strtonum○○×××10進数、8進数、16進数の文字列を数値に変換する
sqrt○○△
(強制
終了
あり)
○△
(注記
あり)
平方根を求める
三角関数  
sin○○○○○正弦を求める
cos○○○○○余弦を求める
atan2○○○○○逆正接を求める
指数と対数  
log○○
(注記
あり)
△
(強制
終了
あり)
△
(強制
終了
あり)
△
(注記
あり)
自然対数(ln)を求める
exp△
(注記
あり)
△
(注記
あり)
△
(強制
終了
あり)
○○指数関数を求める
乱数  
rand○
(開始時
に注意)
○
(開始時
に注意)
○○○乱数を求める
srand○○○○○
(注記
あり)
乱数の種を設定する
ビット操作  
and○○×××AND演算する。整数をビット毎に論理積
or○○×××OR演算する。整数をビット毎に論理和
xor○○×××XOR演算する。整数をビット毎に排他的論理和
compl○△
(注記
あり)
×××NOT演算する。整数の1の補数
lshift○○
(注記
あり)
×××整数を左にビットシフトする
rshift○○×××整数を右にビットシフトする
変数。文字列にする時に使う値 
OFMT○○○○○printを使って数値1つだけを書き出す時の書式
CONVFMT○○○○○数値を文字列に自動変換する時の書式


==
関連ページ:
    ▼AWKの関数、変数、制御文(▼ABC順)
    ▼AWKプログラムを書く
    ▼AWK
    ▼制作メモ
    > ▼AWKの文字列操作関数と関連機能
    ▼AWKの時刻取得関数と関連機能
    ▼AWKの入出力関数とコマンド実行機能
    +
    ▼AWKの配列操作関数と関連機能
    ▼AWKのパターンと制御文