Гугл молчит по этому поводу. В настоящее время я реализую числовой калькулятор только с 16-битной фиксированной точкой со знаком в Matlab. Но арифметическая операция с 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
я хочу, чтобы переменная c
оставалась в WordLength 16, FractionLength 2. Возможно ли, чтобы арифметическая операция с 16-битной фиксированной точкой выполнялась без расширения базового типа данных? Я собираюсь взять на себя риск любого переполнения и недополнения. Любая помощь будет потрясающей.
EDIT: ввод 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};