2016-09-08 3 views
2

Matlab에는 int16이라는 함수가 있습니다. 다음 정수로 double 값. 거기에 C에서 간단한 동등한 있습니까?Matlab int16() C 상당?

특히 음수의 반올림을 위해. -1.65 내지 -2 및 1.33 내지 -1이다.

+1

[C에서 부동 소수점을 반올림하는 함수가 있습니까? 아니면 내 자신을 작성할 필요가 있습니까?] (http://stackoverflow.com/questions/497018/is-there-a-function-to- a-float-in-c-do-i-need-to-write-my-own) – samgak

+0

어떻게 그것과 중복 될 수 있는지 모르겠다. 다른 문제는 문자열 표현을 반올림하고 부동 소수점을 정수로 변환하지 않고 반올림하는 것입니다 (ceil 또는 floor). – LoPiTaL

+1

@LoPiTaL :이 질문은 float 값을 반올림하는 것에 대해 묻습니다. 선택된 답은 그것을 인쇄하는 것을 다루지 만, 다른 답은 반올림에 관한 것입니다. –

답변

4

int16 함수는 값을 반올림하고 클램프합니다. 그래서 동등한이

int16_t int16(double d) 
{ 
    return isnan(d) ? 0 : (d > 32767.0) ? 
    32767 : 
    (d <-32768.0) ? -32768 : (int16_t)round(d)) ; 
} 

편집과 같습니다 INT16도 NAN 입력 0 반환 않도록 잘 처리합니다.

C의 double에서 int16_t 로의 변환이 NAN 및 대상 정수 범위를 벗어나는 값에 대해서는 정의되지 않았으므로이 코드는 대소 문자를 구분해야합니다.