为了在浮点计算的过程中保持最高的精度,大多数计算都采用觃约形式(Normalized)的浮点值。尾数高位为1的浮点值即为规约形式的浮点值。如果参与浮点计算的全部是规约形式的浮点值,则浮点计算的准确性会更高。因为尾数为0的高位有多少,计算中能够使用的有效数字(精度位)就少多少。
几乎所有没有规约化的值都可以通过将尾数左移并递减阶码,直到尾数高位为1来进行规约。 注意,阶码是二进制的指数。阶码每递增一次,相当于浮点值乘以2。相反,阶码每递减一次,则相当于浮点值除以2。同样,尾数左移一位相当于浮点数乘以2,右移一位相当于浮点数除以2。因此,尾数左移一位的同时递减阶码不会改变浮点值(这是某些数字在浮点格式中有多种表示形式的原因,前面已经遇到过这种情况)。
下面是一个非规约形式的数值:
将尾数左移一位并递减阶码进行规约:
有两种重要的情况,是无法规约浮点数的。首先0是无法规约的,因为0的浮点表示的阶码和尾数的所有位都为0。但这不是问题,因为0可以用一位0精确地表示,不需要额外的精度位。
如果尾数中有一些高位为0且带偏移 的阶码也为0,那么浮点数也是无法规约的(无法递减阶码来规约尾数)。IEEE标准并没有禁用这些尾数高位为0且带偏移的阶码也为0(阶码可以表示的最小负数次幂)的小数,并允许在这种情况下使用特殊的非觃约形式(Denormalized)的数值。 尽管采用非规约形式数值使IEEE浮点计算得到的结果好过发生下溢,但非规约形式牺牲了有效数字的位数(精度位)。