我猜你正在使用, mawk
none of或有这种行为,不支持除以零。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
(虽然这没有记录,但它可能不是你应该依赖的东西)。