第149章真正深入了解NBT-3 - Minecraft指令手册 - 你好MC - 游戏竞技小说 - 30读书

第149章真正深入了解NBT-3

在上一章,我们讲完了nbt数据类型中数值类型中的整形形式。按照作者我归纳的:

[字符]

字符串(string)

[数值]

{整形}

字节型(byte:b)

短整型(short:s)

整型(int:i)

长整型(long:l)

{浮点型(小数)}

单精度浮点型(float:f)

双精度浮点型(double:d)

[数据]

复合标签(compound)

列表(list)

[数组]

字节型数组(bytearray:[b])

整型数组(intarray:[i])

长整型数组(longarray:[l])

接下来就应该是小数(浮点数)了。

小数有两种数据类型,这两种类型我们都已经在之前的章节接触过,即:

单精度浮点型(float:f)

双精度浮点型(double:d)

在第一百三十二章,作者就讲过单精度浮点型和双精度浮点型的占用空间,即:

单精度浮点型——占用空间:32位(4字节)

双精度浮点型——占用空间:64位(8字节)

同时我也提了这两个类型的数值范围:

单精度浮点型:-3.4x10³⁸~3.4x10³⁸

双精度浮点型:-1.79769313486232x10³⁰⁸~1.79769313486232x10³⁰⁸

经过了上一章的了解,我们已经知道同样是32位占用空间的long长整形,它的数值范围达到了:

-(2⁶³)~2⁶³-1

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

但单精度浮点型却达到了:

-340'0000'0000'0000'0000'0000'0000'0000'0000'0000~340'0000'0000'0000'0000'0000'0000'0000'0000'0000(负三百四十涧至三百四十涧[注:一涧为万沟,一沟为万穰,一穰为万秭,一秭为万垓,一垓为万京])

为什么在相同的存储空间下,long长整形的数值范围才达到京的程度,而float单精度浮点型的数值范围却已经达到了涧的程度了呢?这到底是人性的扭曲还是道德的沦丧?

这还没完。我们知道,整数它规定一个最大范围,正负整数就都有其自己的最大值和最小值了。但小数不一样,你规定一个最大值,但它还可以无限增加它的小数位数,如:

1.76x10⁻⁹⁹⁹⁹⁹⁹⁹⁹⁹⁹⁹⁹⁹⁹⁹

这数虽然很小,但小到小数位数就有999'9999'9999'9999将近千兆位了。如果要表示这串数字,光是4b的空间是绝对不够的。所以,浮点数数值类型也有其自己的小数位数最大值:

单精度浮点型:45位小数位数

双精度浮点型:45位小数位数

看来小数位最大值都一样嘛。

刚才我们提了两个问题:

1.为什么在相同的空间下,long长整形的数值范围才达到京的程度,而float单精度浮点型的数值范围却已经达到了涧的程度了呢?

2.这到底是人性的扭曲还是道德的沦丧?

首先我们来解答第一个问题。

其实,不管是什么浮点数,管他是单精度、双精度还是三精度,它们都有一个标准,这个标准就是:ieee754-2008(ieee二进位浮点数算术标准)

这个标准规定了很多东西,想深入了解的话可以去百度百科上,这里就不细讲了。

其中,最重要的也是最简单的莫过于一个公式:

value=signbitxexponentbiasxfraction

即一个浮点数,等于符号位乘以指数偏移值再乘以分数值。

字体大小
主题切换