不韋 呂
/
CQ_FixedPointSin_CMSIS
CQ出版社インターフェース誌の2017年8月号で解説している,固定小数点演算で sin 関数の値を求める二つの関数を比較するためのプログラムの全体.
FixedFloat.hpp
- Committer:
- MikamiUitOpen
- Date:
- 2017-08-02
- Revision:
- 0:9b1d4712f862
File content as of revision 0:9b1d4712f862:
//------------------------------------------------------------------- // 固定小数点数の演算を扱う際に使うインライン関数 // // 2017/03/03, Copyright (c) 2017 MIKAMI, Naoki //------------------------------------------------------------------- #include "mbed.h" #ifndef QN_INLINE_FUNCTIONS_HPP #define QN_INLINE_FUNCTIONS_HPP // 丸めのために使う inline float ForRound(float x) { return (x > 0) ? 0.5f : -0.5f; } // float 型の引数を int16_t 型の Q14 に変換する inline int16_t ToFixed14(float x) { return (int16_t)(x*16384.0f + ForRound(x)); } // float 型の引数を int16_t 型の Q15 に変換する inline int16_t ToFixed15(float x) { return (int16_t)(x*32768.0f + ForRound(x)); } // float 型の引数を int16_t 型の Q29 に変換する inline int32_t ToFixed29(float x) { return (int32_t)(x*32768.0f*16384.0f); } // 下位ビットを丸めて右に 14 ビットシフトする inline int32_t Round14(int32_t x) { return (x + 0x2000) >> 14; } // 下位ビットを丸めて右に 154 ビットシフトする inline int32_t Round15(int32_t x) { return (x + 0x4000) >> 15; } #endif // QN_INLINE_FUNCTIONS_HPP