diff --git a/18-microarch.Rmd b/18-microarch.Rmd index 67bfc04..192361e 100644 --- a/18-microarch.Rmd +++ b/18-microarch.Rmd @@ -157,23 +157,23 @@ align(i = NULL, j = NULL, align = "center", part = "all") %>% autofit() ``` -(1)无穷大:阶码全1尾数全0 +(1)无穷大(阶码全1尾数全0) 引入无穷大是为了在出现浮点计算异常时保证程序能够继续执行下去,同时也为程序提供一种检测错误的途径。$+\infty$在数值上大于所有有限浮点数,$-\infty$在数值上小于所有有限浮点数。无穷大不仅可以是运算的结果,也可以作为运算的源操作数。当无穷大作为源操作数时,根据IEEE 754标准规定,可以得到无穷大或非数的结果。 -(2)非数(NaN):阶码全1尾数非0 +(2)非数(阶码全1尾数非0) 非数(NaN)表示一个没有定义的数。引入非数的目的是检测非初始化值的使用,而且在计算出现异常时程序能够继续执行下去。非数根据尾数的内容又可以分为发信号非数(Signaling NaN)和不发信号非数(Quiet NaN)两种。如果源操作数是Quiet NaN,则运算结果还是Quiet NaN;如果源操作数是Signaling NaN,则会触发浮点异常。 -(3)规格化非0数:阶码非全0非全1 +(3)规格化非0数(阶码非全0非全1) 阶码e的值落在[1, 254](单精度)和[1, 2046](双精度)范围内且尾数f是非0值的浮点数是规格化的非0数。其尾数经过规格化处理,最高位的1被省略,因此如果符号位是0,则表示数值为$1.f\times 2^{e-127}$(单精度)和$1.f\times 2^{e-1023}$(双精度);如果符号位是1,则表示数值为$-1.f\times 2^{e-127}$(单精度)和$-1.f\times 2^{e-1023}$(双精度)。 -(4)非规格化非0数:阶码全0尾数非0 +(4)非规格化非0数(阶码全0尾数非0) 在规格化非0数中,能表示的浮点数的最小阶值是-126(单精度)和-1022(双精度),如果浮点数的绝对值小于$1.0\times 2^{-126}$(单精度)和$1.0\times 2^{-1022}$(双精度),该如何表示呢?IEEE 754允许特别小的非规格化数,此时阶码为0,尾数的小数点前面的那个1就不再添加了。因此如果符号位是0,则表示数值为$0.f\times 2^{-126}$(单精度)和$0.f\times 2^{-1022}$(双精度);如果符号位是1,则表示数值为$-0.f\times 2^{-126}$(单精度)和$-0.f\times 2^{-1022}$(双精度)。非规格化数填补了最小的规格化数和0之间的一段空隙,使得浮点数值可表示的精度进一步提升了很多。 -(5)零:阶码全0尾数全0 +(5)零(阶码全0尾数全0) 根据符号位的取值,分为+0和-0。