主要内容

舍入模式

当您以有限精度表示数字时,并非可用范围内的每个数字都可以精确表示。对定点数的任何运算结果通常都存储在比原始数字格式更长的寄存器中。要使结果恢复原始格式,将使用舍入方法将值转换为可表示的数字。Fixed-Point Designer™ 软件提供七种舍入模式,以便在为您的设计选择舍入模式时在成本和准确性之间提供灵活性:

  • Ceiling - 向正无穷方向舍入。

  • Convergent - 向最邻近的可表示值舍入,并将结值向最邻近的偶数舍入。

  • Floor - 向负无穷方向舍入。

  • Nearest - 舍入到最邻近的可表示值。

  • Round - 舍入到最接近的可表示数,遇到结值则根据值的符号进行舍入。

  • Simplest(仅限 Simulink®)- 组合舍入方法,用于获得更高效的生成代码。

  • Zero - 丢弃超出所需精度的位数。

有关如何选择舍入模式的详细信息,请参阅Choose a Rounding Mode

指定舍入模式

您可以使用整数舍入模式参数为定点 Simulink 模块(例如 Data Type Conversion 模块)指定舍入模式。

Block Parameters dialog box for the Data Type Conversion block. The Integer rounding mode drop-down is open.

MATLAB® 中提供与每种舍入模式对应的函数:

在构造 fimath 对象时,您也可以指定舍入模式。

Ceiling

当您向上舍入时,正数和负数都向正无穷舍入。这样做的结果会在数字中引入正的累积偏置。

您可以使用 ceil 函数向上舍入。

Plot of output stored integer value vs input real-world value using round to ceiling.

Convergent

收敛舍入向最邻近的可表示值舍入,并将结值向最邻近的偶数舍入,消除了因舍入而产生的偏差。但是,这种舍入方法可能引入溢出。

您可以使用 convergent 函数执行收敛舍入。

Plot of output stored integer value vs input real-world value using convergent rounding.

Floor

当您向下限舍入时,正数和负数都向负无穷舍入。这样做的结果会在数字中引入负的累积偏置。

您可以使用 floor 函数向下取整。

Plot of output stored integer value vs input real-world value using round to floor.

Nearest

当您向最邻近的方向舍入时,数字会舍入到最邻近的可表示值。在舍入机会均等的情况下,最邻近值朝正无穷方向舍入到最邻近的可表示数字。

您可以使用 nearest 函数舍入到最邻近的值。

Plot of output stored integer value vs input real-world value using nearest rounding.

Round

Round 舍入会舍入到最接近的可表示数字。如果是结值:

  • 正数朝正无穷方向舍入到最邻近的可表示数字。

  • 将负数朝负无穷方向舍入到最邻近的可表示数字。

因此:

  • 负值样本会引入小的负偏置。

  • 对于具有均匀分布的正值和负值的样本,不会引入偏置。

  • 对正值样本引入小的正偏置。

您可以使用 round 函数执行这种类型的舍入。

Plot of output stored integer value vs input real-world value using the round rounding mode.

Simplest

Simplest 舍入模式尝试减少或消除生成代码中额外的舍入代码。要了解有关 Simplest 舍入模式如何调整舍入行为的更多信息,请参阅Use Simplest Rounding for Efficient Generated Code。在几乎所有情况下,最简单的舍入模式会产生最高效的生成代码。此舍入模式仅在 Simulink 中可用。

Zero

向零舍入是计算上最简单的舍入模式。超出所需位数的所有位都将丢弃。向零舍入产生的数值的量级始终小于或等于更精确的原始值。

向零舍入会使正数的结果产生累积向下偏差,使负数的结果产生累积向上偏差。也就是说,所有正数都舍入为较小的正数,而所有负数都舍入为较大的负数。

您可以使用 fix 函数进行向零舍入。

Plot of output stored integer value vs input real-world value using the rounding mode zero.

向零舍入与截断

向零舍入和截断切割有时被视为相同。然而,对于无符号数和 2 的补码数,向零舍入和截断产生的结果并不相同。

例如,假设通过截断两个最低有效位将 5 位无符号数向零舍入。无符号数 100.01 = 4.25 截断为 100 = 4。因此,截断无符号数等效于向零舍入向下取整。

现在,假设通过截断两个最低有效位对一个 5 位 2 的补码数进行舍入。2 的补码数 100.01 = -3.75,向零舍入得 -3.00。然而,通过删除最后两位数来截断二进制字 100.01 = -3.75 得到 100 = -4,这与向下取整相同。

另请参阅

| | | | |

主题