文档

金宝app定点数据支持的操作

Stateflow®Simulink中的金宝app图表®模型有一个动作语言属性,它定义了你用来计算定点数据的语法:

  • MATLAB®作为动作语言。

  • C作为动作语言。

有关更多信息,请参见作为动作语言的MATLAB和C的语法差异

二元运算

这个表根据优先级的顺序(0 =最高,9 =最低)总结了定点操作数上所有二进制操作的解释。二元运算是左结合的,因此在任何表达式中,具有相同优先级的运算符从左向右求值。

操作

优先级

MATLAB作为动作语言

C作为行动语言

A ^ b

0

权力。不支持使金宝app用不是2的整数幂的斜率或非零偏差定义的定点操作数。指数操作数必须是一个值为非负整数的常量。

权力。通过清除启用c位操作图表属性。看到启用c位操作

A * b

1

乘法。对于通过使用不是2的整数幂的斜率或非零偏差定义的定点操作数,指定图表fimath对象与ProductMode设置为SpecifyPrecision.看到乘法

乘法。不支持使金宝app用非零偏差定义的定点操作数。看到乘法

A / b

1

部门。不支持使金宝app用不是2的整数幂的斜率或非零偏差定义的定点操作数。看到部门

部门。不支持使金宝app用非零偏差定义的定点操作数。看到部门

A + b

2

加法。对于通过使用不是2的整数幂的斜率或非零偏差定义的定点操作数,指定图表fimath对象与SumMode设置为SpecifyPrecision.看到加减运算

加法。看到加减运算

A - b

2

减法。对于通过使用不是2的整数幂的斜率或非零偏差定义的定点操作数,指定图表fimath对象与SumMode设置为SpecifyPrecision.看到加减运算

减法。看到加减运算

A > b

3.

比较,大于。看到定点数据的关系运算

比较,大于。不支持偏金宝app差不匹配的定点操作数。看到定点数据的关系运算

A < b

3.

比较,不足。看到定点数据的关系运算

比较,不足。不支持偏金宝app差不匹配的定点操作数。看到定点数据的关系运算

A >= b

3.

比较,大于或等于。看到定点数据的关系运算

比较,大于或等于。不支持偏金宝app差不匹配的定点操作数。看到定点数据的关系运算

A <= b

3.

比较,小于或等于。看到定点数据的关系运算

比较,小于或等于。不支持偏金宝app差不匹配的定点操作数。看到定点数据的关系运算

A == b

4

比较,等于。看到定点数据的关系运算

比较,等于。不支持偏金宝app差不匹配的定点操作数。看到定点数据的关系运算

A ~= b

4

比较,不等于。看到定点数据的关系运算

比较,不等于。不支持偏金宝app差不匹配的定点操作数。看到定点数据的关系运算

A != b

4

不受支持金宝app的。使用操作A ~= b.看到定点数据的关系运算

比较,不等于。不支持偏金宝app差不匹配的定点操作数。看到定点数据的关系运算

A <> b

4

不受支持金宝app的。使用操作A ~= b.看到定点数据的关系运算

比较,不等于。不支持偏金宝app差不匹配的定点操作数。看到定点数据的关系运算

A & b

8

逻辑。看到定点数据的逻辑运算

逻辑。看到定点数据的逻辑运算

A || b

9

逻辑或。看到定点数据的逻辑运算

逻辑或。看到定点数据的逻辑运算

一元操作和动作

该表总结了定点操作数上的所有一元操作和动作的解释。一元操作:

  • 具有比二进制运算符更高的优先级。

  • 是右结合律,因此在任何表达式中,它们都是从右向左求值的。

操作

MATLAB作为动作语言

C作为行动语言

~一个

不受支持金宝app的。使用这样的表达A == cast(0,'like', A).看到定点数据的逻辑运算

逻辑。通过清除启用c位操作图表属性。看到定点数据的逻辑运算而且启用c位操作

!

不受支持金宝app的。使用这样的表达A == cast(0,'like', A).看到定点数据的逻辑运算

逻辑。看到定点数据的逻辑运算

——一个

负的。看到一元-

负的。看到一元-

+ +

不受支持金宝app的。使用这样的表达A = A +1

增量。相当于A = A +1

一个,

不受支持金宝app的。使用这样的表达A = A -1

减量。相当于A = A -1

赋值操作

下表总结了定点操作数上的赋值操作的解释。

操作

MATLAB作为动作语言

C作为行动语言

A = b

简单的任务。

简单的任务。

A:= b

不受支持金宝app的。要覆盖定点提升规则,请使用显式类型转换操作。看到类型转换操作

覆盖定点晋升规则的特殊任务。看到覆盖C图中的定点提升

A += b

不受支持金宝app的。使用这样的表达A = A +b

相当于A = A +b

A -= b

不受支持金宝app的。使用这样的表达A = A -b

相当于A = A -b

A *= b

不受支持金宝app的。使用这样的表达A = A *b

相当于A = A *b

A /= b

不受支持金宝app的。使用这样的表达A = A /b

相当于A = A /b

覆盖C图中的定点提升

在使用C作为动作语言的图表中,一个简单的形式赋值A = b的中间值b按定点晋升规则。然后将这个中间值转换为类型一个通过使用在线转换。看到定点运算提升规则而且转换操作.当两种类型的偏差和斜率相等或都是2的幂时,简单的分配是最有效的。

相反,一个特殊的赋值形式A:= b的类型覆盖此行为一个的值的结果类型b

  • 常数b转换为的类型一个通过使用脱机转换。

  • 表达式b最多只能包含一个算术运算符(+-,或/).结果是通过使用在线转换来确定的。

  • 如果b包含除算术运算或常数之外的任何内容,则特殊赋值运算的行为与简单赋值运算().

使用特殊赋值操作:=当你想:

请注意

使用特殊赋值操作:=可能导致生成的代码比使用普通的定点升级规则生成的代码效率低。

避免定点加法溢出

你可以使用特别分配操作:=在对两个定点数执行算术运算时避免溢出。例如,考虑一个计算总和的图表a + b在哪里一个= 212-1 = 4095而且b= 1

假设:

  • 两个输入都是带符号的16位定点数字,带有三个分数位(type3) fixdt(16日).

  • 输出c是带符号的32位定点数,具有三个分数位(类型fixdt(1、32、3)).

  • 生产目标的整数字大小为16位。

因为目标整数大小是16位,所以简单的赋值C = a+b在将和转换为32位之前,将输入相加为16位。中间结果是4096,作为类型3) fixdt(16日值,将导致溢出。

相比之下,特殊任务C:= a+b在计算和之前,将输入转换为32位。4096的结果被安全地计算为类型fixdt(1、32、3)值而不溢出。

提高定点分割的精度

你可以使用特别分配操作:=在两个定点数相乘或除法时得到更精确的结果。例如,考虑一个计算比率的图表a / b在哪里一个= 2而且b= 3

假设:

  • 输入一个是一个具有四个分数位(类型4) fixdt(16日).

  • 输入b是一个有三个分数位(类型3) fixdt(16日).

  • 输出c是带符号的16位不动点数,具有6个分数位(类型6) fixdt(16日).

输入对应于这些斜率和量化的整数:

年代一个= 24一个= 32

年代b= 23b= 24。

简单的作业C = a/b首先计算中间值a / b按定点晋升规则。量子化后的整数四舍五入:

年代int年代一个/年代b= 24/ 23= 2-1

int一个/b= 32/24≈1。

然后将中间结果转换为带有6个分数位的带符号的16位定点数:

年代c= 26= 1/64

c年代intint/年代c= 2-1/ 26= 25= 32。

因此,近似的真实世界值c V c年代cc= 32/64 = 0.5.这个结果不是2/3实际值的很好的近似值。

相比之下,特殊任务C:= a/b计算a / b直接表示为带符号的16位固定点数,有6个分数位。同样,量子化后的整数四舍五入:

年代c= 26= 1/64

c= (年代一个一个) / (年代c年代bb) = 128/3≈42。

因此,近似的真实世界值c V c年代cc= 42/64 = 0.6563.这个结果更接近2/3的实际值。

定点算法的结果比较

这个例子展示了状态流图中不动点算法的各种实现之间的区别。该模型包含三个计算比率的图表a / b在哪里一个= 19和b= 24。两个输入都是带符号的16位定点数字,带有一个分数位(type1) fixdt(16日).它们对应于这些斜率和量化的整数:

该模型计算的值a / b类型的浮点数1) fixdt(16日有三种不同的方式:

  • 使用MATLAB作为动作语言的图表中的类型转换操作。

  • 使用C语言作为操作语言的图表中的一个简单赋值操作。

  • 在使用C作为动作语言的图表中的一种特殊的赋值操作。

用MATLAB作为动作语言的图表类型转换

模型顶部的图表计算了的中间值a / b.中间值的量化整数被四舍五入到最接近的整数:

然后将中间值转换为带符号的16位定点数c有一个分数位:

这个图表的输出值是

用C语言作为动作语言的图表中的简单赋值

中间的图表还计算了的中间值a / b.在这种情况下,中间值的量化整数舍入到底数:

然后将中间值转换为带符号的16位定点数c有一个分数位:

这个图表的输出值是

用C语言作为动作语言的图表的特殊分配

模型底部的图表使用了表单的特殊赋值C:= a/b.除法的值直接计算为带一个分数位的带符号的16位定点数。量子化后的整数四舍五入:

因此,这个图表的输出值为

与19/24 = 0.7917的浮点答案相比,这三个结果显示精度下降。要将精度损失最小化到应用程序中可接受的水平,请调整定点数据中的编码方案。

相关的话题