Skip to main content
欢迎来到PAWPAW技术文档网站了解更多信息

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))