同样是32位,为什么float能表示的数据范围比int的大?

同样是32位,为什么float能表示的数据范围比int的大?,第1张

同样是32位,为什么float能表示的数据范围比int的大?
 System.out.println("Float.MAX_VALUE:"+Float.MAX_VALUE);
 System.out.println("Integer.MAX_VALUE:"+Integer.MAX_VALUE);
 System.out.println("Integer.MIN_VALUE:"+Integer.MIN_VALUE);


Float.MAX_VALUE:3.4028235E38
Integer.MAX_VALUE:2147483647
Integer.MIN_VALUE:-2147483648

java虚拟机规范中明确提到,int类型用4个字节32位表示,出去最高位符号位,剩下的都是数据本身

 如果float还用int类型一样的表示方式,那它不可能比int的范围更大,至少小数点还要占去一位呢。

书中提到,浮点类型与IEEE二进制浮点数算术标准是一致的,我们去查阅一下IEEE 754

IEEE 754_百度百科IEEE二进制浮点数算术标准(IEEE 754)是20世纪80年代以来最广泛使用的浮点数运算标准,为许多CPU与浮点运算器所采用。这个标准定义了表示浮点数的格式(包括负零-0)与反常值(denormal number)),一些特殊数值(无穷(Inf)与非数值(NaN)),以及这些数值的“浮点数运算符”;它也指明了四种数值舍入规则和五种例外状况(包括例外发生的时机与处理方式)。IEEE 754规定了四种表示浮点数值的方式:单精确度(32位)、双精确度(64位)、延伸单精确度(43比特以上,很少使用)与延伸双精确度(79比特以上,通常以80位实现)。只有32位模式有强制要求,其他都是选择性的。大部分编程语言都有提供IEEE浮点数格式与算术,但有些将其列为非必需的。例如,IEEE 754问世之前就有的C语言,有包括IEEE算术,但不算作强制要求(C语言的float通常是指IEEE单精确度,而dohttps://baike.baidu.com/item/IEEE%20754/3869922?fr=aladdin

float的表示方法与int根本就不是一个套路,它其实是借鉴了科学计数法,将float的二级制表示为的形式,因为a 只能取1,所以可以节省一位,最终形式为

然后稍作约定:

 

 最大的规约数:±1.11111(23个1)*2^127≈2^128,即3.4028235E38;

也就是最大值为3.4028235E38,最小值为-3.4028235E38。

注:java虚拟机规范注明,单精度浮点数指数范围在-126-127,双精度指数范围在-1022到1023 

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/zaji/5682635.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存