Stateflow®图表在仿真软件金宝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作为动作语言的图表中,一种简单的形式赋值a = b
计算的中间值b
根据定点提升规则。然后将此中间值转换为一个
通过使用在线转换。看到定点操作的升级规则和转换操作.当两种类型的偏差和斜率相等或都是2的幂时,简单赋值是最有效的。
相反,表单的特殊赋值a: b =
初始时使用的类型覆盖此行为一个
的值的结果类型b
.
常数b
转换为类型一个
通过使用离线转换。
表达式b
最多可包含一个算术运算符(+
,-
,*
,或/
).结果由在线转换决定。
如果b
包含除算术运算或常数之外的任何内容,则特殊赋值操作的行为类似于简单赋值操作(=
).
使用特殊赋值操作:=
当您想要:
在算术运算中避免溢出。例如,请参见在定点添加中避免溢出.
在乘法或除法运算中保持精度。例如,请参见提高定点分割的精度.
请注意
使用特殊赋值操作:=
可能导致生成的代码的效率低于使用常规定点提升规则生成的代码。
您可以使用特殊的赋值操作:=
在对两个定点数执行算术运算时,避免溢出。例如,考虑一个计算总和的图表a + b
在哪里一个
= 2121 = 4095和b
= 1.
假设:
两个输入都是带有三个分数位的16位定点数字(typefixdt(1,16,3)
).
输出c
一个有符号的32位定点数字有三个分数位(类型fixdt(1、32、3)
).
生产目标的整数字大小是16位。
因为目标整数的大小是16位,所以简单的赋值c = a + b
将输入加为16位,然后将和转换为32位。中间结果是4096,作为一个类型fixdt(1,16,3)
值,则会导致溢出。
相反,特殊任务c: = a + b
在计算和之前,将输入强制转换为32位。4096的结果被安全地计算为一个类型fixdt(1、32、3)
值不溢出。
您可以使用特殊的赋值操作:=
在两个定点数相乘或除法时得到更精确的结果。例如,考虑一个计算比率的图表a / b
在哪里一个
= 2和b
= 3.
假设:
输入一个
是一个有四个分数位的定点数(类型fixdt(1,16,4)
).
输入b
是一个带有三个分数位的定点数(类型fixdt(1,16,3)
).
输出c
是一个有符号的16位定点数字,有6个分数位(类型fixdt(1,16,6)
).
输入对应于这些斜率和量化整数:
年代一个
= 24,问一个
= 32
年代b
= 23,问b
= 24。
简单的任务c = a / b
首先计算一个中间值a / b
根据定点促销规则。量化整数四舍五入到下限:
年代int=年代一个
/年代b
= 2-4/2-3= 2-1
问int=问一个
/问b
= 32/24≈1
然后中间结果被转换为带有6个分数位的16位定点数字:
年代c
= 2-6= 1/64
问c
=年代int问int/年代c
= 2-1/2-6= 25= 32。
因此,实际世界的近似值为c
是Vc
≈年代c
问c
= 32/64 = 0.5.此结果与2/3的实际值不是很好的近似值。
相反,特殊任务c: = a / b
计算a / b
直接作为一个有符号的16位定点数字和6个分数位。再一次,量化的整数四舍五入到一层:
年代c
= 2-6= 1/64
问c
= (年代一个
问一个
)/(年代c
年代b
问b
) = 128/3≈42。
因此,实际世界的近似值为c
是Vc
≈年代c
问c
= 42/64 = 0.6563.这个结果较好地逼近了实际值2/3。
此示例显示了状态流程图中定点算法的各种实现之间的差异。该模型包含三个计算比率的图表a / b
在哪里一个
= 19岁,b
= 24。两个输入都是带有一个小数位的16位定点数字(type)1) 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的浮点答案相比,这三个结果显示出精度损失。要将应用程序中的精度损失降至可接受的水平,请调整定点数据中的编码方案。