主要内容

定点数据操作Stateflow

Stateflow®图表在仿真软件金宝app®模型有一个动作语言属性定义所使用的语法与定点计算数据:

  • MATLAB®作为动作语言。

  • C作为动作语言。

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

二元运算

这个表总结了解释的所有二进制操作定点操作数根据他们的优先顺序(0 =最高,9 =最低)。二进制操作离开联想,这样,在任何表情,运营商具有相同优先级评估从左到右。

操作

优先级

MATLAB作为动作语言

C作为动作语言

a ^

0

权力。不支持定金宝app点操作数使用的斜率定义的两个或两个非零的整数次幂的偏见。指数操作数必须是一个常数,其值是一个非负整数。

权力。启用这个操作通过清算使c位操作图表属性。看到使c位操作

a * b

1

乘法。定点操作数定义为使用一个斜坡,不是两个或两个非零的整数次幂偏见,指定一个图表fimath对象与ProductMode设置为SpecifyPrecision。看到乘法

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

a / b

1

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

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

a + b

2

加法。定点操作数定义为使用一个斜坡,不是两个或两个非零的整数次幂偏见,指定一个图表fimath对象与SumMode设置为SpecifyPrecision。看到加法和减法

加法。看到加法和减法

a - b

2

减法。定点操作数定义为使用一个斜坡,不是两个或两个非零的整数次幂偏见,指定一个图表fimath对象与SumMode设置为SpecifyPrecision。看到加法和减法

减法。看到加法和减法

a >

3

比较,大于。看到关系为定点数据操作

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

< b

3

相比之下,不到。看到关系为定点数据操作

相比之下,不到。不支持的金宝app定点操作数不匹配的偏见。看到关系为定点数据操作

a > =

3

比较,大于或等于。看到关系为定点数据操作

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

< = b

3

比较,小于或等于。看到关系为定点数据操作

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

a = =

4

比较,等于。看到关系为定点数据操作

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

~ = b

4

比较,不等于。看到关系为定点数据操作

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

一个= b !

4

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

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

< > b

4

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

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

& & b

8

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

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

一个| | b

9

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

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

一元操作和行动

这个表总结了所有一元操作的解释在定点操作数和操作。一元操作:

  • 比二元操作符有更高的优先级。

  • 是正确的关联,这样,在任何表达式,它们从右到左。

操作

MATLAB作为动作语言

C作为动作语言

~一个

不受支持金宝app的。使用表达式一个= =(0,“喜欢”,)。看到为定点数据逻辑运算

逻辑。启用这个操作通过清算使c位操作图表属性。看到为定点数据逻辑运算使c位操作

!

不受支持金宝app的。使用表达式一个= =(0,“喜欢”,)。看到为定点数据逻辑运算

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

——一个

负的。看到一元-

负的。看到一元-

+ +

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

增量。相当于= + 1

一个,

不受支持金宝app的。使用表达式a = a - 1

减量。相当于a = a - 1

赋值操作

这个表总结的解释对定点操作数赋值操作。

操作

MATLAB作为动作语言

C作为动作语言

a = b

简单的任务。

简单的任务。

a: b =

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

特殊作业覆盖定点促销规则。看到在C图覆盖定点推广

+ = b

不受支持金宝app的。使用表达式一个= a + b

相当于一个= a + b

a - b =

不受支持金宝app的。使用表达式一个= a - b

相当于一个= a - b

* = b

不受支持金宝app的。使用表达式= a * b

相当于= a * b

a / b =

不受支持金宝app的。使用表达式一个= a / b

相当于一个= a / b

在C图覆盖定点推广

图表中使用C作为行动的语言,一个简单的赋值的形式a = b计算一个中间值b根据定点促销规则。那么这个中间值的类型一个通过使用一个在线转换。看到晋升为定点操作规则转换操作。简单任务时最有效的两种类型有同等偏差和山坡上是相等的,或者都是两个。

相比之下,一个特别任务的形式a: b =覆盖此行为的最初使用的类型一个结果类型的值b

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

  • 表达式b最多只能包含一个算术操作符(+,- - - - - -,*,或/)。结果是由使用在线转换。

  • 如果b比一个算术运算或包含任何其他一个常数,然后特种作业操作像简单的赋值操作(=)。

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

请注意

使用特殊的赋值操作:=会导致生成的代码,代码效率不及你使用普通的定点推广规则生成。

避免在定点除了溢出

您可以使用特殊的赋值操作:=避免溢出当执行两个定点数的算术运算。例如,考虑一个图表计算总和a + b在哪里一个= 2121 = 4095b= 1

假设:

  • 两个输入都与三个分数位(签署了16位定点数字类型3)fixdt(16日)。

  • 输出c是一个与三个分数位(签署了32位定点数字类型fixdt (1、32、3))。

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

因为目标整数大小是16位,简单的任务c = a + b添加输入在铸造前16位和32位。中间结果是4096,一个类型3)fixdt(16日值,结果在一个溢出。

相比之下,特殊任务c: = a + b将输入转换为32位之前计算总和。4096是安全地计算的结果作为一个类型fixdt (1、32、3)价值没有溢出。

定点班提高精度

您可以使用特殊的赋值操作:=获得更精确的结果,当两个定点数乘或除。例如,考虑一个图表,计算比例a / b在哪里一个= 2b= 3

假设:

  • 输入一个与四分数位定点数(类型4)fixdt(16日)。

  • 输入b是一个定点与分数三位数(类型3)fixdt(16日)。

  • 输出c是一个与六个分数位(签署了16位定点数字类型6)fixdt(16日)。

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

年代一个= 24,一个= 32

年代b= 23,b= 24。

简单的任务c = a / b首先计算一个中间值a / b根据定点促销规则。量子化的整数是圆楼:

年代int=年代一个/年代b= 24/ 23= 21

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

然后扮演的一个中间结果签署的16位定点数字有六个部分:

年代c= 26= 1/64

c=年代intint/年代c= 21/ 26= 25= 32。

因此,近似真实的价值cVc年代cc= 32/64 = 0.5。这个结果并不是一个好的近似实际价值的2/3。

相比之下,特殊任务c: = a / b计算a / b直接与六个签署了16位定点数字分数。量子化的整数是圆形地板:

年代c= 26= 1/64

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

因此,近似真实的价值cVc年代cc= 42/64 = 0.6563。这个结果是一个更好的近似2/3的实际价值。

定点运算的结果进行比较

这个例子展示了定点运算的各种实现区别Stateflow图表。模型包含三个图表,计算比例a / b在哪里一个= 19岁,b= 24。两个输入和一个分数一点(签署了16位定点数字类型1)fixdt(16日)。对应于这些斜坡和量子化的整数:

$ $ S_ \ texttt{一}= 2 ^ {1},Q_ \ texttt{一}= 38美元美元

$ $ S_ \ texttt {b} = 2 ^ {1}, Q_ \ texttt {b} = 48美元美元

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

  • 一个类型铸造操作在一个图表,使用MATLAB作为行动的语言。

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

  • 特种作业操作在一个图表,使用C作为行动的语言。

类型铸件图,使用MATLAB作为行动的语言

顶部的图模型的计算一个中间值a / b。中间值的量化的整数是四舍五入为最接近的整数:

$ $ S_ \ texttt {int} = S_ \ texttt {} / S_ \ texttt {b} = 1 $ $

$ $ Q_ \ texttt {int} = Q_ \ texttt {} / Q_ \ texttt {b} = 38/48 \大约1。$ $

然后把中间值作为一个16位定点数字签名c有一个分数:

$ $ S_ \ texttt {c} = 2 ^ {1} $ $

$ $ Q_ \ texttt {c} = S_ \ texttt {int} \ cdot Q_ \ texttt {int} / S_ \ texttt {c} = 2 & # xA; $ $

从这个图表输出值

$ $ \波浪号{V} _ \ texttt {c} = S_ \ texttt c {} \ cdot Q_ \ texttt {c} = 1, $ $

简单的赋值图,使用C作为行动的语言

中间表也计算一个中间值a / b。在这种情况下,量化的中间值的整数是圆形地板:

$ $ S_ \ texttt {int} = S_ \ texttt {} / S_ \ texttt {b} = 1 $ $

$ $ Q_ \ texttt {int} = Q_ \ texttt {} / Q_ \ texttt {b} = 38/48 \大约0。$ $

然后把中间值作为一个16位定点数字签名c有一个分数:

$ $ S_ \ texttt {c} = 2 ^ {1} $ $

$ $ Q_ \ texttt {c} = S_ \ texttt {int} \ cdot Q_ \ texttt {int} / S_ \ texttt {c} = 0 & # xA; $ $

从这个图表输出值

$ $ \波浪号{V} _ \ texttt {c} = S_ \ texttt c {} \ cdot Q_ \ texttt {c} = 0。$ $

特殊作业图表,使用C作为行动的语言

底部的图模型使用一个特殊的任务的形式c: = a / b。除法计算的值直接作为一个签署了16位定点数与一个分数。量子化的整数是圆楼:

$ $ S_ \ texttt {c} = 2 ^ {1} $ $

$ $ Q_ \ texttt {c} = (S_ \ texttt {} \ cdot Q_ \ texttt{一})/ (S_ \ texttt c {} \ cdot& # xA; S_ \ texttt {b} \ cdot Q_ \ texttt {b}) = 19/12 \大约1。$ $

因此,从这个图表输出值

$ $ \波浪号{V} _ \ texttt {c} = S_ \ texttt c {} \ cdot Q_ \ texttt {c} = 0.5, $ $

的三个业绩损失精度的浮点回答相比,19/24 = 0.7917。把损失减小到最低限度的精度在应用程序中一个可接受的水平,调整定点数据编码方案。

相关的话题