CQ出版社インターフェース誌の2017年8月号で解説している,固定小数点演算で sin 関数の値を求める二つの関数を比較するためのプログラムの全体.

Dependencies:   mbed

Committer:
MikamiUitOpen
Date:
Wed Aug 02 12:01:51 2017 +0000
Revision:
0:9b1d4712f862
1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 0:9b1d4712f862 1 //-------------------------------------------------------------------
MikamiUitOpen 0:9b1d4712f862 2 // 固定小数点数の演算を扱う際に使うインライン関数
MikamiUitOpen 0:9b1d4712f862 3 //
MikamiUitOpen 0:9b1d4712f862 4 // 2017/03/03, Copyright (c) 2017 MIKAMI, Naoki
MikamiUitOpen 0:9b1d4712f862 5 //-------------------------------------------------------------------
MikamiUitOpen 0:9b1d4712f862 6 #include "mbed.h"
MikamiUitOpen 0:9b1d4712f862 7
MikamiUitOpen 0:9b1d4712f862 8 #ifndef QN_INLINE_FUNCTIONS_HPP
MikamiUitOpen 0:9b1d4712f862 9 #define QN_INLINE_FUNCTIONS_HPP
MikamiUitOpen 0:9b1d4712f862 10
MikamiUitOpen 0:9b1d4712f862 11 // 丸めのために使う
MikamiUitOpen 0:9b1d4712f862 12 inline float ForRound(float x)
MikamiUitOpen 0:9b1d4712f862 13 { return (x > 0) ? 0.5f : -0.5f; }
MikamiUitOpen 0:9b1d4712f862 14
MikamiUitOpen 0:9b1d4712f862 15 // float 型の引数を int16_t 型の Q14 に変換する
MikamiUitOpen 0:9b1d4712f862 16 inline int16_t ToFixed14(float x)
MikamiUitOpen 0:9b1d4712f862 17 { return (int16_t)(x*16384.0f + ForRound(x)); }
MikamiUitOpen 0:9b1d4712f862 18
MikamiUitOpen 0:9b1d4712f862 19 // float 型の引数を int16_t 型の Q15 に変換する
MikamiUitOpen 0:9b1d4712f862 20 inline int16_t ToFixed15(float x)
MikamiUitOpen 0:9b1d4712f862 21 { return (int16_t)(x*32768.0f + ForRound(x)); }
MikamiUitOpen 0:9b1d4712f862 22
MikamiUitOpen 0:9b1d4712f862 23 // float 型の引数を int16_t 型の Q29 に変換する
MikamiUitOpen 0:9b1d4712f862 24 inline int32_t ToFixed29(float x)
MikamiUitOpen 0:9b1d4712f862 25 { return (int32_t)(x*32768.0f*16384.0f); }
MikamiUitOpen 0:9b1d4712f862 26
MikamiUitOpen 0:9b1d4712f862 27 // 下位ビットを丸めて右に 14 ビットシフトする
MikamiUitOpen 0:9b1d4712f862 28 inline int32_t Round14(int32_t x)
MikamiUitOpen 0:9b1d4712f862 29 { return (x + 0x2000) >> 14; }
MikamiUitOpen 0:9b1d4712f862 30
MikamiUitOpen 0:9b1d4712f862 31 // 下位ビットを丸めて右に 154 ビットシフトする
MikamiUitOpen 0:9b1d4712f862 32 inline int32_t Round15(int32_t x)
MikamiUitOpen 0:9b1d4712f862 33 { return (x + 0x4000) >> 15; }
MikamiUitOpen 0:9b1d4712f862 34
MikamiUitOpen 0:9b1d4712f862 35 #endif // QN_INLINE_FUNCTIONS_HPP