最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

關(guān)于Java?float和double精度范圍大小

 更新時(shí)間:2021年12月10日 16:40:12   作者:Boss呱呱  
這篇文章主要介紹了關(guān)于Java?float和double精度范圍大小,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Java float和double精度范圍大小

要想理解float和double的取值范圍和計(jì)算精度,必須先了解小數(shù)是如何在計(jì)算機(jī)中存儲(chǔ)的:

舉個(gè)例子:78.375,是一個(gè)正小數(shù)。要在計(jì)算機(jī)中存儲(chǔ)這個(gè)數(shù),需要把它表示為浮點(diǎn)數(shù)的格式,先執(zhí)行二進(jìn)制轉(zhuǎn)換:

一、小數(shù)的二進(jìn)制轉(zhuǎn)換(浮點(diǎn)數(shù))

78.375的整數(shù)部分:

小數(shù)部分:

所以,78.375的二進(jìn)制形式就是1001110.011

然后,使用二進(jìn)制科學(xué)記數(shù)法,有

注意,轉(zhuǎn)換后用二進(jìn)制科學(xué)記數(shù)法表示的這個(gè)數(shù),有底有指數(shù)有小數(shù)部分,這個(gè)就叫做浮點(diǎn)數(shù)

二、浮點(diǎn)數(shù)在計(jì)算機(jī)中的存儲(chǔ)

在計(jì)算機(jī)中,保存這個(gè)數(shù)使用的是浮點(diǎn)表示法,分為三大部分:

  • 第一部分用來存儲(chǔ)符號(hào)位(sign),用來區(qū)分正負(fù)數(shù),這里是0,表示正數(shù)
  • 第二部分用來存儲(chǔ)指數(shù)(exponent),這里的指數(shù)是十進(jìn)制的6
  • 第三部分用來存儲(chǔ)小數(shù)(fraction),這里的小數(shù)部分是001110011

需要注意的是,指數(shù)也有正負(fù)之分,后面再講。

如下圖所示(圖片來自維基百科):

比如float類型是32位,是單精度浮點(diǎn)表示法:

  • 符號(hào)位(sign)占用1位,用來表示正負(fù)數(shù),
  • 指數(shù)位(exponent)占用8位,用來表示指數(shù),
  • 小數(shù)位(fraction)占用23位,用來表示小數(shù),不足位數(shù)補(bǔ)0。

而double類型是64位,是雙精度浮點(diǎn)表示法:

  • 符號(hào)位占用1位,指數(shù)位占用11位,小數(shù)位占用52位。

到這里其實(shí)已經(jīng)可以隱隱看出:

  • 指數(shù)位決定了大小范圍,因?yàn)橹笖?shù)位能表示的數(shù)越大則能表示的數(shù)越大嘛!
  • 而小數(shù)位決定了計(jì)算精度,因?yàn)樾?shù)位能表示的數(shù)越大,則能計(jì)算的精度越大咯!

可能還不夠明白,舉例子吧:

  • float的小數(shù)位只有23位,即二進(jìn)制的23位,能表示的最大的十進(jìn)制數(shù)為2的23次方,即8388608,即十進(jìn)制的7位,嚴(yán)格點(diǎn),精度只能百分百保證十進(jìn)制的6位運(yùn)算。
  • double的小數(shù)位有52位,對(duì)應(yīng)十進(jìn)制最大值為4 503 599 627 370 496,這個(gè)數(shù)有16位,所以計(jì)算精度只能百分百保證十進(jìn)制的15位運(yùn)算。

三、指數(shù)位的偏移量與無符號(hào)表示

需要注意的是指數(shù)可能是負(fù)數(shù),也有可能是正數(shù),即指數(shù)是有符號(hào)整數(shù),而有符號(hào)整數(shù)的計(jì)算是比無符號(hào)整數(shù)麻煩的。所以為了減少不必要的麻煩,在實(shí)際存儲(chǔ)指數(shù)的時(shí)候,需要把指數(shù)轉(zhuǎn)換成無符號(hào)整數(shù)。那么怎么轉(zhuǎn)換呢?

注意到float的指數(shù)部分是8位,則指數(shù)的取值范圍是 -126到+127,為了消除負(fù)數(shù)帶來的實(shí)際計(jì)算上的影響(比如比較大小,加減法等),可以在實(shí)際存儲(chǔ)的時(shí)候,給指數(shù)做一個(gè)簡單的映射,加上一個(gè)偏移量,比如float的指數(shù)偏移量為127,這樣就不會(huì)有負(fù)數(shù)出現(xiàn)了。

比如

  • 指數(shù)如果是6,則實(shí)際存儲(chǔ)的是6+127=133,即把133轉(zhuǎn)換為二進(jìn)制之后再存儲(chǔ)。
  • 指數(shù)如果是-3,則實(shí)際存儲(chǔ)的是-3+127=124,即把124轉(zhuǎn)換為二進(jìn)制之后再存儲(chǔ)。

當(dāng)我們需要計(jì)算實(shí)際代表的十進(jìn)制數(shù)的時(shí)候,再把指數(shù)減去偏移量即可。

對(duì)應(yīng)的double類型,存儲(chǔ)的時(shí)候指數(shù)偏移量是1023。

四、小結(jié)一下

所以用float類型來保存十進(jìn)制小數(shù)78.375的話,需要先轉(zhuǎn)換成浮點(diǎn)數(shù),得到符號(hào)位指數(shù)小數(shù)部分

這個(gè)例子前面已經(jīng)分析過,所以:

符號(hào)位是0,

指數(shù)位是6+127=133,二進(jìn)制表示為10 000 101,

小數(shù)部分是001110011,不足部分請(qǐng)自動(dòng)補(bǔ)0。

連起來用float表示,加粗部分是指數(shù)位,最左邊是符號(hào)位0,代表正數(shù):

0 10000101 001110011 00000 00000 0000

如果用double來保存。。。自己計(jì)算吧,太多0了。

float和double的范圍到底是多少

Java中float占4個(gè)字節(jié),32bit。計(jì)算范圍公式為 ((-1)^S)* (2^(E-127))*(1.M) ,其中S占一位是符號(hào)位,E所占8bit是指數(shù)位,M占23位是尾數(shù)位。

這里一開始(1.M)部分一開始我一直沒想明白為什么前面是1,突然有一天腦子開竅了,科學(xué)計(jì)數(shù)法表示的時(shí)候小數(shù)點(diǎn)前面就必須是1,所以規(guī)格化的時(shí)候小數(shù)點(diǎn)前面是1。

E占8位,所以大小是0-255,但是為了表示小數(shù),指數(shù)部分需要可以是小數(shù),對(duì)半一分,所以最后是E-127,也就是說指數(shù)部分為-127-128。

尾數(shù)部分沒什么好說的,范圍就是1-1.11……(23位全是1)

注意 :尾數(shù)這里1.1111實(shí)際上是 十進(jìn)制的1 + 二進(jìn)制的0.1111, 什么意思呢, 舉例說明會(huì)清楚一點(diǎn):

1.1 ----> 1+1/2 = 1.5 = 2-1/2

1.11 -----> 1+1/2 +1/4 = 1.75 = 2-1/4

總結(jié)一下上面的

按道理最大值應(yīng)該是(2^128)*(2-2^(-23))=2^129-2^105=6.81*10^38,但是一般書上說的都是3.40*10^38,那么問題又來了,為什么會(huì)大了2倍?

排除掉所有出書的人抄來抄去的行為導(dǎo)致所有的書都錯(cuò)了這個(gè)因素,那么剩下的只能是上面某個(gè)地方出了問題。首先,回到上面那個(gè)我加粗的規(guī)格化上去(我個(gè)人覺得完全可以用一般情況來代替這個(gè)詞),仔細(xì)想想,假如所有的數(shù)都是上面那種規(guī)格化表示的時(shí)候:

第一:得到的數(shù)永遠(yuǎn)是(1.M)乘以一個(gè)數(shù),指數(shù)部分是不會(huì)為0的,那么0怎么表示?

第二:無窮大和無窮小,還有NAN(not a number)又是怎么用這32bit表示出來的?我曾經(jīng)想過的一個(gè)解釋是,計(jì)算機(jī)里沒有那個(gè)數(shù)就表示NAN嘛。。。以前還真覺得這個(gè)好有道理來著。但是計(jì)算機(jī)這個(gè)東西你只能當(dāng)做一個(gè)工具,也就是說它不能無中生有,它只能處理我們給它的東西,所有無窮大無窮小還有NAN在計(jì)算機(jī)里肯定有一種表示方式。

所以,一定還有非規(guī)格化的表示,也就是所謂的特殊情況。

第一:當(dāng)E是8個(gè)0的時(shí)候,此時(shí)就不是(1.M)而是(0.M)了,這個(gè)時(shí)候就可以表示出0了,當(dāng)然還可以表示那些非常接近0的數(shù)。

第二:當(dāng)E是8個(gè)1的時(shí)候,如果小數(shù)域全是0,表示的是無窮,其余的表示NAN。

由上可知,指數(shù)部分為(0-127)和(255-127)的時(shí)候表示的是兩種特殊情況,所以E的范圍應(yīng)該是【-126,127】。最后,得出的結(jié)論是規(guī)格化的浮點(diǎn)數(shù)的表示范圍是 正負(fù)(2^127)*(2-2^(-23))=2^128-2^104=3.40*10^38

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Storm框架整合springboot的方法

    Storm框架整合springboot的方法

    Storm框架中的每個(gè)Spout和Bolt都相當(dāng)于獨(dú)立的應(yīng)用,Strom在啟動(dòng)spout和bolt時(shí)提供了一個(gè)open方法(spout)和prepare方法(bolt)。這篇文章主要介紹了Storm框架整合springboot的方法,需要的朋友可以參考下
    2018-11-11
  • Java多線程中的單例模式兩種實(shí)現(xiàn)方式

    Java多線程中的單例模式兩種實(shí)現(xiàn)方式

    這篇文章主要介紹了Java多線程中的單例模式兩種實(shí)現(xiàn)方式的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • Mybatis RowBounds 限制查詢條數(shù)的實(shí)現(xiàn)代碼

    Mybatis RowBounds 限制查詢條數(shù)的實(shí)現(xiàn)代碼

    Oracle 數(shù)據(jù)庫查詢?cè)黾覴owBounds限制查詢條數(shù),默認(rèn)是0到1000條。下面給大家分享Mybatis RowBounds 限制查詢條數(shù)的實(shí)現(xiàn)代碼,需要的朋友參考下吧
    2016-11-11
  • springboot?log4j2.xml如何讀取application.yml中屬性值

    springboot?log4j2.xml如何讀取application.yml中屬性值

    這篇文章主要介紹了springboot?log4j2.xml如何讀取application.yml中屬性值問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • SpringBoot中的maven插件spring-boot-maven-plugin使用

    SpringBoot中的maven插件spring-boot-maven-plugin使用

    這篇文章主要介紹了SpringBoot中的maven插件spring-boot-maven-plugin使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Spring如何解決單例bean線程不安全的問題

    Spring如何解決單例bean線程不安全的問題

    這篇文章主要介紹了Spring如何解決單例bean線程不安全的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • Spring Boot集成Thymeleaf的方法

    Spring Boot集成Thymeleaf的方法

    這篇文章主要介紹了Spring Boot集成Thymeleaf的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • java8使用Stream API方法總結(jié)

    java8使用Stream API方法總結(jié)

    在本篇文章里小編給大家分享了關(guān)于java8使用Stream API方法相關(guān)知識(shí)點(diǎn),需要的朋友們學(xué)習(xí)下。
    2019-04-04
  • Java中類的定義和初始化示例詳解

    Java中類的定義和初始化示例詳解

    這篇文章主要給大家介紹了關(guān)于Java中類的定義和初始化的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • java的三種隨機(jī)數(shù)生成方式的實(shí)現(xiàn)方法

    java的三種隨機(jī)數(shù)生成方式的實(shí)現(xiàn)方法

    這篇文章主要介紹了java的三種隨機(jī)數(shù)生成方式的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09

最新評(píng)論

沧州市| 娱乐| 龙州县| 乌兰察布市| 盐源县| 石城县| 康保县| 大厂| 农安县| 保德县| 武清区| 玉林市| 连平县| 潜江市| 张家港市| 新蔡县| 车险| 天峨县| 汉寿县| 迁西县| 平阳县| 涿鹿县| 临汾市| 寻甸| 祁阳县| 盈江县| 太仆寺旗| 潢川县| 湟源县| 嫩江县| 东乡县| 两当县| 建湖县| 来宾市| 抚宁县| 科技| 青川县| 井冈山市| 文安县| 青龙| 三穗县|