Mismatched fimath Errors

Original AlgorithmNew Algorithm

Function:

function y = mysum(x,T)  %#codegen  
	y = zeros(size(x), 'like', T.y);
   for n = 1:length(x)
        y(:) = y + x(n);
   end
end

Issue:

If two fi object operands have an attached fimath, the fimaths must be equal.

Fix:

Use the removefimath function to remove the fimath of one of the variables in just one instance. By removing the fimath, you avoid the “mismatched fimath” error without permanently changing the fimath of the variable.

Function:

function y = mysum(x,T)  %#codegen  
	y = zeros(size(x), 'like', T.y);
   for n = 1:length(x)
          y(:) = removefimath(y) + x(n);
   end
end

Types Table:

function T = mytypes(dt)
	switch(dt)
        case 'fixed'
        T.x = fi([],1,16,0, 'RoundingMethod', 'Floor',...
	     'OverflowAction','Wrap');
        T.y = fi([],1,16,0, 'RoundingMethod','Nearest');
    end
end

Types Table:

function T = mytypes(dt)
switch(dt)
    case 'fixed'
        T.x = fi([],1,16,0, 'RoundingMethod','Floor',...
         'OverflowAction','Wrap');
        T.y = fi([],1,16,0, 'RoundingMethod', 'Nearest');
 end
end