浮動小数点数を[-1,1]
の範囲にするには、の2のべき乗であるの2のべき乗で除算する必要があります。コードはQ0.31固定小数点である必要があります。コンパイル時に浮動小数点の最も近い2乗を求める
たとえば、10.75は16で割り、20.91を32で、1000.17で1024など、2^31に割ります。
コンパイル時にスケーリングを行う必要があります。例えば
:
#define PARAMETER1 10.0f // this could be changed in various builds
#define PARAMETER1_SCALE (CALC_SCALE(PARAMETER1))
#define float_to_fixed(x) ((int)((float)(x)*(float)0x80000000))
int main()
{
int par1 = float_to_fixed(PARAMETER1/PARAMETER1_SCALE);
// use par1 here
// ...
// then descale using PARAMETER1_SCALE again
}
がこれを計算するだろうCマクロCALC_SCALE
はありますか?
CまたはC++?マクロ、関数、または任意の? –
https://graphics.stanford.edu/~seander/bithacks.html#IntegerLogFloat –
なぜマクロ(関数ではない)ですか? (CまたはC++タグも削除します) – Borgleader