我需要将所有浮点数除以[-1,1]
范围,除以最接近的次幂<2。代码需要是Q0.31定点,所以没有浮动。
例如,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
会计算出来?
答案 0 :(得分:3)
这个怎么样:
#include <math.h>
#define collapse(value) (value < 0 ? value / pow(2, ceil(log2(value * -1))) : value / pow(2, ceil(log2(value))))
int main() {
cout << collapse(10.75) << endl;
cout << collapse(20.91) << endl;
cout << collapse(-1) << endl;
cout << collapse(-2.5) << endl;
cout << collapse(5.7) << endl;
}
输出是:
0.671875
0.653438
-1
-0.625
0.7125
答案 1 :(得分:0)
这样做:
#define CALC_SCALE ( x > 16 ? 32 : x > 8 ? 16 : x > 4 ? 8 : x > 2 ? 4 : x > 1 ? 2 : 1 )
在编译时:
int x = CALC_SCALE( 13 );
编译为:
int x = 16;
可以轻松更改以支持浮动。