From d87c9b508480511670f39d814a907eae5ca5263c Mon Sep 17 00:00:00 2001 From: krahets Date: Wed, 22 Feb 2023 19:02:26 +0800 Subject: [PATCH] Add floating-point format in data_and_memory.md --- docs/chapter_array_and_linkedlist/array.md | 4 +- .../data_and_memory.assets/IEEE-754-float.png | Bin 0 -> 73937 bytes .../chapter_data_structure/data_and_memory.md | 82 +++++++++++++++--- .../algorithms_are_everywhere.md | 4 + docs/chapter_preface/contribution.md | 4 +- docs/chapter_sorting/intro_to_sort.md | 30 +++---- 6 files changed, 93 insertions(+), 31 deletions(-) create mode 100644 docs/chapter_data_structure/data_and_memory.assets/IEEE-754-float.png diff --git a/docs/chapter_array_and_linkedlist/array.md b/docs/chapter_array_and_linkedlist/array.md index f11d586dd..f5e80f211 100755 --- a/docs/chapter_array_and_linkedlist/array.md +++ b/docs/chapter_array_and_linkedlist/array.md @@ -110,8 +110,8 @@ comments: true

Fig. 数组元素的内存地址计算

-```java title="" -// 元素内存地址 = 数组内存地址 + 元素长度 * 元素索引 +```shell +# 元素内存地址 = 数组内存地址 + 元素长度 * 元素索引 elementAddr = firtstElementAddr + elementLength * elementIndex ``` diff --git a/docs/chapter_data_structure/data_and_memory.assets/IEEE-754-float.png b/docs/chapter_data_structure/data_and_memory.assets/IEEE-754-float.png new file mode 100644 index 0000000000000000000000000000000000000000..27b49d0a8eb431f04a44e954aed4da5c92d4ff6b GIT binary patch literal 73937 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 Table. Java 的基本数据类型

+- 「布尔」代表逻辑中的“是”与“否”,其占用空间需要具体根据编程语言确定,通常为 1 byte 或 1 bit ;
@@ -40,9 +34,74 @@ comments: true 以上表格中,加粗项在「算法题」中最为常用。此表格无需硬背,大致理解即可,需要时可以通过查表来回忆。 -**「基本数据类型」与「数据结构」之间的联系与区别** +### 整数表示方式 -我们知道,数据结构是在计算机中 **组织与存储数据的方式**,它的主语是“结构”,而不是“数据”。比如,我们想要表示“一排数字”,自然应该使用「数组」这个数据结构。数组的存储方式使之可以表示数字的相邻关系、先后关系等一系列我们需要的信息,但至于其中存储的是整数 int ,还是小数 float ,或是字符 char ,**则与所谓的数据的结构无关了**。 +整数的取值范围取决于变量使用的内存长度,即字节(或比特)数。在计算机中, 1 字节 (byte) = 8 比特 (bit) , 1 比特即 1 个二进制位。以 int 类型为例: + +1. 整数类型 int 占用 4 bytes = 32 bits ,因此可以表示 $2^{32}$ 个不同的数字; +2. 将最高位看作符号位,$0$ 代表正数,$1$ 代表负数,从而可以表示 $2^{31}$ 个正数和 $2^{31}$ 个负数; +3. 当所有 bits 为 0 时代表数字 $0$ ,从零开始增大,可得最大正数为 $2^{31} - 1$ ; +4. 剩余 $2^{31}$ 个数字全部用来表示负数,因此最小负数为 $-2^{31}$ ;具体细节涉及到到“源码、反码、补码”知识,有兴趣的同学可以查阅学习; + +其它整数类型 byte, short, long 取值范围的计算方法与 int 类似,在此不再赘述。 + +### 浮点数表示方式 * + +细心的你可能会疑惑: int 和 float 长度相同,都是 4 bytes ,**但为什么 float 的取值范围远大于 int** ?这是因为浮点数 float 采用了不同的表示方式。 + +IEEE 754 标准规定,32-bit 长度的 float 由以下部分构成: + +- 符号位 $\mathrm{S}$ :占 1 bit ; +- 指数位 $\mathrm{E}$ :占 8 bits ; +- 分数位 $\mathrm{N}$ :占 24 bits ,其中 23 位显式存储; + +设 32-bit 二进制数的第 $i$ 位为 $b_i$ ,则 float 值的计算方法定义为 + +$$ +\text { val } = (-1)^{b_{31}} \times 2^{\left(b_{30} b_{29} \ldots b_{23}\right)_2-127} \times\left(1 . b_{22} b_{21} \ldots b_0\right)_2 +$$ + +转化到十进制下的计算公式为 + +$$ +\text { val }=(-1)^{\mathrm{S}} \times 2^{\mathrm{E} -127} \times (1 + \mathrm{N}) +$$ + +其中 $\mathrm{S} \in \{-1, 1\}$ , $\mathrm{E} \in \{ 1, 2, \dots, 254 \}$ , $(1 + \mathrm{N}) = 1+\sum_{i=1}^{23} b_{23-i} 2^{-i} \subset [1, 2 - 2^{-23}]$ 。 + +![IEEE-754-float](data_and_memory.assets/IEEE-754-float.png) + +以上图为例,$\mathrm{S} = 0$ , $\mathrm{E} = 124$ ,$\mathrm{N} = 2^{-2} + 2^{-3} = 0.375$ ,易得 + +$$ +\text { val } = (-1)^0 \times 2^{124 - 127} \times (1 + 0.375) = 0.171875 +$$ + +现在我们可以回答开始的问题:**float 的表示方式包含指数位,导致其取值范围远大于 int** 。根据以上计算, float 可表示的最大正数为 $2^{127} \times (2 - 2^{-23}) \approx 3.4 \times 10^{38}$ ,切换符号位便可得到最小负数。 + +**浮点数 float 虽然拓展了取值范围,但副作用是牺牲了精度**。整数类型 int 将全部 32 位用于表示数字,数字是均匀分布的;而由于指数位的存在,浮点数 float 的数值越大,相邻两个数字之间的差值就会趋向越大。 + +进一步地,指数位 $E = 0$ 和 $E = 255$ 具有特殊含义,**用于表示零、无穷大、$\mathrm{NaN}$ 等**。 + +| 指数位 E | 分数位 $\mathrm{N} = 0$ | 分数位 $\mathrm{N} \ne 0$ | 计算公式 | +| ------------------ | ----------------------- | ---------------------------- | ------------------------------------------------------------ | +| $0$ | $\pm 0$ | 次正规数(subnormal number) | $(-1)^{\mathrm{S}} \times 2^{-126} \times (0.\mathrm{N})$ | +| $1, 2, \dots, 254$ | 正规数 | 正规数 | $(-1)^{\mathrm{S}} \times 2^{(\mathrm{E} -127)} \times (1.\mathrm{N})$ | +| $255$ | $\pm \infty$ | $\mathrm{NaN}$ | | + +特别地,次正规数显著提升了小数精度: + +- 最小正正规数为 $2^{-126} \approx 1.18 \times 10^{-38}$ ; +- 最小正次正规数为 $2^{-126} \times 2^{-23} \approx 1.4 \times 10^{-45}$ ; + +双精度 double 也采用类似 float 的表示方法,在此不再赘述。 + + +### 基本数据类型与数据结构的关系 + +我们知道,**数据结构是在计算机中组织与存储数据的方式**,它的主语是“结构”,而不是“数据”。如果我们想要表示“一排数字”,自然想到使用「数组」数据结构。数组的存储方式可以表示数字的相邻关系、顺序关系,但至于其中存储的是整数 int ,还是小数 float ,或是字符 char ,**则与所谓的数据的结构无关了**。 + +换言之,基本数据类型提供了数据的“内容类型”,而数据结构提供数据的“组织方式”。 === "Java" @@ -105,7 +164,6 @@ comments: true float decimals[10]; char characters[10]; bool booleans[10]; - ``` === "C#" diff --git a/docs/chapter_introduction/algorithms_are_everywhere.md b/docs/chapter_introduction/algorithms_are_everywhere.md index 491dce97b..dcf70805b 100644 --- a/docs/chapter_introduction/algorithms_are_everywhere.md +++ b/docs/chapter_introduction/algorithms_are_everywhere.md @@ -20,12 +20,16 @@ comments: true === "<1>" ![look_up_dictionary_step_1](algorithms_are_everywhere.assets/look_up_dictionary_step_1.png) + === "<2>" ![look_up_dictionary_step_2](algorithms_are_everywhere.assets/look_up_dictionary_step_2.png) + === "<3>" ![look_up_dictionary_step_3](algorithms_are_everywhere.assets/look_up_dictionary_step_3.png) + === "<4>" ![look_up_dictionary_step_4](algorithms_are_everywhere.assets/look_up_dictionary_step_4.png) + === "<5>" ![look_up_dictionary_step_5](algorithms_are_everywhere.assets/look_up_dictionary_step_5.png) diff --git a/docs/chapter_preface/contribution.md b/docs/chapter_preface/contribution.md index 90fed8af3..964c247f9 100644 --- a/docs/chapter_preface/contribution.md +++ b/docs/chapter_preface/contribution.md @@ -36,7 +36,7 @@ comments: true 你可以使用 Docker 来部署本项目。 -```bash +```shell git clone https://github.com/krahets/hello-algo.git cd hello-algo docker-compose up -d @@ -46,6 +46,6 @@ docker-compose up -d 使用以下命令即可删除部署。 -```bash +```shell docker-compose down ``` diff --git a/docs/chapter_sorting/intro_to_sort.md b/docs/chapter_sorting/intro_to_sort.md index 0b717159d..52cef38cc 100644 --- a/docs/chapter_sorting/intro_to_sort.md +++ b/docs/chapter_sorting/intro_to_sort.md @@ -25,22 +25,22 @@ comments: true 假设我们有一个存储学生信息的表格,第 1, 2 列分别是姓名和年龄。那么在以下示例中,「非稳定排序」会导致输入数据的有序性丢失。因此「稳定排序」是很好的特性,**在多级排序中是必须的**。 ```shell - # 输入数据是按照姓名排序好的 - # (name, age) - ('A', 19) - ('B', 18) - ('C', 21) - ('D', 19) - ('E', 23) +# 输入数据是按照姓名排序好的 +# (name, age) + ('A', 19) + ('B', 18) + ('C', 21) + ('D', 19) + ('E', 23) - # 假设使用非稳定排序算法按年龄排序列表, - # 结果中 ('D', 19) 和 ('A', 19) 的相对位置改变, - # 输入数据按姓名排序的性质丢失 - ('B', 18) - ('D', 19) - ('A', 19) - ('C', 21) - ('E', 23) +# 假设使用非稳定排序算法按年龄排序列表, +# 结果中 ('D', 19) 和 ('A', 19) 的相对位置改变, +# 输入数据按姓名排序的性质丢失 + ('B', 18) + ('D', 19) + ('A', 19) + ('C', 21) + ('E', 23) ``` ### 就地性