mawk
を使用している、 を使用していないawk
、nawk
またはこの動作をしていると思いますgawk
。これらではゼロ除算はサポートされていません。
あなたの答えは+inf
、正の無限大、nan
「数ではない」、および-inf
負の無限大であり、すべて期待どおりです。これらは、 floatを出力する場合にのみ出力されます。つまり、%.6g
これがデフォルトですOFMT
(数値の出力に使用されるデフォルトの形式)。
$ mawk 'BEGIN {printf ("%i\n", 1/0) }'
2147483647
$ mawk 'BEGIN {printf ("%f\n", 1/0) }'
inf
$ gawk 'BEGIN {printf ("%f\n", 1/0) }'
gawk: fatal: division by zero attempted
「%i」で明示的に印刷すると、代わりに +HUGE または -HUGE が得られます。これは int (この場合は 32 ビット符号付き) に変換され、+ または - (2^31-1) として印刷されます。
通常は常にゼロ除算をチェックし、理想的には式を再編成してチェックする回数を最小限に抑えることです。ゼロ除算は awk の他の実装を単純に終了させます。
ビルド時mawk
に、C 数学ライブラリの機能が検出されます。
$ ./configure
[...]
checking handling of floating point exceptions
division by zero does not generate an exception
overflow does not generate an exception
math library supports ieee754
NOINFO_SIGFPE
以下を定義してビルドすると、「標準」の動作を得ることができます。
$ ./configure CFLAGS="-DNOINFO_SIGFPE"
$ make clean && make
$ ./mawk 'BEGIN {printf ("%f\n", 1/0) }'
mawk: run time error: division by zero
FILENAME="" FNR=0 NR=0
(これは文書化されていませんが、信頼できるものではないかもしれません)。