为什么float数值类型的有效数值范围是
答案:2 悬赏:0
解决时间 2021-04-17 19:56
- 提问者网友:伪情浪人
- 2021-04-17 10:53
为什么float数值类型的有效数值范围是
最佳答案
- 二级知识专家网友:废途浑身病态
- 2021-04-17 12:17
float的范围为-2^128 ~ +2^128,虽然与long型的字节数大小一样的,但是他可以使用E(就是指数表示法),因而将范围变得就很大。
全部回答
- 1楼网友:眠于流年
- 2021-04-17 13:57
在程序编写的时候,我们会忽略一些细节上的问题,尤其是写java这种高级语言,久而久之,我们会对底层缺乏认识,这也是为什么前段时间会有人说java对学生有害的原因;近段时间在重新温习操作系统,感觉收获颇丰,甚是欣慰;
今天突然发现一个关于float的小问题,若不是仔细回忆,差点就忘记啦,所以来讨论下;
public class floatest{
public static void main(string[] args){
float floatnumbera=1.0;
float floatnumberb=0;
for(int addcount=0;addcount<10;addcount++){
floatnumberb+=0.1;
}
if(floatnumberb==floatnumbera){
system.out.println("equals");
}else{
system.out.println("unequals");
}
}
}
输出的结果却出乎我们意料,是unequals;
原因在于计算机在内存表示float的时候都是有误差的,我们应该想起在内存float的表示形式;
下面引自一边别的文章;
首先说一下原,反,补,移码. 移码其实就等于补码,只是符号相反. 对于正数而言,原,反,补码都一样, 对负数而言,反码除符号位外,在原码的基础上按位取反,补码则在反码的基础之上,在其最低位上加1,要求移码时,仍然是先求补码,再改符号.
浮点数分为float和double,分别占4,8个字节,即32,64位. 我仅以32位的float为例,并附带说double.
在ieee754标准中,规定,float的32位这样分:
符号位(s)
1 阶码(e)
8 尾数(m)
23
这里应该注意三点:
a,阶码是用移码表示的,这里会有一个127的偏移量,它的127相当于0,小于127时为负,大于127时为正,比如:10000001表示指数为129-127=2,表示真值为2^2,而0
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯