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 и значений вне диапазона целевого числа.