2

在 Matlab 中有一个称为 int16 的函数,可以将例如 double 值四舍五入到下一个整数。C中是否有任何简单的等价物?

特别是对于负数的四舍五入,例如 -1.65 到 -2 和 1.33 到 -1。

4

1 回答 1

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 和目标整数范围之外的值是未定义的。

于 2016-09-08T07:40:26.883 回答