组词大全

什么是定点数,它分为哪些种类?

什么是定点数,它分为哪些种类?

好的,我们来详细解释一下定点数的概念和种类。

1. 什么是定点数?

定点数 是一种在计算机中表示实数(即带有小数部分的数)的方式。它的核心特点是 小数点的位置在存储和运算过程中是固定不变的

这与我们熟悉的 浮点数(如 float, double)形成鲜明对比,浮点数的小数点位置是可以“浮动”的,通过指数部分来动态调整,从而能够表示极大或极小的数值范围。

定点数的核心思想:
将一个实数视为一个整数,然后通过隐含地指定一个缩放因子(通常是2的幂次,如2^n)来决定小数点的位置。这个缩放因子是固定的。

通俗理解:
你可以把存储定点数的内存空间想象成一个没有小数点的整数。我们只是 事先约定 这个整数的某一位之前是小数部分。例如,我们约定一个16位数,其中低8位表示小数部分,那么它的格式就是整数部分.小数部分 = 8.8。

例子:
假设我们用8位二进制表示定点数,并约定小数点固定在中间(即前4位是整数,后4位是小数)。

二进制数 0011 1100 如何解读?

如果当作普通整数:00111100 = 60(十进制)。

作为定点数(格式4.4):我们需要将其除以 2^4 = 16。

所以,它表示的实数值是 60 / 16 = 3.75。

 

2. 定点数的优点与缺点

优点:

运算速度快,硬件简单: 加减运算可以直接使用整数ALU(算术逻辑单元),乘法也只需普通的整数乘法,最后再进行移位调整。不需要复杂的浮点运算单元。

确定性高: 没有浮点数舍入误差的“非直观性”,在精度范围内结果是精确和可预测的,特别适合金融、货币计算。

功耗低: 对于嵌入式系统、DSP(数字信号处理器)、FPGA等资源受限的场景非常友好。

缺点:

动态范围有限: 由于小数点是固定的,无法同时表示非常大的数和非常小的数。要扩大范围,必须增加总的位数。

需要预先规划精度: 设计时必须仔细权衡整数部分和小数部分的位宽,以适应应用中的所有可能数值。一旦确定,在程序运行时很难改变。

编程相对繁琐: 需要程序员手动管理缩放、溢出和舍入问题。

3. 定点数的种类

定点数主要根据其符号性和表示格式进行分类:

A. 根据是否有符号分类

无符号定点数: 所有位都用于表示数值本身,只能表示非负数(零和正数)。

有符号定点数: 可以表示负数。通常采用 二进制补码 形式,最高位为符号位。这是最常见的格式。

B. 根据小数点位约定格式分类(这是最核心的分类方式)

通常用 Qm.nQn 格式来标记。其中 m 表示整数部分的位数(不包括符号位),n 表示小数部分的位数。总位数 = 符号位(1位,如果有) + m + n

Q格式表示法(最常用):

Q15 / Q1.15: 表示在一个16位有符号数中,有1位符号位,0位整数位,15位小数位。数值范围约为 [-1, 1 - 2^{-15}]。常见于音频处理。

Q31 / Q1.31: 32位有符号数,1位符号位,0位整数位,31位小数位。精度更高。

Q7.8: 在一个16位有符号数中,1位符号位,7位整数位,8位小数位。数值范围约为 [-128, 128 - 2^{-8}],精度为 1/256。

Q23.8: 在一个32位有符号数中,1位符号位,23位整数位,8位小数位。

 

纯整数定点数:

可以看作是 Qm.0 格式,即小数部分位数为0。这就是普通的整数。

 

纯小数定点数:

可以看作是 Q0.nQn 格式(当整数部分只有符号位时)。专门用于表示绝对值小于1的数。

 

4. 定点数的运算

定点数的运算需要程序员或编译器在后台进行“缩放调整”。

加减法: 参与运算的两个数必须具有 相同的Q格式(即小数点对齐)。可以直接使用整数加减法指令。

乘法: 两个定点数(格式分别为 QaQb)相乘,结果会变成一个 Q(a+b) 格式的数,其位数是两者的和。通常需要将结果右移或截断,以保持目标格式。

例如:Q15 * Q15 得到一个 Q30 的数,通常右移15位变回 Q15

 

除法: 更复杂,通常通过将被除数左移(扩大)后再进行整数除法来实现。

应用场景

数字信号处理: 音频编解码、图像处理、滤波器实现。

嵌入式系统和微控制器: 没有硬件FPU的场合。

游戏开发: 早期的3D游戏(如 PlayStation 1)或对性能要求极高的物理计算,会使用定点数学来保证速度和确定性。

金融和区块链: 货币计算(如以太坊的 Solidity 语言没有浮点数,常用 uint256 来表示带有18位小数的定点数)。

总结对比

相关成语


成语首拼