overflow 만드는 방법

2 views (last 30 days)
영진
영진 on 22 Nov 2024
Answered: Angelo Yeo on 24 Nov 2024
아래와 같이 S16_MAXDUTY를 int16 최대값으로 입력 한 후
a에 overflow된 값을 넣고 싶습니다.
지금은 int 최대 값으로 limit이 걸려 있는 거 같은데 풀수 있는 방법이 있을까요?
simulink에서도 동일하게 overflow 발생 시킬수 있는 방법 질문 드립니다.
>> S16_MAXDUTY
S16_MAXDUTY =
int16
32767
>> a= S16_MAXDUTY+100
a =
int16
32767

Accepted Answer

Angelo Yeo
Angelo Yeo on 24 Nov 2024
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" 옵션을 끄거나 켜서 이 현상을 제어할 수 있습니다.

More Answers (0)

Categories

Find more on Simulink Coder in Help Center and File Exchange

Products


Release

R2024b

Community Treasure Hunt

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

Start Hunting!