overflow 만드는 방법

조회 수: 15 (최근 30일)
영진
영진 2024년 11월 22일 5:14
답변: Angelo Yeo 대략 13시간 전
아래와 같이 S16_MAXDUTY를 int16 최대값으로 입력 한 후
a에 overflow된 값을 넣고 싶습니다.
지금은 int 최대 값으로 limit이 걸려 있는 거 같은데 풀수 있는 방법이 있을까요?
simulink에서도 동일하게 overflow 발생 시킬수 있는 방법 질문 드립니다.
>> S16_MAXDUTY
S16_MAXDUTY =
int16
32767
>> a= S16_MAXDUTY+100
a =
int16
32767

답변 (1개)

Angelo Yeo
Angelo Yeo 대략 13시간 전
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" 옵션을 끄거나 켜서 이 현상을 제어할 수 있습니다.

제품


릴리스

R2024b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!