Странное поведение 2 ^ 0 для фиксированной точки Matlab - PullRequest
0 голосов
/ 14 июля 2020

Я пытаюсь реализовать эквивалент типов данных C, например, int32_t, с помощью MATLAB. Насколько я знаю (предложения приветствуются!), Правильный способ сделать это - определить мой собственный my_int32 следующим образом:

function y = my_int32(x)
%MY_UINT16 Summary of this function goes here
%   Detailed explanation goes here

persistent T32 F32
T32 = numerictype('Signedness', 'Signed', ...
'WordLength', 32, ...
'FractionLength', 0);
F32 = fimath('RoundingMethod', 'Zero', ...
'OverflowAction', 'Wrap', ...
'ProductMode', 'KeepLSB', ...
'ProductWordLength', 32, ...
'ProductFractionLength', 0, ...
'SumMode', 'KeepLSB', ...
'SumWordLength', 32, ...
'SumFractionLength', 0, ...
'CastBeforeSum', true);

y = fi(x, T32, F32);
end

Теперь я получаю странное поведение для 2 ^ 0:

>> my_int32(2)^1

ans = 

     2

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 32
        FractionLength: 0

        RoundingMethod: Zero
        OverflowAction: Wrap
           ProductMode: KeepLSB
     ProductWordLength: 32
               SumMode: KeepLSB
         SumWordLength: 32
         CastBeforeSum: true
>> my_int32(2)^0

ans = 

     1

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Unsigned
            WordLength: 1
        FractionLength: 0

        RoundingMethod: Zero
        OverflowAction: Wrap
           ProductMode: KeepLSB
     ProductWordLength: 32
               SumMode: KeepLSB
         SumWordLength: 32
         CastBeforeSum: true

По какой-то причине длина слова my_int32(2)^0 не 32, а 1. Я пробовал такие вещи, как my_int32(2)^my_int32(0), но безрезультатно. Почему это так и как это исправить?

...