Q-Format Conversion Macros
这些宏用于在Q格式中在浮点数和定点数之间进行转换。Q格式是一种定点数格式,其中指定了小数位数(或二进制点的位置)。
F(N)
将定点数值转换为双精度浮点数。该宏旨在允许通过另一个宏来指定Q格式(小数位数)来访问更具体的转换宏,例如F8()、F24()、F31()等。通过参数化,用户可以指定Q格式(小数位数)。
示例:
#define X_FRAC_BITS 24
int32_t x = ...;
...
// 将x转换为双精度浮点数
double dbl_x = F(X_FRAC_BITS)(x);
Q(N)
将浮点数值转换为定点数值。该宏旨在允许通过另一个宏来指定Q格式(小数位数)来访问更具体的转换宏,例如Q8()、Q24()、Q31()等。通过参数化,用户可以指定Q格式(小数位数)。
示例:
#include <math.h>
...
#define PI_FRAC_BITS 24
int32_t x = Q(PI_FRAC_BITS)(M_PI);
从double到Q格式的转换宏
以下宏将double值转换为Q格式的定点数值,并进行舍入。宏名称中的数字表示小数位数或二进制点的位置。
Q31(f)
将double值转换为Q1.31格式的定点数值,并进行舍入。
参数:
double f– [in] 要转换的double值。
Q30(f)
将double值转换为Q2.30格式的定点数值,并进行舍入。
参数:
double f– [in] 要转换的double值。
Q29(f)
将double值转换为Q3.29格式的定点数值,并进行舍入。
参数:
double f– [in] 要转换的double值。
Q28(f)
将double值转换为Q4.28格式的定点数值,并进行舍入。
参数:
double f– [in] 要转换的double值。
Q27(f)
将double值转换为Q5.27格式的定点数值,并进行舍入。
参数:
double f– [in] 要转换的double值。
Q26(f)
将double值转换为Q6.26格式的定点数值,并进行舍入。
参数:
double f– [in] 要转换的double值。
Q25(f)
将double值转换为Q7.25格式的定点数值,并进行舍入。
参数:
double f– [in] 要转换的double值。
Q24(f)
将double值转换为Q8.24格式的定点数值,并进行舍入。
参数:
double f– [in] 要转换的double值。
Q23(f)
将double值转换为Q9.23格式的定点数值,并进行舍入。
参数:
double f– [in] 要转换的double值。
Q22(f)
将double值转换为Q10.22格式的定点数值,并进行舍入。
参数:
double f– [in] 要转换的double值。
Q21(f)
将double值转换为Q11.21格式的定点数值,并进行舍入。
参数:
double f– [in] 要转换的double值。
Q20(f)
将double值转换为Q12.20格式的定点数值,并进行舍入。
参数:
double f– [in] 要转换的double值。
Q19(f)
将double值转换 为Q13.19格式的定点数值,并进行舍入。
参数:
double f– [in] 要转换的double值。
Q18(f)
将double值转换为Q14.18格式的定点数值,并进行舍入。
参数:
double f– [in] 要转换的double值。
Q17(f)
将double值转换为Q15.17格式的定点数值,并进行舍入。
参数:
double f– [in] 要转换的double值。
Q16(f)
将double值转换为Q16.16格式的定点数值,并进行舍入。
参数:
double f– [in] 要转换的double值。
Q15(f)
将double值转换为Q17.15格式的定点数值,并进行舍入。
参数:
double f– [in] 要转换的double值。
Q14(f)
将double值转换为Q18.14格式的定点数值,并进行舍入。
参数:
double f– [in] 要转换的double值。
Q13(f)
将double值转换为Q19.13格式的定点数值,并进行舍入。
参数:
double f– [in] 要转换的double值。
Q12(f)
将double值转换为Q20.12格式的定点数值,并进行舍入。
参数:
double f– [in] 要转换的double值。
Q11(f)
将double值转换为Q21.11格式的定点数值,并进行舍入。
参数:
double f– [in] 要转换的double值。
Q10(f)
将double值转换为Q22.10格式的定点数值,并进行舍入。
参数:
double f– [in] 要转换的double值。
Q9(f)
将double值转换为Q23.9格式的定点数值,并进行舍入。
参数:
double f– [in] 要转换的double值。
Q8(f)
将double值转换为Q24.8格式的定点数值,并进行舍入。
参数:
double f– [in] 要转换的double值。
从Q格式到double的转换宏
这些宏用于将Q格式的定点值转换为double精度浮点值。宏名称中的数字表示小数位数或二进制点的位置。
F31(x)
将Q1.31定点值转换为double值。该宏定义如下:
#define F31(x) ((double)(x)/(double)(uint32_t)(1<<31)) // 需要uint32_t类型转换,因为第31位是1
F30(x)
将Q2.30定点值转换为double值。该宏定义如下:
#define F30(x) ((double)(x)/(double)(1<<30))
F29(x)
将Q3.29定点值转换为double值。该宏定义如下:
#define F29(x) ((double)(x)/(double)(1<<29))
F28(x)
将Q4.28定点值转换为double值。该宏定义如下:
#define F28(x) ((double)(x)/(double)(1<<28))
F27(x)
将Q5.27定点值转换为double值。该宏定义如下:
#define F27(x) ((double)(x)/(double)(1<<27))
F26(x)
将Q6.26定点值转换为double值。该宏定义如下:
#define F26(x) ((double)(x)/(double)(1<<26))
F25(x)
将Q7.25定点值转换为double值。该宏定义如下:
#define F25(x) ((double)(x)/(double)(1<<25))
F24(x)
将Q8.24定点值转换为double值。该宏定义如下:
#define F24(x) ((double)(x)/(double)(1<<24))
F23(x)
将Q9.23定点值转换为double值。该宏定义如下:
#define F23(x) ((double)(x)/(double)(1<<23))
F22(x)
将Q10.22定点值转换为double值。该宏定义如下:
#define F22(x) ((double)(x)/(double)(1<<22))
F21(x)
将Q11.21定点值转换为double值。该宏定义如下:
#define F21(x) ((double)(x)/(double)(1<<21))
F20(x)
将Q12.20定点值转换为double值。该宏定义如下:
#define F20(x) ((double)(x)/(double)(1<<20))
F19(x)
将Q13.19定点值转换为double值。该宏定义如下:
#define F19(x) ((double)(x)/(double)(1<<19))
F18(x)
将Q14.18定点值转换为double值。该宏定义如下:
#define F18(x) ((double)(x)/(double)(1<<18))
F17(x)
将Q15.17定点值转换为double值。该宏定 义如下:
#define F17(x) ((double)(x)/(double)(1<<17))
F16(x)
将Q16.16定点值转换为double值。该宏定义如下:
#define F16(x) ((double)(x)/(double)(1<<16))
F15(x)
将Q17.15定点值转换为double值。该宏定义如下:
#define F15(x) ((double)(x)/(double)(1<<15))
F14(x)
将Q18.14定点值转换为double值。该宏定义如下:
#define F14(x) ((double)(x)/(double)(1<<14))
F13(x)
将Q19.13定点值转换为double值。该宏定义如下:
#define F13(x) ((double)(x)/(double)(1<<13))
F12(x)
将Q20.12定点值转换为double值。该宏定义如下:
#define F12(x) ((double)(x)/(double)(1<<12))
F11(x)
将Q21.11定点值转换为double值。该宏定义如下:
#define F11(x) ((double)(x)/(double)(1<<11))
F10(x)
将Q22.10定点值转换为double值。该宏定义如下:
#define F10(x) ((double)(x)/(double)(1<<10))
F9(x)
将Q23.9定点值转换为double值。该宏定义如下:
#define F9(x) ((double)(x)/(double)(1<<9))
F8(x)
将Q24.8定点值转换为double值。该宏定义如下:
#define F8(x) ((double)(x)/(double)(1<<8))