Matlab int16() C эквивалентно?

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

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

1 ответ

Решение

Функция 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, так что обработайте это также.

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

Другие вопросы по тегам