2016-09-08 3 views
2

В Matlab есть функция, называемая int16, которая охватывает, например. двойные значения до следующего целого. Есть ли какой-либо простой эквивалент в C?Matlab int16() C эквивалент?

Специально для округления отрицательных чисел, например. От -1,65 до -2 и 1,33 до -1.

+1

Возможный дубликат [Есть функция для округления поплавка на C или мне нужно написать свои собственные?] (Http://stackoverflow.com/questions/497018/is-there-a-function-to- round-a-float-in-c-or-do-i-need-to-write-my-own) – samgak

+0

Не знаете, как это может быть дубликат этого. Другой вопрос - округление строкового представления, а не преобразование float в integer и округление его (ceil или floor). – LoPiTaL

+1

@LoPiTaL: задается вопрос об округлении значения поплавка; выбранный ответ касается его печати, но другие ответы говорят о округлении. –

ответ

4

Функция int16, округляет и фиксирует значения. Таким образом, эквивалент будет выглядеть следующим образом

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

EDIT: int16 также возвращает 0 для ввода NAN, поэтому справиться с этим, а также.

Также обратите внимание, что код действительно нуждается в дифференциации case, поскольку преобразование double в int16_t в C не определено для NAN и значений вне диапазона целевого целого.

Смежные вопросы