首页 > 编程知识 正文

float类型几位小数,float类型能表示的最大正整数

时间:2023-05-04 10:36:27 阅读:270117 作者:752

        float类型遵循IEEE754标准,该标准为32位浮点数规定了二进制表示形式。IEEE754采用二进制的科学计数法来表示浮点数。对于float浮点数,用1位表示数字的符号(浮点数正负性,0正1负),8位来表示指数(底数为2),23位表示尾数,如图1-1所示。

1.指数E在1 ~ 254

        在IEEE754中,约定小数点左边有一位隐含位。在表1-2中,“0.M”和“1.M”中的0和1就是隐含位。当指数取值在1 ~ 254时,这个隐含位为1,所以实际上尾数的有效位数是24位,即:1.MMMMMMMMMMMMMMMMMMMMMMM
        指数也叫阶码,为了表示指数的正负,阶码采用移码表示,移码值位127。所以float类型的实际取值可以用以下二进制表达式表示:
(-1)s *2E-127 *(1.M)。

float数字0.1

        计算出0.1的二进制形式

float f = 0.1f;System.out.println(Float.floatToIntBits(f));

结果为1036831949,对应的32位二进制形式为;
0 01111011 10011001100110011001101
S = 0,E = 01111011 M = 1.10011001100110011001101 所以根据公式可得
(-1)0 * 2123-127 * 1.10011001100110011001101
最后计算可得110011001100110011001101 * 2-27 = 13421773 * 2-27
值为0.100000001490116119384765625
由此可得,在内存中,32位的二进制科学记数法不能精确的表示0.1,它与实际的0.1的误差为0.000000001490116119384765625。所以用浮点数进行数学计算时,会导致一些误差。

2.指数E为0

        当S,E,M部分都是0时,就表示数字0.0。如果指数位是0,尾数不为0,那么float的取值为:(-1)s *2-126 *(0.M)。这个范围内的浮点数绝对值都很小,可以表示接近于 0 的小数。

3.指数E为255

         这个用来表示一些特殊的数字,如表 1-2 所示:
用Float的静态常量来表示这些特殊数字。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。