范围和精度
数字的范围给出了表示的范围,精度则给出了表示中连续数字之间的距离。定点数的范围和精度取决于字长和定标。
注意
您必须注意您选择的定点数据类型和定标的精度和范围,以了解是否调用舍入方法或是否发生上溢或下溢。
范围
范围是定点数据类型和定标可以表示的数字范围。范围是有限制的,因为定点字的大小有限制。
下图说明了字长值为 、定标值为 和偏置值为 的 2 的补码定点数的可表示范围,其中 、 和 的值允许负数和正数。
对于任何数据类型的有符号和无符号定点数,不同位模式的数量都为 2wl。
例如,采用 2 的补码方法时,需要表示负数和零,因此最大值为 2wl -1 – 1。由于零只有一种表示,因此正数和负数的数量不相等。这意味着存在一个 的表示,但没有 的表示:
范围限制
由于定点数据类型表示有限范围内的数字,因此如果运算结果大于或小于该范围内的数字,则可能发生上溢和下溢。
在二进制算术中,处理器可能需要接受一个 n 位定点数,并将其存储在 m 个位中,其中 。如果 m < n,则说明该数字的范围缩小了,运算可能会产生溢出情况。一些处理器将这种情况识别为 Inf
或 NaN
。对于其他处理器,尤其是数字信号处理器 (DSP),会对值进行饱和或绕回处理。
Fixed-Point Designer™ 软件允许您对溢出进行饱和或绕回处理。饱和将正溢出表示为正在使用的范围中的最大正数,将负溢出表示为正在使用的范围中的最大负数。绕回使用模算术将溢出转换回数据类型的可表示范围。
创建 fi
对象时,任何溢出都会经过饱和处理。默认 fimath 的 OverflowAction
属性为 saturate
。您可以通过将 fipref
对象的 LoggingMode
属性设置为 on
来记录上溢和下溢。
如果 m > n,则说明该数的范围扩大了。扩展字的范围需要包含保护位,用于防止潜在的溢出。
Simulink® 软件支持所有定点数据类型的饱和与绕回,而保护位仅支持小数数据类型。
精度
定点数的精度是其数据类型和定标可表示的连续值之间的差值。最低有效位的值(因此也是数字的精度)由小数位数决定。定点值的误差小于等于其数据类型和定标所确定精度的一半。
例如,二进制小数点右侧具有四位的定点表示的精度为 2-4(即 0.0625),这是其最低有效位的值。此数据类型和定标范围内的任何数字的误差都小于等于 (2-4)/2(即 0.03125),即精度的一半。这是以有限精度表示数字的示例。
精度限制
定点字的精度取决于字长和二进制小数点位置。例如,假设您必须用定点数来表示真实数字 35.375。使用斜率偏置编码方案,其表示为
其中 V = 35.375.
最接近真实值的两个逼近是 Q = 13 和 Q = 14:
在任一情况下,绝对误差都是相同的:
对于有限范围内的定点值,如果使用舍入到最邻近的值,这表示最差情形误差。如果使用其他舍入模式,最差情形误差可能是原来的两倍:
扩展字的精度可以用更多位来完成,但这种方法面临着实际的限制。更好的做法是,您必须仔细选择数据类型、字长和定标,以便准确地表示数字。在处理器上,一般使用舍入和尾随零填充来处理二进制字的精度。
定点数据类型参数
下表给出了 二进制小数点定标 中讨论的受支持的定点数据类型的下限、上限和默认纯二进制小数点定标。
定点数据类型范围和默认定标
名称 | 数据类型 | 下限 | 上限 | 默认定标(~精度) |
---|---|---|---|---|
无符号整数 |
| 0 |
| |
有符号整数 |
|
| ||
无符号二进制小数点 |
| 0 | ||
有符号二进制小数点 |
| |||
无符号斜率偏置 |
|
| s | |
有符号斜率偏置 |
| s |
s = 斜率,b = 偏置,ws = 字长,fl = 小数长度
8 位定点数据类型的范围和精度 - 纯二进制小数点定标
下表列出了使用纯二进制小数点定标的 8 位广义定点数据类型的精度、有符号值的范围和无符号值的范围。请注意,第一个定标值 (21) 表示不与字紧连的二进制小数点。
定标 | 精度 | 有符号值的范围(下限、上限) | 无符号值的范围(下限、上限) |
---|---|---|---|
21 | 2.0 | -256, 254 | 0, 510 |
20 | 1.0 | -128, 127 | 0, 255 |
2-1 | 0.5 | -64, 63.5 | 0, 127.5 |
2-2 | 0.25 | -32, 31.75 | 0, 63.75 |
2-3 | 0.125 | -16, 15.875 | 0, 31.875 |
2-4 | 0.0625 | -8, 7.9375 | 0, 15.9375 |
2-5 | 0.03125 | -4, 3.96875 | 0, 7.96875 |
2-6 | 0.015625 | -2, 1.984375 | 0, 3.984375 |
2-7 | 0.0078125 | -1, 0.9921875 | 0, 1.9921875 |
2-8 | 0.00390625 | -0.5, 0.49609375 | 0, 0.99609375 |
8 位定点数据类型的范围和精度 - 斜率和偏置定标
下表列出了使用斜率与偏置定标的 8 位定点数据类型的精度、有符号值的范围和无符号值的范围。斜率从值 1.25
开始,所有斜率的偏置均为 1.0
。请注意,斜率与精度相同。
偏置 | 斜率/精度 | 有符号值的范围(下限、上限) | 无符号值的范围(下限、上限) |
---|---|---|---|
1 | 1.25 | -159, 159.75 | 1, 319.75 |
1 | 0.625 | -79, 80.375 | 1, 160.375 |
1 | 0.3125 | -39, 40.6875 | 1, 80.6875 |
1 | 0.15625 | -19, 20.84375 | 1, 40.84375 |
1 | 0.078125 | -9, 10.921875 | 1, 20.921875 |
1 | 0.0390625 | -4, 5.9609375 | 1, 10.9609375 |
1 | 0.01953125 | -1.5, 3.48046875 | 1, 5.98046875 |
1 | 0.009765625 | -0.25, 2.240234375 | 1, 3.490234375 |
1 | 0.0048828125 | 0.375, 1.6201171875 | 1, 2.2451171875 |