定点数
在数字硬件中,数字以二进制字形式存储。二进制字是固定长度的二进制数字(1 和 0)序列。硬件组件或软件函数解释这种 1 和 0 序列的方式由数据类型说明。定点数据类型和 MATLAB® 中的内置整数类型之间有几个明显的区别。最显著的区别是,内置整数数据类型只能代表整数,而定点数据类型还包含关于二进制小数点位置或数字定标的信息。
二进制数字以定点或浮点数据类型的形式来表示。定点数据类型具有以下特征:以位为单位的字大小、二进制小数点,以及是有符号还是无符号。二进制小数点的位置用来定标和解释定点值。使用 Fixed-Point Designer™ 时,定点数据类型可以是整数、小数或广义定点数。这些数据类型之间的主要区别是其默认二进制小数点。例如,广义定点数(有符号或无符号)的二进制表示如下所示:
其中
bi 是第 i 个二进制数字。
wl 是以位为单位的字长。
bwl-1 是最高有效位或最高位 (MSB) 的位置。
b0 是最低有效位或最低位 (LSB) 的位置。
二进制小数点显示在 LSB 左侧的四个位置处。因此,在此示例中,该数字称为有四个小数位,或者小数长度为 4。
二进制小数点的解释
二进制小数点是用于对定点数进行定标的方式。通常由软件确定二进制小数点。当执行加法或减法等基本数学运算时,无论定标因子的值如何,硬件都使用相同的逻辑电路。本质上,逻辑电路并不知道存在定标因子。它们视二进制小数点就在 b0 的右边一样来执行有符号或无符号定点二进制代数。
Fixed-Point Designer 支持常规二进制小数点定标 V=Q*2^E。V
是真实世界的值,Q
是存储的整数值,E
等于 -FractionLength
。换言之,RealWorldValue = StoredInteger * 2 ^ -FractionLength
。
FractionLength
定义存储的整数值的定标。字长限制存储的整数可取的值,但不限制 FractionLength
可取的值。软件不会根据存储的整数 Q
的字长限制指数 E
的值。由于 E
等于 -FractionLength
,因此没有必要将二进制小数点限制为要紧连着小数;小数长度可以是负数或大于字长。
例如,由三个无符号位组成的字在科学记数法中通常以下列方式之一表示。
如果指数大于 0 或小于 -3,则表示将包含许多零。
然而,这些额外的 0 永远不会变为 1,因此它们不会出现在硬件中。此外,与浮点指数不同,定点指数从不出现在硬件中,因此定点指数不受有限位数的限制。
例如,假设一个字长为 8、小数长度为 10、存储的整数值为 5 的有符号值(二进制值 00000101
)。真实值使用以下公式计算:
RealWorldValue = StoredInteger * 2 ^ -FractionLength
。在本例中,为 RealWorldValue = 5 * 2 ^ -10 = 0.0048828125
。由于小数长度比字长要长 2 位,因此存储的整数的二进制值是 x.xx00000101
,其中 x
是隐式零的占位符。0.0000000101
(二进制)等效于 0.0048828125
(十进制)。有关使用 fi
对象的示例,请参阅 小数长度大于字长 (Fixed-Point Designer)。
有符号定点数
计算机硬件通常用三种不同方式来表示二进制定点数的求反:原码、1 的补码和 2 的补码。2 的补码是有符号定点数的首选表示,也是 Fixed-Point Designer 使用的唯一表示。
使用 2 的补码求反时,先对位取反(转换为 1 的补码),然后加上一个 1。例如,000101 的 2 的补码是 111011。
定点值是有符号还是无符号通常不会在二进制字中显式编码;也就是说,没有符号位。但是,符号信息在计算机架构中是隐式定义的。