数値計算関数使用時の注意点まとめ - AWK
**** 処理系共通の注意点o 表示する値の精度は、処理系によって異なります。でも、内部的には同じ精度になっているみたいです。
+ 表示の桁数が少ない時は、printfやsprintfなどを使って、書式付きで値を表示してみます。
o 計算結果が 0に近い時、計算誤差が上位桁に上ってきている事があります。
+ 必要に応じて、計算結果を丸めたり、計算方法を工夫します。
o 数値比較などの場面で、値を文字列だと認識されてしまった時は、値の後ろに「 + 0」を追加すると数値化出来ます。
o この他、数値計算そのものには関係がありませんが、有効数字7桁以上を扱う場合、数値の表示桁数を伸ばしておくと、ストレスが溜まりません。
+ 例えば、数値の最大表示桁数(及び、文字列に自動変換する時の最大桁数)を10桁に変更する場合
--------
BEGIN {
OFMT = "%.10g";
CONVFMT = "%.10g";
(以下、必要な処理)
}
--------
+ 詳しくは、「数値から文字列にする時に、実数を7桁以上表示させる方法」
+ なお、AWKの数値計算時の有効数字は、最大15桁程度です(= 32ビットOS用にコンパイルした場合)。それよりも長く表示させても、あまり意味がありません。
**** 特定の処理系に関する注意点
** Gawk系特有の動作
o 一部の関数を呼び出す時、注意点があります。(exp / rand)
o srand関数で種を指定すると、整数部分だけ使います。
** mawk系特有の動作
o 有効範囲外の値について、関数呼び出し前のチェックが必要になる事があります。
+ 「有効範囲の限界に近い値」や「想定外の値」が入ると、AWKプログラムを強制終了する関数がありました。(log。mawk MBCS (32bit版) 1.3.3の場合は、次の関数も追加。sqrt / exp)
** オリジナルAWK特有の動作
o 不正な値を指定して連続で呼び出すと、返す値が変わる関数がありますので、注意します(sqrt / log)。
o この他、srand関数の戻り値が、他の処理系と異なります。
==
関連ページ:
▼AWKの数値計算関数と関連機能(▼ABC順)
▼AWKプログラムを書く(▼ABC順)
▼AWK
▼制作メモ
> 数値から文字列にする時に、実数を7桁以上表示させる方法
AWKプログラムの中で、8進数や16進数を使う方法
int = 実数や文字列を整数化する
+
配列を使う時の注意点まとめ
(2010年8月18日追加。数値の表示桁数を増やす方法)
(2010年6月22日追加。オリジナルAWKで値が変化する条件)