金宝app定点数据支持的操作
Stateflow®Simulink中的金宝app图表®模型有一个动作语言属性,它定义了你用来计算定点数据的语法:
MATLAB®作为动作语言。
C作为动作语言。
有关更多信息,请参见作为动作语言的MATLAB和C的语法差异.
二元运算
这个表根据优先级的顺序(0 =最高,9 =最低)总结了定点操作数上所有二进制操作的解释。二元运算是左结合的,因此在任何表达式中,具有相同优先级的运算符从左向右求值。
操作 | 优先级 |
MATLAB作为动作语言 |
C作为行动语言 |
---|---|---|---|
0 |
权力。不支持使金宝app用不是2的整数幂的斜率或非零偏差定义的定点操作数。指数操作数必须是一个值为非负整数的常量。 |
权力。通过清除启用c位操作图表属性。看到启用c位操作. |
|
|
1 |
乘法。对于通过使用不是2的整数幂的斜率或非零偏差定义的定点操作数,指定图表 |
乘法。不支持使金宝app用非零偏差定义的定点操作数。看到乘法. |
|
1 |
部门。不支持使金宝app用不是2的整数幂的斜率或非零偏差定义的定点操作数。看到部门. |
部门。不支持使金宝app用非零偏差定义的定点操作数。看到部门. |
|
2 |
加法。对于通过使用不是2的整数幂的斜率或非零偏差定义的定点操作数,指定图表 |
加法。看到加减运算. |
|
2 |
减法。对于通过使用不是2的整数幂的斜率或非零偏差定义的定点操作数,指定图表 |
减法。看到加减运算. |
|
3. |
比较,大于。看到定点数据的关系运算. |
比较,大于。不支持偏金宝app差不匹配的定点操作数。看到定点数据的关系运算. |
|
3. |
比较,不足。看到定点数据的关系运算. |
比较,不足。不支持偏金宝app差不匹配的定点操作数。看到定点数据的关系运算. |
|
3. |
比较,大于或等于。看到定点数据的关系运算. |
比较,大于或等于。不支持偏金宝app差不匹配的定点操作数。看到定点数据的关系运算. |
|
3. |
比较,小于或等于。看到定点数据的关系运算. |
比较,小于或等于。不支持偏金宝app差不匹配的定点操作数。看到定点数据的关系运算. |
|
4 |
比较,等于。看到定点数据的关系运算. |
比较,等于。不支持偏金宝app差不匹配的定点操作数。看到定点数据的关系运算. |
|
4 |
比较,不等于。看到定点数据的关系运算. |
比较,不等于。不支持偏金宝app差不匹配的定点操作数。看到定点数据的关系运算. |
|
4 |
不受支持金宝app的。使用操作 |
比较,不等于。不支持偏金宝app差不匹配的定点操作数。看到定点数据的关系运算. |
|
4 |
不受支持金宝app的。使用操作 |
比较,不等于。不支持偏金宝app差不匹配的定点操作数。看到定点数据的关系运算. |
|
8 |
逻辑。看到定点数据的逻辑运算. |
逻辑。看到定点数据的逻辑运算. |
|
9 |
逻辑或。看到定点数据的逻辑运算. |
逻辑或。看到定点数据的逻辑运算. |
一元操作和动作
该表总结了定点操作数上的所有一元操作和动作的解释。一元操作:
具有比二进制运算符更高的优先级。
是右结合律,因此在任何表达式中,它们都是从右向左求值的。
赋值操作
下表总结了定点操作数上的赋值操作的解释。
操作 |
MATLAB作为动作语言 |
C作为行动语言 |
---|---|---|
|
简单的任务。 |
简单的任务。 |
|
不受支持金宝app的。要覆盖定点提升规则,请使用显式类型转换操作。看到类型转换操作. |
覆盖定点晋升规则的特殊任务。看到覆盖C图中的定点提升. |
|
不受支持金宝app的。使用这样的表达 |
相当于 |
|
不受支持金宝app的。使用这样的表达 |
相当于 |
|
不受支持金宝app的。使用这样的表达 |
相当于 |
|
不受支持金宝app的。使用这样的表达 |
相当于 |
覆盖C图中的定点提升
在使用C作为动作语言的图表中,一个简单的形式赋值A = b
的中间值b
按定点晋升规则。然后将这个中间值转换为类型一个
通过使用在线转换。看到定点运算提升规则而且转换操作.当两种类型的偏差和斜率相等或都是2的幂时,简单的分配是最有效的。
相反,一个特殊的赋值形式A:= b
的类型覆盖此行为一个
的值的结果类型b
.
常数
b
转换为的类型一个
通过使用脱机转换。表达式
b
最多只能包含一个算术运算符(+
,-
,*
,或/
).结果是通过使用在线转换来确定的。如果
b
包含除算术运算或常数之外的任何内容,则特殊赋值运算的行为与简单赋值运算(=
).
使用特殊赋值操作:=
当你想:
请注意
使用特殊赋值操作:=
可能导致生成的代码比使用普通的定点升级规则生成的代码效率低。
避免定点加法溢出
你可以使用特别分配操作:=
在对两个定点数执行算术运算时避免溢出。例如,考虑一个计算总和的图表a + b
在哪里一个
= 212-1 = 4095而且b
= 1.
假设:
两个输入都是带符号的16位定点数字,带有三个分数位(type
3) 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
= 23,问b
= 24。
简单的作业C = a/b
首先计算中间值a / b
按定点晋升规则。量子化后的整数四舍五入:
年代int=年代一个
/年代b
= 24/ 23= 2-1
问int=问一个
/问b
= 32/24≈1。
然后将中间结果转换为带有6个分数位的带符号的16位定点数:
年代c
= 26= 1/64
问c
=年代int问int/年代c
= 2-1/ 26= 25= 32。
因此,近似的真实世界值c
是
c
=年代c
问c
= 32/64 = 0.5.这个结果不是2/3实际值的很好的近似值。
相比之下,特殊任务C:= a/b
计算a / b
直接表示为带符号的16位固定点数,有6个分数位。同样,量子化后的整数四舍五入:
年代c
= 26= 1/64
问c
= (年代一个
问一个
) / (年代c
年代b
问b
) = 128/3≈42。
因此,近似的真实世界值c
是
c
=年代c
问c
= 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的浮点答案相比,这三个结果显示精度下降。要将精度损失最小化到应用程序中可接受的水平,请调整定点数据中的编码方案。