欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中的浮點數分析

 更新時間:2006年12月23日 00:00:00   作者:  
文章來源:csdn 作者:treeroot

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

   float占4個字節(jié),double占8個字節(jié),為了方便起見,這里就只討論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;
   }

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

  其他的不多說了,輸入結果是一樣的,可以說0.1這個浮點數肯定是不精確的,但是0.5可以精確的表示,想想為什么吧

相關文章

  • MyBatis與Spring整合過程實例解析

    MyBatis與Spring整合過程實例解析

    這篇文章主要介紹了MyBatis與Spring整合過程實例解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-02-02
  • Java擦除和轉換實例分析

    Java擦除和轉換實例分析

    這篇文章主要介紹了Java擦除和轉換,結合實例形式分析了java擦除和轉換概念、功能及相關操作技巧,需要的朋友可以參考下
    2019-07-07
  • Java類的初始化順序的實現

    Java類的初始化順序的實現

    類的初始化過程是在類加載階段完成的,包括加載、驗證、準備、解析和初始化等步驟,本文主要介紹了Java類的初始化順序的實現,感興趣的可以了解一下
    2023-12-12
  • Java實現的對稱加密算法3DES定義與用法示例

    Java實現的對稱加密算法3DES定義與用法示例

    這篇文章主要介紹了Java實現的對稱加密算法3DES定義與用法,結合實例形式簡單分析了Java 3DES加密算法的相關定義與使用技巧,需要的朋友可以參考下
    2018-04-04
  • 詳解MyBatis-Plus Wrapper條件構造器查詢大全

    詳解MyBatis-Plus Wrapper條件構造器查詢大全

    這篇文章主要介紹了詳解MyBatis-Plus Wrapper條件構造器查詢大全,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-08-08
  • 并發(fā)編程之Java內存模型

    并發(fā)編程之Java內存模型

    這篇文章主要介紹了Java并發(fā)編程之內存模型,Java內存模型中的順序一致性,主要介紹重排序與順序一致性內存模型,下面文章將圍繞Java內存模型展開內容,需要的小伙伴可以參考一下
    2021-11-11
  • Java編程使用Runtime和Process類運行外部程序的方法

    Java編程使用Runtime和Process類運行外部程序的方法

    這篇文章主要介紹了Java編程使用Runtime和Process類運行外部程序的方法,結合實例形式分析了java使用Runtime.getRuntime().exec()方法運行外部程序的常見情況與操作技巧,需要的朋友可以參考下
    2017-08-08
  • Java語言實現簡單FTP軟件 FTP軟件主界面(4)

    Java語言實現簡單FTP軟件 FTP軟件主界面(4)

    這篇文章主要為大家詳細介紹了Java語言實現簡單FTP軟件,FTP軟件主界面編寫的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • spring?cloud中Feign導入jar失敗的問題及解決方案

    spring?cloud中Feign導入jar失敗的問題及解決方案

    這篇文章主要介紹了spring?cloud中Feign導入jar失敗的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Java中抽象類的作用及說明

    Java中抽象類的作用及說明

    這篇文章主要介紹了Java中抽象類的作用及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11

最新評論