float和int类型的取值范围和精度比较

目录

int类型的存储方式和取值范围:

浮点数的存储方式:

以小数0.65625为例,分析浮点数存储方式:

float类型的取值范围:

float类型和int类型的精度比较:

int类型和float类型在java中都是占四个字节,也就是32位,如何去比较float和int类型的精度,首先要分析两者的组成

int类型的存储方式和取值范围:

int数据类型在内存中占用了4个字节byte(4*8个bit比特)就是32个比特位。

第一位代表int的正负,后31位存储数据。

当int取最大值时相当于31个1(1*2^30+1*2^29+1*2^28+....+1*2^0)可以转化为有32位切为1其他为0之后再减去1(1*2^31-1)。换算一下大概是21亿多。

浮点数的存储方式:

1位符号位, 8位指数移码 ,23位尾数

以小数0.65625为例,分析浮点数存储方式:

1、将十进制小数转化为二进制0.10101(整数部分除二取余,小数部分乘二取整)

2、用科学计数法表示:1.0101 * 2^{-1} (IEEE 754标准规定小数点前留1(为的是一个数的唯一表示,且防止全是0浪费位数)

3、符号位为0直接填,指数位为2^{x-127},所以x=126,二进制为01111110,因为表示的二进制数整数位都是1,所以整数位直接省略,存0101,补全后得到32位浮点数:

0  01111110  00000000000000000000101

float类型的取值范围:

尾数为 0.1111111 11111111 11111111,指数为 11111111,但是指数全为1时有其特殊用途,所以指数最大为 11111110,指数减去127得到127,所以最大的数字就是1.1111111 1111111 11111111 x 2^{ 127},这个值为 340282346638528859811704183484516925440,通常表示成 3.4028235E38,那么float的范围就出来了:[-3.4028235E38, 3.4028235E38] 。

float类型和int类型的精度比较:

知道了浮点数的存储方式之后,我们就不难发现浮点数存储各数之间的间距并不稳定,离0越远精度越低。而int类型各数之间的间距都为1,所以在数据较小的时候float精度高,而数据较大的话则是int类型精度较高。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值