赛迪网 > IT技术 Java > 技术动态
  IT资讯搜索
 
IT产品搜索
[程序开发][网管世界][网络安全][数据库技术]
[操作系统][嘉宾聊天·在线访谈][活动集锦]
[精彩专题][Symantec专区][订阅IT技术周刊]
[开发论坛][网管论坛][安全论坛][数据库论坛]
[操作系统论坛][Sybase专区][IBM dW技术专区]
[病毒求助][病毒与漏洞播报][文档·源码下载]

J2SE综合--关于Java中的浮点数分析

发布时间:2008.02.26 08:47     来源:赛迪网    作者:striveforever

浮点数分为单精度和双精度,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的存储形式,先运行这个程序. 

  public class Test{ 

  public static void main(String[] args) { 

  int x = 0x3d800000; 

  int i = 1 << 22; 

  int j = 1 << 4; 

  float f = 0.1f; 

  int y = Float.floatToIntBits(f); 

  float rest = f - ( (float) 1) / j; 

  while (i > 0) { 

  j <<= 1; 

  float deta = ( (float) 1) / j; 

  if (rest >= deta) { 

  rest -= deta; 

  x |= i; 

  } 

  i >>= 1; 

  } 

  pr(x); 

  pr(y); 

  }

  static void pr(int i) { 

  System.out.println(Integer.toBinaryString(i)); 

  }

  } 

  结果: 

  111101110011001100110011001101 

  111101110011001100110011001101 

  程序说明: 

  int x=0x3d80000; 

  因为浮点表示形式为1.f*2n-127我们要表示0.1,可以知道n-127=-4,到n=123 

  符号为正,可知前9是 001111011,暂时不考虑后面的23位小数,所以我们先假设x=0x3d800000; 

  int i = 1 << 22; 

  i初始为第右起第23位为1,就是x的第10位 


  int j = 1 << 4; 

  i初始为4,因为n-127为-4,这里是为了求它的倒数. 


  float f = 0.1f; 

  int y = Float.floatToIntBits(f); 

  y就是它的32位表示 

  float rest = f - ( (float) 1) / j; 

  这个rest表示除了1.f中的1剩下的,也就是0.f 

  while (i > 0) { 

  j <<= 1; 

  float deta = ( (float) 1) / j; 

  if (rest >= deta) { 

  rest -= deta; 

  x |= i; 

  } 

  i >>= 1; 

  } 

  这个循环来计算23位小数部分,如果rest不小于deta,表示这个位可以置为1. 
          (责任编辑:包春林)


[ 发表评论 ] 字体[  ] [ 打印 ] [ 进入博客 ] [ 进入论坛 ]  [ 推荐给朋友 ]
  相关文章
· 基于JDBC的数据库连接池技术研究与应用 (02-25) · 网络:如何使用Java网络启动部署软件 (02-25)
· 数据库相关:JDBC直连SQL Server 2005 (02-25) · 技术生涯:七个能走好IT技术之路的诀窍 (02-25)
· 高级--深入浅析Spring的一些负面因素 (02-25) · 进阶--学习J2SE过程中的30个基本概念 (02-25)
· 浅析关于gc的执行机制 (02-25) · 设计模式:Bridge模式 和Composite模式 (02-22)
· JSP中include指令和include行为的区别 (02-22) · J2SE综合:深入理解JavaHelp结构的好处 (02-22)
  客户需求反馈表
* 姓  名:
更多资料  了解方案  认识厂商
* 单位名称:
* 联系电话:
* 电子邮件:
  赛迪推荐  
  手机·资费 ·新品·导购·评测·手机资费·宽带
手机搜索  诺基亚 N73 MOTO Z6
  IT产品 ·笔记本·台式机·服务器·打印·投影
IT产品搜索 
  IT技术 ·开发·网管·安全·数据库·操作系统
  信息化 ·热点·专题·访谈·周刊·方案案例
· 中小企业网站建设存在弊端 手机实名推波助澜
· CIO应如何克服三个关键错误信念 CIO委屈定理
· 五条黄金准则能够让CIO巧妙加薪 CIO焦虑调查
· 网上书店解决方案 深圳边检指挥中心ITSM项目
  IT博客 ·曾剑秋·项立刚·Java学习·网管
  IT技术论坛 ·开发·网管·安全·数据库·系统