|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
前些天,在CSDN上看到了一个消息,说是ASP.NETAJAX成功在Linux上运行,这一点对我触动很大,而且引发了我许多感叹,所以想写出来分享一下。浮点数分为单精度和双精度,Java中的单精度和双精度分离为float和double.你们晓得float和double是怎样存储的吗?
float占4个字节,double占8个字节,为了便利起见,这里就只会商float范例.
float实在和一个int型的巨细是一样的,一共32位,第一名暗示标记,2-9暗示指数,前面23位暗示小数部分.这里未几说,请参考:http://blog.csdn.net/treeroot/archive/2004/09/05/95071.aspx
这里只举一个例子,但愿能举一反三,就是研讨一下浮点数0.1的存储情势,先运转这个程序.
publicclassTest{
publicstaticvoidmain(String[]args){
intx=0x3d800000;
inti=1<<22;
intj=1<<4;
floatf=0.1f;
inty=Float.floatToIntBits(f);
floatrest=f-((float)1)/j;
while(i>0){
j<<=1;
floatdeta=((float)1)/j;
if(rest>=deta){
rest-=deta;
x|=i;
}
i>>=1;
}
pr(x);
pr(y);
}
staticvoidpr(inti){
System.out.println(Integer.toBinaryString(i));
}
}
了局:
111101110011001100110011001101
111101110011001100110011001101
程序申明:
intx=0x3d80000;
由于浮点暗示情势为1.f*2n-127我们要暗示0.1,能够晓得n-127=-4,到n=123
标记为正,可知前9是001111011,临时不思索前面的23位小数,以是我们先假定x=0x3d800000;
inti=1<<22;
i初始为第右起第23位为1,就是x的第10位
intj=1<<4;
i初始为4,由于n-127为-4,这里是为了求它的倒数.
floatf=0.1f;
inty=Float.floatToIntBits(f);
y就是它的32位暗示
floatrest=f-((float)1)/j;
这个rest暗示除1.f中的1剩下的,也就是0.f
while(i>0){
j<<=1;
floatdeta=((float)1)/j;
if(rest>=deta){
rest-=deta;
x|=i;
}
i>>=1;
}
这个轮回来盘算23位小数部分,假如rest不小于deta,暗示这个位能够置为1.
其他的未几说了,输出了局是一样的,能够说0.1这个浮点数一定是不准确的,可是0.5能够准确的暗示,想一想为何吧.
自己的整个学习思路完全被老师的讲课思路所牵制,这样几节课听下来,恐怕自己的见解都应该是书里的知识点了,根本谈不上自身发现问题,分析问题,和解决问题能力的切实提高。 |
|