The main problem with matrix multiplication on integer types (int32, etc.) in MATLAB is that the operation result is ambiguous in general and the outcome relies totally on the order of operations you perform ... you can get a different result by doing the operations in a different order. This is because arithmetic on integer types in MATLAB uses truncation rather than "clock" arithmetic (mod). E.g., take this simple example:
>> x = int8([10 10 -10])
10 10 -10
>> y = int8([10;10;10])
Error using *
MTIMES is not fully supported for integer classes. At least one input must be scalar.
To compute elementwise TIMES, use TIMES (.*) instead.
OK, so that's the expected error since the operation isn't supported. Now let's do the same operatioin manually in two different ways:
>> (x(1)*y(1) + x(2)*y(2)) + x(3)*y(3)
>> x(1)*y(1) + (x(2)*y(2) + x(3)*y(3))
There are two different answers you can get depending on the order of calculations. This is a direct result of the truncation rules for integer type arithmetic in MATLAB.
MATLAB likely will never support matrix multiplication on integer types because of this ambiguity. Background routines that change the order of calculations for speed purposes and thread availability can get different answers for the exact same inputs if they followed the MATLAB truncation rules for arithmetic ... not a good thing.