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×××整数を右にビットシフトする
変数。文字列にする時に使う値 
OFMTprintを使って数値1つだけを書き出す時の書式
CONVFMT数値を文字列に自動変換する時の書式


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