overflow 만드는 방법

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

Risposta accettata

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

Più risposte (0)

Prodotti


Release

R2024b

Community Treasure Hunt

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

Start Hunting!