定点数
定点数 | |
---|---|
术语名称 | 定点数 |
英语名称 | fixed-point number |
定点整数 | |
---|---|
术语名称 | 定点整数 |
英语名称 | fixed-point integer |
定点小数 | |
---|---|
术语名称 | 定点小数 |
英语名称 | fixed-point fraction |
定点数(fixed-point number)是一类计算机内的数的表示方法(机器数)的统称。根据语境不同有两种层次含义。字面上地,约定固定的十进制或二进制的小数点位置,使要表示的数可以表示为整数;也广义地指,约定固定的缩放因子,使要表示的数可以表示为整数。前一种情况也可以看成缩放因子固定为 10 的幂或 2 的幂的后一种情况,即进行“十进制缩放”与“二进制缩放”。
例如,如果原数据表达的是以元为单位的商品单价,也就是说所有的数最多只会有小数点后两位。如果我们约定所有的小数点都被移动两位,或者说约定缩放因子为 1/100 ,就可以使用整数精确地表达原数据。
特别地,在缩放因子为 1 时,这一表示被称为定点整数;而缩放因子取整数时,无论其整数部分任意变化,真值都是整数,也称为(广义的)定点整数(fixed-point integer)。 与其相对的情况,缩放因子不是整数时,称为定点小数(fixed-point decimal)。
需要注意,由于“定点数 / fixed-point”一词根据常出现的语境不同,使用的通常定义有差别,其中定点整数和 fixed-point integer 的指代范围也随之存在差异。 考虑到两个短语有相同的字面含义和核心范围,且都和浮点数相对,本 wiki 中将其合入同一条目。
在中文语境中,“定点数”更经常出现在计算机体系结构和硬件设计相关的知识上下文中。 在这种情况下会严格采取前一种含义,“定点整数”也会严格指小数点就在最后一位数后的格式,也就是最常见的硬件整数表示形式。
在英文语境中,“fixed-point”更多地出现在算法、数值计算、财务计算应用等场景下,这些情况会采取后一种解释,也就是带缩放因子的整数,而定点整数也会使用广义的范围,指整数缩放因子的定点数。
定义
定点数(fixed-point number)是一类实数表示法,其将二进制下或十进制下小数点固定于某一位置,并存储一个整数 [math]\displaystyle{ I }[/math] 。形式上,固定小数点位置相当于在整数基础上乘以一个数,称为缩放因子 [math]\displaystyle{ S }[/math] 。此时整数 [math]\displaystyle{ I }[/math] 所表示的真值为 [math]\displaystyle{ V= IS }[/math] 。
定点整数
常见的整数表示,可以认为是约定小数点在最后一位后,或者说缩放因子 [math]\displaystyle{ S=1 }[/math] ,也视为一种定点数,此时称为定点整数。 由于其无小数部分,也被称为定点纯整数。
广义定点整数
对 [math]\displaystyle{ S\gt 1 }[/math] 的整数,所有的整数代表的真值都是一个缩放后的整数,此时也称为(广义的)定点整数(fixed-point integer)或缩放整数(scaled integer)。 通常 [math]\displaystyle{ S=2^k,k\gt 0 }[/math] 或 [math]\displaystyle{ S=10^k,k\gt 0 }[/math] 。
定点小数
考虑机器数存在表示范围,也就是用一些位数代替不同的数值。其中存在一个特殊格式,小数点位置固定在最高数值位左侧(也就是在数值位之前,符号位之后),则这个数的真值总是一个没有整数部分的纯小数,称为定点小数或定点纯小数。
广义定点小数
其他情况, [math]\displaystyle{ S }[/math] 不是整数或者 [math]\displaystyle{ S\lt 1 }[/math] 时,称为(广义的)定点小数(fixed-point decimal)。 通常 [math]\displaystyle{ S=2^k,k\in\mathbb{Z} }[/math] 或 [math]\displaystyle{ S=10^k,k\in\mathbb{Z} }[/math] 。
Q 格式
考虑全体表示范围,一般约定定点数表示时小数点左右侧分别的位数,这种表达称为 Q 格式。
相关计算
定点数可以直接当作整数进行加减法。进行乘除等其他运算时,需要额外考虑缩放因子带来的影响。
数的内部表示 | ||
---|---|---|
十进制数的二进制编码 | BCD 、 Gray 码 、 奇偶校验码 、 字符表示 | |
整数的机器数 | 定点整数 | 无符号定点整数 |
有符号定点整数(原码、反码、补码、移码) | ||
小数的机器数 | 定点小数、浮点数(IEEE 754) |