Matlab には、int16 と呼ばれる関数があり、たとえば double 値を次の整数に丸めます。Cにそれに相当する単純なものはありますか?
特に、-1.65 から -2 および 1.33 から -1 などの負の数の丸めの場合。
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 およびターゲット整数の範囲外の値に対して定義されていないため、コードでは大文字と小文字の区別が実際に必要であることに注意してください。