第三章-数据存储<Foundations of computer science>(Part Three )

2023-12-07 13:01

本文主要是介绍第三章-数据存储<Foundations of computer science>(Part Three ),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

例3.17


在十进制系统中,假设我们使用定点表示法,小数点右边有6位数字,小数点左边有10位数字,总共16位数字。在这个系统中,如果我们试图表示一个十进制数,如236154302345.00,那么实数的准确性就会丢失。系统将号码存储为
6154302345.00:积分部分比应有的要小得多

具有非常大的整数部分或非常小的小数部分的实数不应存储在定点表示中。

浮点表示法


保持准确性或精度的解决方案是使用浮点表示。
这种表示允许小数点浮动:小数点的左边或右边可以有不同的位数。使用这种方法可以存储的实数范围大大增加:具有大整数部分或小小数部分的数字可以存储在内存中。在浮点表示(十进制或二进制)中,一个数字由三个部分组成,如图3.10所示。

图3.10实数的三部分浮点表示法


第一部分是符号,或正或负。第二部分展示了小数点应该向左或向右移动多少位才能形成实际的数字。第三部分是一个定点表示,其中小数点的位置是固定的。

一个数字的浮点表示由三个部分组成:符号、移位符和定点数。

在科学中,浮点表示法用于表示非常小或非常大的十进制数。在这种称为scientif ic表示法的表示中,定点部分在小数点的左边只有一位数字,移位器是10的幂。

例3.18


下面显示了科学记数法(浮点表示)中的十进制数7 425 000 000 000 000 000 000 000.00:
 

解决方案

Actual number → + 7 425 000 000 000 000 000 000.00 
Scientific notation → + 7.425 × 1021 

这三个部分分别是符号(+),移位器(21)和定点部分(7.425)。
注意,移位器是指数。我们可以很容易地看到这样做的好处。即使我们只是想把数字写在一张纸上,科学记数法也更短,占用的空间更小。该表示法使用了浮点数的概念,因为小数点的位置(在示例中靠近右端)向左移动了21位,以使数字的定点部分变为定点部分。一些编程语言和计算器显示的数字是+7.425E21,因为基数10是可以理解的,不需要提及。

例3.19

以科学记数法显示数字-0.0000000000000232。


解决方案

我们使用与前面示例相同的方法—将小数点移到数字2后面,如下所示:

Actual number → - 0.0000000000000232 
Scientific notation → - 2.32 × 10−14 

请注意,这里的指数是负的,因为2.32中的小数点需要向左移动(14位)才能形成原始数字。同样,我们可以说,在这种符号中,数字由三部分组成:符号(-),实数(2.32)和负整数(-14)。一些编程语言和计算器将其表示为
-2.32 e-14。
类似的方法也被用于表示非常大或非常小的数字
(包括整数和实数)二进制,存储在计算机中。

例3.20

以浮点格式显示数字(1010010000000000000000000000000000000.00)2。


解决方案

我们使用同样的方法,在小数点的左边只保留一位数字

Actual number → + (101001000000000000000000000000000.00)2 
Scientific notation → + 1.01001 × 232 :

请注意,我们不必担心最右边的1右边的所有0,因为当我们使用实数(1.01001)2时,它们并不重要。指数显示为32,但它实际上以二进制形式存储在计算机中,我们很快就会看到。我们也将符号表示为正,但它将被存储为1位。

例3.21

以浮点格式显示数字-(0.00000000000000000000000101)2。


解决方案

我们用同样的方法,在小数点左边只保留一个非零的数字

Actual number → - (0.00000000000000000000000101)2 
Scientific notation → - 1.01 × 2-24

请注意,指数在计算机中以负二进制形式存储。
归一化

为了使表示的固定部分一致,科学方法(用于十进制)和浮点方法(用于二进制)在小数点的左边只使用一个非零数字。这叫做归一化。在十进制系统中,这个数字可以是1到9,而在二进制系统中,它只能是0或1。其中,d为非零数字,x为数字,y为0或1:

Decimal     ±                d.xxxxxxxxxxxxxx                Note: d is 1 to 9 and each x is 0 to 9 
Binary        ±                1.yyyyyyyyyyyyyy                 Note: each y is 0 or 1

符号,指数和尾数
二进制数规范化后,只存储有关该数的三条信息:符号、指数和尾数(小数点右侧的位)。例如,+1000111.0101变成:

Sign Exponent Mantissa
+ 26 × 1.0001110101
1 6 0001110101

注意,定点部分左边的点和位1不是存储的——它们是隐式的。

标志
数字的符号可以用1位(0或1)来存储。
指数
指数(2的幂)定义小数点的移位。注意,幂可以是负的也可以是正的。过剩表示(稍后讨论)是用于存储指数的方法。

尾数
尾数是小数点右边的二进制整数。它定义了数字的精度。尾数以定点表示法存储。如果我们把尾数和符号放在一起考虑,我们可以说这个组合被存储为符号和大小格式的整数,但是,我们需要记住,它不是整数——它是像整数一样存储的小数部分。我们强调这一点是因为在尾音中

如果在数字的右侧插入额外的0,则值不会改变,而在实整数中,如果在数字的左侧插入额外的0,则值不会改变。
尾数是一个小数部分,与符号一起,被视为存储在符号和大小表示中的整数。

超额系统

尾数可以存储为无符号整数。指数是表示小数点应该向左或向右移动多少位的幂,它是一个有符号数。
虽然这可以使用2的补码表示来存储,但这里使用了一种称为Excess系统的新表示。在Excess系统中,正整数和负整数都存储为无符号整数。为了表示正整数或负整数,在每个数字上加一个正整数(称为偏置),使它们均匀地移到非负侧。这个偏置的值是2m-1 -1,其中m是存储指数的内存位置的大小。

例3.22
我们可以在4位分配的数字系统中表示16个整数。使用一个位置表示0,并将其他15个位置分开(不完全相等),我们可以表示范围为-7到8的整数,如图3.11所示。通过给这个范围内的每个整数加7个单位,我们可以在不改变整数彼此的相对位置的情况下,将所有的整数均匀地向右平移,使它们都为正,如图所示。新系统被称为Excess-7,或偏置值为7的偏置表示。

与转换之前相比,这种新表示的优势在于,过剩系统中的所有整数都是正的,所以当我们对整数进行比较或操作时,我们不需要关心符号。对于4位分配,偏差是24-1 -1 = 7,正如我们所期望的那样。

IEEE标准

电气和电子工程师协会(IEEE)为存储浮点数定义了几个标准。我们在这里讨论两个最常见的,精度和双精度。这些格式如图3.12所示。方框上方的数字是每个字段的位数。

单精度格式总共使用32位来存储浮点表示的实数。符号占用1位(0表示正,1表示负),指数占用8位(使用127的偏置),尾数占用23位(无符号数)。这个标准有时被称为Excess_127,因为偏差是127。

双精度格式总共使用64位来存储浮点表示的实数。符号占用1位,指数占用11位(使用偏置)
1023),尾数使用52位。该标准有时被称为Excess_1023,因为偏差为1023。表3.2总结了两个标准的规格。

存储IEEE标准浮点数
实数可以用IEEE标准浮点格式之一存储,具体步骤参见图3.12:
将符号存储在S(0或1)中
改变数字为二进制。
正常化。
发现E和M的值
把S、E、M连接起来

例3.23
显示十进制数5.75的Excess_127(单精度)表示形式。

a,符号是正的,所以S = 0。

b.十进制到二进制转换:5.75 =(101.11)2。

c.归一化:(101.11)2 = (1.0111)2 × 22。
d. E = 2 + 127 = 129 = (10000001)2, M = 0111。我们需要在右边加19个0
M变成23位。

e.演示如下:

S            E                   M
0      10000001           01110000000000000000000

该数字在计算机中存储为01000000101110000000000000000000。
例3.24
显示十进制数-161.875的Excess_127(单精度)表示形式。

a,符号是负的,所以S = 1。
b.十进制到二进制的转换:161.875 = (10100001.111)

c.归一化:(10100001.111)2 = (1.0100001111)2 × 27。
d. E = 7 + 127 = 134 = (10000110)2, M =(0100001111)2。

e。表示:

S                 E                 M
1                10000110       01000011110000000000000

这篇关于第三章-数据存储<Foundations of computer science>(Part Three )的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/465980

相关文章

使用Python将JSON,XML和YAML数据写入Excel文件

《使用Python将JSON,XML和YAML数据写入Excel文件》JSON、XML和YAML作为主流结构化数据格式,因其层次化表达能力和跨平台兼容性,已成为系统间数据交换的通用载体,本文将介绍如何... 目录如何使用python写入数据到Excel工作表用Python导入jsON数据到Excel工作表用

Mysql如何将数据按照年月分组的统计

《Mysql如何将数据按照年月分组的统计》:本文主要介绍Mysql如何将数据按照年月分组的统计方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mysql将数据按照年月分组的统计要的效果方案总结Mysql将数据按照年月分组的统计要的效果方案① 使用 DA

鸿蒙中Axios数据请求的封装和配置方法

《鸿蒙中Axios数据请求的封装和配置方法》:本文主要介绍鸿蒙中Axios数据请求的封装和配置方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1.配置权限 应用级权限和系统级权限2.配置网络请求的代码3.下载在Entry中 下载AxIOS4.封装Htt

Python获取中国节假日数据记录入JSON文件

《Python获取中国节假日数据记录入JSON文件》项目系统内置的日历应用为了提升用户体验,特别设置了在调休日期显示“休”的UI图标功能,那么问题是这些调休数据从哪里来呢?我尝试一种更为智能的方法:P... 目录节假日数据获取存入jsON文件节假日数据读取封装完整代码项目系统内置的日历应用为了提升用户体验,

C# WinForms存储过程操作数据库的实例讲解

《C#WinForms存储过程操作数据库的实例讲解》:本文主要介绍C#WinForms存储过程操作数据库的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、存储过程基础二、C# 调用流程1. 数据库连接配置2. 执行存储过程(增删改)3. 查询数据三、事务处

Java利用JSONPath操作JSON数据的技术指南

《Java利用JSONPath操作JSON数据的技术指南》JSONPath是一种强大的工具,用于查询和操作JSON数据,类似于SQL的语法,它为处理复杂的JSON数据结构提供了简单且高效... 目录1、简述2、什么是 jsONPath?3、Java 示例3.1 基本查询3.2 过滤查询3.3 递归搜索3.4

MySQL大表数据的分区与分库分表的实现

《MySQL大表数据的分区与分库分表的实现》数据库的分区和分库分表是两种常用的技术方案,本文主要介绍了MySQL大表数据的分区与分库分表的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有... 目录1. mysql大表数据的分区1.1 什么是分区?1.2 分区的类型1.3 分区的优点1.4 分

Mysql删除几亿条数据表中的部分数据的方法实现

《Mysql删除几亿条数据表中的部分数据的方法实现》在MySQL中删除一个大表中的数据时,需要特别注意操作的性能和对系统的影响,本文主要介绍了Mysql删除几亿条数据表中的部分数据的方法实现,具有一定... 目录1、需求2、方案1. 使用 DELETE 语句分批删除2. 使用 INPLACE ALTER T

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

Redis 中的热点键和数据倾斜示例详解

《Redis中的热点键和数据倾斜示例详解》热点键是指在Redis中被频繁访问的特定键,这些键由于其高访问频率,可能导致Redis服务器的性能问题,尤其是在高并发场景下,本文给大家介绍Redis中的热... 目录Redis 中的热点键和数据倾斜热点键(Hot Key)定义特点应对策略示例数据倾斜(Data S