深入了解gawk:浮点运算、任意精度整数运算及扩展编写
1. 浮点运算中的舍入模式
在进行浮点运算时,舍入模式是一个关键因素。如果系统的C库在使用printf处理中间值时未采用IEEE 754的偶数舍入规则,输出结果可能会截然不同。
ROUNDMODE变量可对程序的舍入模式进行控制。它与IEEE舍入模式的对应关系如下表所示:
| 舍入模式 | IEEE名称 | ROUNDMODE |
| — | — | — |
| 四舍五入,中间值取偶数 | roundTiesToEven | “N” 或 “n” |
| 向正无穷舍入 | roundTowardPositive | “U” 或 “u” |
| 向负无穷舍入 | roundTowardNegative | “D” 或 “d” |
| 向零舍入 | roundTowardZero | “Z” 或 “z” |
| 四舍五入,中间值远离零 | roundTiesToAway | “A” 或 “a” |
ROUNDMODE的默认值为 “N”,即选择了IEEE 754的roundTiesToEven舍入模式。需要注意的是,”A” 对应的roundTiesToAway模式仅在MPFR库支持时可用,否则设置无效。
默认的roundTiesToEven模式虽最受推荐,但却不太直观。对于大多数数值,它会将其舍入到最接近的数字。例如,将1.132舍入到两位小数得到1