float的取值范围 Java_Java中float的取值范围

Java中float的取值范围

(2011-07-29 01:05:04)

标签:

杂谈

格式化表示

java中的浮点数批准的事IEEE Standard 754 Floating Point

Numbers规范,该规范的规范能够参看blog.csdn.net/treeroot/articles/94752.aspx.

float挪借4个字节,和int是一样,也即便32bit.

第1个bit表示符号,0表示正数,1表示负数,这个很好会意,无须多管.

第2-9个bit表示指数,一共8为(能够表示0-255),这里的底数是2,为了同时表示正数和负数,这里要扣除127的偏移量.这么的话范围即便(-127到128),另外全0和全1作为特异处理,因而直接表示-126到127.

剩下的23位表示小数局部,这里23位表示了24位的数字,因为有一个默认的前导1(只有二进制才有这个个性).

最后收获是:(-1)^(sign) * 1.f * 2^(exponent)

这里:sign是符号位,f是23bit54.163xi.com的小数局部,exponent是指数局部,最后表示范围是(因为正负数是对称的,这里只关怀正数)

2^(-126) ~~ 2(1-2^(-24)) * 2^127

这个还不是float的取值范围,因为规范中还法定了非格式化表示法,另外还有一些特异法定.

非格式化表示:

当指数局部全0而且小数局部不全0时表示的是非格式化的浮点数,因为这里默认未曾前导1,而是0.

取值位0.f * 2^(-126),表示范围位 2^(-149)~~ (1-2^(-23)) * 2^(-126)

这里未曾琢磨符号.这里为什么是-126而不是-127? 万一是-127的佳能550D话ve.veveenglish.com,那么最大表示为2^(-127)-2^(-149),很显明2^(-127)

~~2^(-126) 就没法表示了.

其他特异表示

1.当指数局部和小数局部全为0时,表示0值,有+0和-0之分(符号位定夺),0x00000000表示正0,0x80000000表示负0.

2.指数局部全1,小数局部全0时,表示无限大,有正无限和负无限,0x7f800000表示正无限,0xff800000表示负无限.

3.指数局部全1,小数局部不全0时,表示NaN,分为QNaN和SNaN,Java中都是NaN.结论:

能够看出浮点数的取值范围是:2^(-149)~~(2-2^(-23))*2^127,也即便Float.MIN_VALUE和Float.MAX_VALUE.可能说渴望的混杂是指“广度”上的混杂度时,

分享:

a4c26d1e5885305701be709a3d33442f.png喜欢

0

a4c26d1e5885305701be709a3d33442f.png赠金笔

加载中,请稍候......

评论加载中,请稍候...

发评论

登录名: 密码: 找回密码 注册记住登录状态

昵   称:

评论并转载此博文

a4c26d1e5885305701be709a3d33442f.png

发评论

以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Javafloat类型的取值范围是-3.4028235E38到3.4028235E38,当赋给float类型的变量的值超出此范围时,可以采取以下几种解决办法: 1. 使用double类型:可以将超出float范围的值赋给double类型的变量。double类型的取值范围更大,为-1.7976931348623157E308到1.7976931348623157E308。 2. 舍入:使用Math类的舍入方法,如Math.round()、Math.floor()、Math.ceil()等,将超出float范围的值舍入成合适的值。 3. 使用BigDecimal类:BigDecimal提供了高精度的十进制运算,可以用于处理超出float范围的值。首先将float类型的值转换为BigDecimal对象,然后进行运算或舍入操作,最后再将结果转换回float类型。 例如: ```java float f = 1.23E39f; double d = f; // 使用double类型来保存超出float范围的值 float roundedValue = Math.round(f); // 使用Math类的round方法将值舍入 float flooredValue = (float) Math.floor(f); // 使用Math类的floor方法向下舍入 float ceiledValue = (float) Math.ceil(f); // 使用Math类的ceil方法向上舍入 BigDecimal bigDecimal = new BigDecimal(Float.toString(f)); // 将float转换为BigDecimal BigDecimal result = bigDecimal.add(new BigDecimal("100000000000000000000")); // 使用BigDecimal进行运算 float resultFloat = result.floatValue(); // 将BigDecimal转换回float类型 ``` 需要注意的是,由于浮点数的精度问题,进行舍入或高精度运算可能会导致一定的误差,使用时需要根据具体情况选择合适的方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值