MATLAB에서는 integer 데이터에서 overflow 발생 시 Saturation 되도록 만들어져있으며, 기본 연산자를 사용 시 이를 우회하거나 기본 연산자의 기능을 오버라이드 하는 기능을 제공하고 있지 않습니다.
다만 아래의 문서에서도 알 수 있듯이 MATLAB Coder를 이용하여 코드 생성 시, Integer overflow시 saturation을 시킬지 여부에 대해 결정하는 것이 가능합니다.
function foo()
result = int16(32767) + int16(100);
disp(result);
end
% 코드 생성 부분
cfg = coder.config('mex');
cfg.SaturateOnIntegerOverflow = 0;
codegen foo -config cfg
% MALTAB과 생성된 C 코드의 결과물 비교
foo
foo_mex
위 코드의 결과물은 아래와 같이 확인할 수 있습니다. (MATLAB Answers에서는 MATLAB Coder 라이센스가 포함되어 있지 않아 데스크톱의 실행 결과물을 스크린샷으로 공유합니다.)
32767
-32669
시뮬링크에서는 "Saturate on integer overflow" 옵션을 끄거나 켜서 이 현상을 제어할 수 있습니다.