<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-3  評論-0  文章-0  trackbacks-0
      2006年7月16日

    浮點(diǎn)數(shù)分為單精度和雙精度,Java中的單精度和雙精度分別為float和double.你們知道float和double是怎么存儲的嗎?

      float占4個(gè)字節(jié),double占8個(gè)字節(jié),為了方便起見,這里就只討論float類型.
      float其實(shí)和一個(gè)int型的大小是一樣的,一共32位,第一位表示符號,2-9表示指數(shù),后面23位表示小數(shù)部分.

      這里只舉一個(gè)例子,希望能拋磚引玉,就是研究一下浮點(diǎn)數(shù)0.1的存儲形式,先運(yùn)行這個(gè)程序.


    ?  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));
      }

      }
    ?
      結(jié)果:
      111101110011001100110011001101
      111101110011001100110011001101

      程序說明:
      int x=0x3d80000;
      因?yàn)楦↑c(diǎn)表示形式為1.f*2n-127我們要表示0.1,可以知道n-127=-4,到n=123
      符號為正,可知前9是 001111011,暫時(shí)不考慮后面的23位小數(shù),所以我們先假設(shè)x=0x3d800000;


    ?  int i = 1 << 22;
      i初始為第右起第23位為1,就是x的第10位


    ?  int j = 1 << 4;

      i初始為4,因?yàn)閚-127為-4,這里是為了求它的倒數(shù).


    ?  float f = 0.1f;
      int y = Float.floatToIntBits(f);

      y就是它的32位表示


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

      這個(gè)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;
      }

      這個(gè)循環(huán)來計(jì)算23位小數(shù)部分,如果rest不小于deta,表示這個(gè)位可以置為1.

      其他的不多說了,輸入結(jié)果是一樣的,可以說0.1這個(gè)浮點(diǎn)數(shù)肯定是不精確的,但是0.5可以精確的表示,想想為什么吧.


    轉(zhuǎn)至 www.csdn.net

    posted @ 2006-07-16 13:37 StarShowerJavaWorld 閱讀(309) | 評論 (0)編輯 收藏
    主站蜘蛛池模板: 免费无码专区毛片高潮喷水| XXX2高清在线观看免费视频| 中国人xxxxx69免费视频| 情人伊人久久综合亚洲| 精品免费久久久久国产一区 | 一色屋成人免费精品网站| 亚洲AV无码国产在丝袜线观看| 一本久久免费视频| 亚洲精品视频在线看| 一级成人a做片免费| 综合亚洲伊人午夜网| 国产免费黄色无码视频 | 国产人成免费视频网站| 女人18特级一级毛片免费视频| 全部免费毛片免费播放| 亚洲AV无码久久| 一区二区三区无码视频免费福利| 国产福利在线免费| 国产亚洲精aa在线看| 国产精品久免费的黄网站| 久久人午夜亚洲精品无码区| 久久精品国产亚洲7777| 青青操在线免费观看| 亚洲AV一宅男色影视| 最近免费中文字幕高清大全 | 亚洲人成电影网站免费| 国产免费av一区二区三区| 一级特黄色毛片免费看| 亚洲中文字幕在线第六区| 日韩精品极品视频在线观看免费| 亚洲一级毛片免费观看| 日本牲交大片免费观看| 成人A毛片免费观看网站| 在线观看免费亚洲| 一区二区三区免费在线视频| 亚洲av无码一区二区三区不卡| 日本免费人成在线网站| 视频一区二区三区免费观看| 国产AV无码专区亚洲AV毛网站| 黄在线观看www免费看| 婷婷亚洲综合五月天小说在线|