主要内容

算术运算

笔记

这些部分将帮助您了解哪些数据类型和缩放选择会导致溢出或精度损失。

模运算

二进制数学是以模运算为基础的。模算术只使用一个有限的数字集,将位于给定集之外的任何计算结果包装回给定集。

例如,普通的日常时钟使用模12算法。这个系统中的数字只能是1到12。因此,在“时钟”系统中,9加9等于6。这可以更容易地想象成一个数字圆:

类似地,二进制数学只能使用数字0和1,任何超出这个范围的算术结果都被“绕圈”为0或1。

二进制补码

二的补码是解释二进制数的一种方法。在2的补码中,正数总是以0开头,负数总是以1开头。如果一个2的补数的前导位为0,则通过计算该数的标准二进制值来获得该值。如果一个2的补数的前导位是1,则通过假设最左边的位是负数来获得该值,然后计算该数的二进制值。例如,

01 = ( 0 + 2. 0 ) = 1. 11 = ( ( 2. 1. ) + ( 2. 0 ) ) = ( 2. + 1. ) = 1.

用二的补数计算二进制数的负数,

  1. 取“1”的补码,或者“翻转比特”。

  2. 添加一个2^(-FL)使用二进制数学,在哪里FL为分数长度。

  3. 丢弃超出原始字长的任何位。

例如,考虑采取11010(-6)的负面。首先,采取数字的补充,或翻转比特:

11010 00101

接下来,添加一个1,将所有数字包装为0或1:

00101 + 1. ¯ 00110 ( 6. )

加法和减法

定点数的加法要求加数的二进制点对齐。然后使用二进制算术进行加法,以便不使用0或1以外的数字。

例如,考虑添加010010.1(18.5),0110.110(6.75):

010010.1 + 0110.110 ¯ 11001.010 ( 18.5 ) ( 6.75 ) ( 25.25 )

当对任何负数使用两个的补值时,定点减法等价于加法。在减法中,加数必须进行符号扩展以匹配彼此的长度。例如,考虑用010010.1(18.5)减去0110.110 (6.75):

10010.100 0110.110 ¯ ( 18.5 ) ( 6.75 )

默认的fimath值为1.(真正的)卡斯特福雷苏姆酒店属性。这会在加法之前将加数强制转换为总和数据类型。因此,在加法过程中,无需进一步移位以对齐二进制点。

如果卡斯特福雷苏姆酒店价值0(false),添加量保持完全精度。加完后,和被量子化。

乘法

两个补码定点数的乘法直接类似于常规的十进制乘法,但中间结果必须进行符号扩展,以便在将它们相加之前,它们的左侧对齐。

例如,考虑10.11(- 1.25)与011(3)的乘法:

乘法数据类型

下图显示了使用定点设计器进行定点乘法时使用的数据类型™ 这些图表说明了用于实数、复数实数和复数乘法的数据类型之间的差异。

真乘法。下图显示了工具箱在两个实数的乘法中使用的数据类型。该软件在产品数据类型中返回此操作的输出,这些操作由其管理菲马斯对象ProductMode所有物

实复数乘法。下图显示了工具箱在乘法和复杂的定点号的乘法中使用的数据类型。实际复杂和复杂的实际乘法是等效的。该软件在产品数据类型中返回此操作的输出,这些操作由其管理菲马斯对象ProductMode财产:

复杂复杂的乘法。下图显示了两个复定点数的乘法。软件以求和数据类型返回此操作的输出,该数据类型由菲马斯对象总和属性。中间产品数据类型由菲马斯对象ProductMode所有物

菲马斯对象卡斯特福雷苏姆酒店属性是真的,对sum数据类型的强制转换出现在上图中的乘法器之后

acc =交流;acc - =双相障碍;

对于减法,和

acc=ad;acc+=bc;

对于加法器,在哪里行政协调会是蓄电池。当卡斯特福雷苏姆酒店属性是,则不存在强制转换,并且在执行减法和加法操作之前,数据仍保留在产品数据类型中。

用fimath乘法

在下面的例子中,让

F=fimath('ProductMode',“FullPrecision”,...“SumMode”,“FullPrecision”);t1 = numerictype('wordlength',24,“分形长度”,20);T2=数字类型('wordlength', 16岁,“分形长度”10);

真实*真实。注意结果的单词长度和分数长度Z分别等于被乘数的单词长度和分数长度的和。这是因为菲马斯总和ProductMode属性设置为全精度:

P = fipref;P.FimathDisplay =“没有”;x = fi (5, T1, F)
x = 5 DataTypeMode:定点:二进制点缩放Signedness: Signed WordLength: 24 FractionLength: 20
y=fi(10,T2,F)
y = 10数据表:定点:二进制点缩放签名:签名WordLength:16 FractionLength:10
z = x * y
z=50 DataTypeMode:定点:二进制点缩放符号性:符号字长:40 FractionLength:30

真实*复杂。注意结果的单词长度和分数长度Z分别等于被乘数的单词长度和分数长度的和。这是因为菲马斯总和ProductMode属性设置为全精度:

x = fi (5, T1, F)
x = 5 DataTypeMode:定点:二进制点缩放Signedness: Signed WordLength: 24 FractionLength: 20
y = fi (10 + 2, T2, F)
Y = 10.0000 + 2.0000I数据否示:FIXINE  -  POINT:二进制点缩放签名:签名WordLength:16 FractionLength:10
z = x * y
z = 50.0000 +10.0000i DataTypeMode:定点:二进制点缩放Signedness: Signed WordLength: 40 FractionLength: 30

复杂,复杂。复数乘法包括加法和乘法。因此,全精度结果的字长比被乘数的字长之和多一位:

x = fi(5 + 6我,T1, F)
x = 5.0000 + 6.0000i数据表:固定点:二进制点缩放签名:签名WordLength:24 FractionLength:20
y = fi (10 + 2, T2, F)
Y = 10.0000 + 2.0000I数据否示:FIXINE  -  POINT:二进制点缩放签名:签名WordLength:16 FractionLength:10
z = x * y
z = 38.0000 + 70.0000i数据表:固定点:二进制点缩放签名:签名WordLength:41 FractionLength:30

数据类型转换

这个菲马斯对象允许您使用下载188bet金宝搏总和ProductMode属性。重要的是要记住当你设置时每个演员的后果总和ProductMode属性。根据您选择的数据类型,可能会发生溢出和/或舍入。下面的两个示例演示了可能发生溢出和舍入的情况。

笔记

有关类型转换的更多示例,请参见演员fi对象.

将短数据类型转换为长数据类型

考虑将一个非零数(由一个带有两个小数位的4位数据类型表示)转换为一个带有七个小数位的8位数据类型:

如图所示,源位向上移动,以便二进制点与目标二进制点位置相匹配。最高源位不匹配,因此可能发生溢出,结果可能饱和或绕包。目标数据类型末尾的空位用0或1填充:

  • 如果没有溢出,则用0填充空位。

  • 如果发生包裹,则空位填充为0。

  • 如果发生饱和,

    • 正数的空位用1填充。

    • 负数的空位用0填充。

您可以看到,即使使用从较短的数据类型转换为更长的数据类型,仍然可能发生溢出。当源数据类型的整数长度(在这种情况下两个)长于目标数据类型的整数长度(在这种情况下,这可能发生这种情况。类似地,即使从较短的数据类型投射到较长的数据类型,如果目标数据类型和缩放具有比源更少的分数位,也可能需要舍入。

将较长数据类型转换为较短数据类型

考虑将一个非零数(由一个8位数据类型和7个小数位数表示)转换为一个4位数据类型和两个小数位数:

如图所示,源位下移,以便二进制点与目标二进制点位置匹配。源中没有最高位的值,因此使用符号扩展来填充目标数据类型的整数部分。符号扩展是将具有最高有效值的位相加位到2的补码的高端。符号扩展不会更改二进制数的值。在本例中,源的底部五位不适合目标的小数长度。因此,当结果四舍五入时,精度可能会丢失。

在这种情况下,即使强制转换是从较长的数据类型转换为较短的数据类型,所有整数位都将保持不变。相反,即使转换为较短的数据类型,只要目标数据类型的分数长度与源数据类型的分数长度相同或更长,也可以保持完全精度。然而,在这种情况下,结果高端的位丢失,可能发生溢出。

最坏的情况是,目标数据类型的整数长度和小数长度都小于源数据类型的整数长度和小数长度以及缩放。在这种情况下,可能会发生溢出和精度损失。