inh*_*dle 7 matlab fixed-point
谷歌在这个问题上保持沉默.我目前正在Matlab中仅在16位有符号定点上实现数值计算器.但是对16位定点的算术运算会导致数据类型扩展到以下
>> a = int16(1.5 * 4)
a = 6
>> T = numerictype(1, 16, 2)
T = DataTypeMode: Fixed-point: binary point scaling
Signedness: Signed
WordLength: 16
FractionLength: 2
>> dis = reinterpretcast(a, T)
dis = 1.5000
DataTypeMode: Fixed-point: binary point scaling
Signedness: Signed
WordLength: 16
FractionLength: 2
>> c = dis * dis
c = 2.2500
DataTypeMode: Fixed-point: binary point scaling
Signedness: Signed
WordLength: 32
FractionLength: 4
Run Code Online (Sandbox Code Playgroud)
我希望变量c
保持在WordLength 16,FractionLength 2.是否有可能在不扩展基础数据类型的情况下完成16位定点的算术运算?我将承担任何溢出和下溢的风险.任何帮助都是极好的.
编辑:输入fimath
命令窗口会导致错误.为什么会出现此错误?
>> F = fimath('OverflowAction','Wrap', 'RoundingMethod', 'Floor', ...
'ProductWordLength', 16, 'ProductFractionLength', 2);
No public field OverflowAction exists for class embedded.fimath.
Error in fimath (line 72)
this.(varargin{k}) = varargin{k+1};
Run Code Online (Sandbox Code Playgroud)
本地解决方案:
您可以使用一个fimath
对象来指定乘积结果的精度:
F = fimath('OverflowMode','Wrap', 'RoundMode', 'Floor', ...
'ProductMode', 'SpecifyPrecision', ...
'ProductWordLength', 16, 'ProductFractionLength', 2);
dis.fimath = F;
Run Code Online (Sandbox Code Playgroud)
那么结果将是:
>> dis*dis
ans =
2.25
DataTypeMode: Fixed-point: binary point scaling
Signedness: Signed
WordLength: 16
FractionLength: 2
RoundMode: floor
OverflowMode: wrap
ProductMode: SpecifyPrecision
ProductWordLength: 16
ProductFractionLength: 2
SumMode: FullPrecision
MaxSumWordLength: 128
Run Code Online (Sandbox Code Playgroud)
全局解决方案:或者,如果您希望将其应用于所有定点变量,您可以使用
globalfimath('OverflowMode','Wrap', 'RoundMode', 'Floor', ...
'ProductMode', 'SpecifyPrecision', ...
'ProductWordLength', 16, 'ProductFractionLength', 2);
Run Code Online (Sandbox Code Playgroud)
请注意,要限制为 16 位,您还需要指定 sum 的精度(使用SumMode
和 的SumWordLength
属性fimath
),否则 sum 的字长将为 17:
>> dis+dis
ans =
3
DataTypeMode: Fixed-point: binary point scaling
Signedness: Signed
WordLength: 17
FractionLength: 2
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2453 次 |
最近记录: |