首頁(yè) 游戲

Minecraft指令手冊(cè)

第一百三十七章 真正深入了解NBT-3

Minecraft指令手冊(cè) 你好MC 2038 2020-10-25 22:38:50

  在上一章,我們講完了NBT數(shù)據(jù)類(lèi)型中數(shù)值類(lèi)型中的整形形式。按照作者我歸納的:

  [字符]

  字符串(String)

  [數(shù)值]

  {整形}

  字節(jié)型(Byte:B)

  短整型(Short:S)

  整型(Int:I)

  長(zhǎng)整型(Long:L)

  {浮點(diǎn)型(小數(shù))}

  單精度浮點(diǎn)型(Float:F)

  雙精度浮點(diǎn)型(Double:D)

  [數(shù)據(jù)]

  復(fù)合標(biāo)簽(Compound)

  列表(List)

  [數(shù)組]

  字節(jié)型數(shù)組(Byte Array:[B])

  整型數(shù)組(Int Array:[I])

  長(zhǎng)整型數(shù)組(Long Array:[L])

  接下來(lái)就應(yīng)該是小數(shù)(浮點(diǎn)數(shù))了。

  小數(shù)有兩種數(shù)據(jù)類(lèi)型,這兩種類(lèi)型我們都已經(jīng)在之前的章節(jié)接觸過(guò),即:

  單精度浮點(diǎn)型(Float:F)

  雙精度浮點(diǎn)型(Double:D)

  在第一百三十二章,作者就講過(guò)單精度浮點(diǎn)型和雙精度浮點(diǎn)型的占用空間,即:

  單精度浮點(diǎn)型——占用空間:32位(4字節(jié))

  雙精度浮點(diǎn)型——占用空間:64位(8字節(jié))

  同時(shí)我也提了這兩個(gè)類(lèi)型的數(shù)值范圍:

  單精度浮點(diǎn)型:-3.4×103?~3.4×103?

  雙精度浮點(diǎn)型:-1.79769313486232×103??~1.79769313486232×103??

  經(jīng)過(guò)了上一章的了解,我們已經(jīng)知道同樣是32位占用空間的Long長(zhǎng)整形,它的數(shù)值范圍達(dá)到了:

  -(2?3)~2?3-1

  即:-922'3372'0368'5477'5808~922'3372'0368'5477'5807

  但單精度浮點(diǎn)型卻達(dá)到了:

  -340'0000'0000'0000'0000'0000'0000'0000'0000'0000~340'0000'0000'0000'0000'0000'0000'0000'0000'0000(負(fù)三百四十澗至三百四十澗[注:一澗為萬(wàn)溝,一溝為萬(wàn)穰,一穰為萬(wàn)秭,一秭為萬(wàn)垓,一垓?yàn)槿f(wàn)京])

  為什么在相同的存儲(chǔ)空間下,Long長(zhǎng)整形的數(shù)值范圍才達(dá)到京的程度,而Float單精度浮點(diǎn)型的數(shù)值范圍卻已經(jīng)達(dá)到了澗的程度了呢?這到底是人性的扭曲還是道德的淪喪?

  這還沒(méi)完。我們知道,整數(shù)它規(guī)定一個(gè)最大范圍,正負(fù)整數(shù)就都有其自己的最大值和最小值了。但小數(shù)不一樣,你規(guī)定一個(gè)最大值,但它還可以無(wú)限增加它的小數(shù)位數(shù),如:

  1.76×10????????????????

  這數(shù)雖然很小,但小到小數(shù)位數(shù)就有999'9999'9999'9999將近千兆位了。如果要表示這串?dāng)?shù)字,光是4B的空間是絕對(duì)不夠的。所以,浮點(diǎn)數(shù)數(shù)值類(lèi)型也有其自己的小數(shù)位數(shù)最大值:

  單精度浮點(diǎn)型:45位小數(shù)位數(shù)

  雙精度浮點(diǎn)型:45位小數(shù)位數(shù)

  看來(lái)小數(shù)位最大值都一樣嘛。

  剛才我們提了兩個(gè)問(wèn)題:

  1.為什么在相同的空間下,Long長(zhǎng)整形的數(shù)值范圍才達(dá)到京的程度,而Float單精度浮點(diǎn)型的數(shù)值范圍卻已經(jīng)達(dá)到了澗的程度了呢?

  2.這到底是人性的扭曲還是道德的淪喪?

  首先我們來(lái)解答第一個(gè)問(wèn)題。

  其實(shí),不管是什么浮點(diǎn)數(shù),管他是單精度、雙精度還是三精度,它們都有一個(gè)標(biāo)準(zhǔn),這個(gè)標(biāo)準(zhǔn)就是:IEEE 754-2008(IEEE二進(jìn)位浮點(diǎn)數(shù)算術(shù)標(biāo)準(zhǔn))

  這個(gè)標(biāo)準(zhǔn)規(guī)定了很多東西,想深入了解的話(huà)可以去百度百科上,這里就不細(xì)講了。

  其中,最重要的也是最簡(jiǎn)單的莫過(guò)于一個(gè)公式:

  Value=sign bit×exponent bias×fraction

  即一個(gè)浮點(diǎn)數(shù),等于符號(hào)位乘以指數(shù)偏移值再乘以分?jǐn)?shù)值。

  看不懂是吧?其實(shí),浮點(diǎn)數(shù)的表示方法就是用到了我們?cè)趯W(xué)前班就學(xué)到過(guò)的“科學(xué)計(jì)數(shù)法”。

  比如我們的單精度浮點(diǎn)型,它的32個(gè)位分別是:

  0'00000000'00000000000000000000000

 ?。ǚ?hào)位:1)'(階碼:8)'(尾數(shù):23)

  看來(lái)還是看不懂啊。算了,總之,是因?yàn)楦↑c(diǎn)數(shù)采用了科學(xué)計(jì)數(shù)法的方式來(lái)存儲(chǔ),才可以在32位的空間內(nèi)塞入這么大的數(shù)值。

  這就是第一個(gè)問(wèn)題的答案。

  第二個(gè)問(wèn)題的答案就非常簡(jiǎn)單了,是:無(wú)法確定,因?yàn)槿祟?lèi)的情緒是無(wú)法用語(yǔ)言準(zhǔn)確表達(dá)出來(lái)的,最多也只能表達(dá)個(gè)大概。

  現(xiàn)在我們知道浮點(diǎn)數(shù)使用的是科學(xué)計(jì)數(shù)法來(lái)存儲(chǔ)。這種存儲(chǔ)方法有利也有弊:利在于可存儲(chǔ)數(shù)值的范圍擴(kuò)大了很多;但弊也有,就是能準(zhǔn)確存儲(chǔ)的數(shù)值范圍縮小了。

  啥意思呢?剛才說(shuō)過(guò),Long長(zhǎng)整形的數(shù)值范圍是:

  -922'3372'0368'5477'5808~922'3372'0368'5477'5807

  在這個(gè)范圍內(nèi),存儲(chǔ)的數(shù)值都是非常準(zhǔn)確的,不會(huì)你給了個(gè)在這個(gè)范圍內(nèi)的數(shù),計(jì)算機(jī)就在后臺(tái)為了方便給你這個(gè)數(shù)四舍五入或者砍了幾個(gè)0。因此,我們就把這個(gè)Long長(zhǎng)整形的數(shù)值范圍又叫做Long長(zhǎng)整形的有效數(shù)值范圍。

  但浮點(diǎn)數(shù)就不一樣了,由于使用科學(xué)計(jì)數(shù)法存儲(chǔ),導(dǎo)致數(shù)值范圍看起來(lái)很大,但實(shí)際有效數(shù)值范圍只有那么一點(diǎn)點(diǎn):

  單精度浮點(diǎn)型:7位(整數(shù))

  雙精度浮點(diǎn)型:16位(整數(shù))

  對(duì)比一下Long長(zhǎng)整形的有效數(shù)值范圍:19位(整數(shù))

  哦天哪!這浮點(diǎn)數(shù),就像是MC的真區(qū)塊和假區(qū)塊一樣——?jiǎng)e看MC邊長(zhǎng)可以達(dá)到21'4748'3647×21'4748'3647,實(shí)際上有效游玩范圍只有2999'9999×2999'9999,出去了就各種BUG、特性、崩壞,可能時(shí)不時(shí)還跳出個(gè)桌面。

  這就告訴了我們一個(gè)人間真理:

  很多時(shí)候,國(guó)產(chǎn)游戲廣告的內(nèi)容看起來(lái)很牛逼,實(shí)際上真實(shí)游戲內(nèi)容只有宣傳其中的1%都不到。

  嗯,這很資本家。

  好了,回到正題。我們目前已經(jīng)知道了兩個(gè)浮點(diǎn)型的數(shù)值范圍、小數(shù)位數(shù)最大值、有效數(shù)值范圍和占用存儲(chǔ)空間。但別忘了,很多NBT數(shù)據(jù)類(lèi)型都有類(lèi)型字母的,我們的兩個(gè)浮點(diǎn)型也不例外,都有自己的字母:

  單精度浮點(diǎn)型:f

  雙精度浮點(diǎn)型:d

  具體用法就不再多說(shuō)了。

  我們知道,浮點(diǎn)數(shù)是可以表示整數(shù)也可以表示小數(shù)的。那么在表示整數(shù)時(shí),我們要不要加上小數(shù)點(diǎn)呢?

  答案是加不加都可以,當(dāng)然最好是加上。

  總而言之,兩個(gè)浮點(diǎn)型的特性分別是——

  單精度浮點(diǎn)型:

  1.數(shù)值范圍為-3.4×103?~3.4×103?

  2.占用空間32位(4字節(jié))

  3.使用IEEE 754-2008標(biāo)準(zhǔn)

  4.小數(shù)位數(shù)最大值位45位

  5.有效數(shù)值范圍為7位整數(shù)

  6.類(lèi)型字母位f

  7.小數(shù)部分都為0時(shí)(即值為整數(shù)),可不加小數(shù)點(diǎn),但最好要加上。

  雙精度浮點(diǎn)型:

  1.數(shù)值范圍為-1.79769313486232×103??~1.79769313486232×103??

  2.占用空間64位(8字節(jié))

  3.使用IEEE 754-2008標(biāo)準(zhǔn)

  4.小數(shù)位數(shù)最大值位45位

  5.有效數(shù)值范圍為16位整數(shù)

  6.類(lèi)型字母位d

  7.小數(shù)部分都為0時(shí)(即值為整數(shù)),可不加小數(shù)點(diǎn),但最好要加上。

按 “鍵盤(pán)左鍵←” 返回上一章  按 “鍵盤(pán)右鍵→” 進(jìn)入下一章  按 “空格鍵” 向下滾動(dòng)
目錄
目錄
設(shè)置
設(shè)置
書(shū)架
加入書(shū)架
書(shū)頁(yè)
返回書(shū)頁(yè)
指南