浮点数的表示范畴
【引荐课程:JavaScript教程】
浮点数表示
一个浮点数(Floating Point Number)由三个根本成分构成:符号(Sign)、阶码(Exponent)和尾数(Mantissa)。平常可以用下面的格局来表示浮点数:
S | P | M |
其中S是符号位,P是阶码,M是尾数。
按照IEEE(老美电气和电子工程师学会)754标准中的定义,单精度浮点数是32位(即4字节)的,双精度浮点数是64位(即8字节)的。两者的S、P、M所占的位数乃至表示办法由下表可知:
S | P | M | 表示公式 | 偏移量 | |
单精度浮点数 | 1(第31位) | 8(30到23位) | 23(22到0位) | (-1)^S*2(P-127)*1.M | 127 |
双精度浮点数 | 1(第63位) | 11(62到52位) | 52(51到0位) | (-1)^S*2(P-1023)*1.M | 1023 |
其中S是符号位,只要0和1,离别表示正负
P是阶码,平常使用移码表示(移码和补码只要符号位相反,其余都一样。关于正数而言,原码、反码和补码都一样;关于负数而言,补码就是其绝对值的原码全部取反,然后加1)。阶码可认为正数,也可认为负数,为了处置负指数的状况,实际的指数值按要求需要加上一个偏向(Bias)值作为留存在指数域中的值,单精度数的偏向值为127,双精度数的偏向值为1023。例如,单精度的实际指数值0在指数域中将留存为127,而留存在指数域中的64则表示实际的指数值-63,偏向的引入使得关于单精度数,实际可以表达的指数值的范畴就变成-127到128之间(包括两端)。
M为尾数,其中单精度数为23位长,双精度数为52位长。IEEE标准要求浮点数必需是标准的。这意味着尾数的小数点左侧必需为1,因此在留存尾数的时候,可以省略小数点前面这个1,从而腾出一个二进制位来留存更多的尾数。这样实际上用23位长的尾数域表达了24位的尾数。例如关于单精度数而言,二进制的1001.101(对应于十进制的9.625)可以表达为1.001101 × 23,所以实际留存在尾数域中的值为00110100000000000000000,即去除小数点左侧的1,并用0在右侧补齐。
按照标准要求,没法准确留存的值必需向最接近的可留存的值停止舍入,即不足一半则舍,一半以上(包罗一半)则进。不外关于二进制浮点数而言,还多一条规矩,就是当需要舍入的值恰好是一半时,不是简便地进,而是在前后两个等距接近的可留存的值中,取其中最后一位有效数字为零者。
据以上剖析,IEEE 754标准中定义浮点数的表示范畴为:
二进制(Binary) | 十进制(Decimal) | |
单精度浮点数 | ± (2-2^-23) × 2127 | ~ ± 10^38.53 |
双精度浮点数 | ± (2-2^-52) × 21023 | ~ ± 10^308.25 |
浮点数的表示有必然的范畴,超出范畴时会发生溢出(Flow),一样称大于绝对值最大的数据为上溢(Overflow),小于绝对值最小的数据为下溢(Underflow)。
浮点数的表示约定
单精度浮点数和双精度浮点数都是用IEEE 754标准定义的,其中有一些非凡约定,例如:
1、当P=0,M=0时,表示0。
2、当P=255,M=0时,表示无限大,用符号位来肯定是正无限大还是负无限大。
3、当P=255,M≠0时,表示NaN(Not a Number,不是一个数)。
非标准浮点数
当两个绝对值微小 的浮点数相减后,其差值的指数大概超出同意范畴,终究只能近似为0。为理解决此类问题,IEEE标准中引入了非标准(Denormalized)浮点数,规定当浮点数的指数为同意的最小指数值时,尾数不必是标准化(Normalized)的。有了非标准浮点数,去除了隐含的尾数位的制约,可以留存绝对值更小的浮点数。并且,由于不再受到隐含尾数域的制约,上述关于微小 差值的问题也不存在了,由于所有可以留存的浮点数之间的差值一样可以留存。
按照IEEE 754标准中的定义,标准和非标准浮点数的表示范畴可归纳为下表:
标准浮点数 | 非标准浮点数 | 十进制近似范畴 | |
单精度浮点数 | ± 2^-149 至 (1-2^-23)*2^-126 | ± 2^-126 至 (2-2^-23)*2^127 | ± ~10^-44.85 至 ~10^38.53 |
双精度浮点数 | ± 2^-1074 至 (1-2^-52)*2^-1022 | ± 2^-1022 至 (2-2^-52)*2^1023 | ± ~10^-323.3 至 ~10^308.3 |
与IEEE 754相关的标准
本文的结论基于IEEE 754标准,别的一个标准是IEEE 854,这个标准是关于十进制浮点数的,但没有规定详细格局,所以很少被采纳。别的,从2000年开端,IEEE 754开端修订,被称为IEEE 754R,目的是融合IEEE 754和IEEE 854标准。该标准在浮点格局方面的修订有:1、参加了16位和128位的二进制浮点数格局;2、参加了十进制浮点数格局,采纳了IBM公司提出的格局。
总结:以上就是本篇文章的全部内容了,但愿对大家有所帮忙。
以上就是浮点数的表示范畴的具体内容,更多请关注百分百源码网其它相关文章!