#fixed-point #numeric #proc-macro #primitive-integer

q-num

通过proc_macro实现的定点数Q表示法

3个版本

新版本 0.1.2 2024年8月13日
0.1.1 2024年4月28日
0.1.0 2023年9月28日

547数学 中排名

Download history 117/week @ 2024-04-23 37/week @ 2024-04-30 2/week @ 2024-05-07 22/week @ 2024-05-14 24/week @ 2024-05-21 11/week @ 2024-05-28 14/week @ 2024-06-04 10/week @ 2024-06-11

每月 155 次下载

Apache-2.0

20KB
372 代码行

q-num

这个库提供了一个在编译时评估的define_q_num!过程宏,用于定义有符号/无符号二进制定点数类型。它使用ARM风格的Q表示法:Qm.n(有符号)或UQm.n(无符号),其中

  • m是整数位数量,
  • n是小数位数量。

内部,宏选择可以容纳m + n位的最窄原始整数类型,最高可达u64(无符号)和i64(有符号)。更详细的内部讨论如下。

Q数值

Q数值的值是存储的数字(有n + m位)与一个固定分母(等于2 ^ n)的比值。

例如,使用UQ3.2规范,位模式0b10111表示值为5.75。考虑到分母是2 ^ 2 = 4,有两种方式来理解这一点

  • 0b10111 / 4 == 23 / 4 == 5.75
  • 0b101 + 0b11 / 4 == 5 + 3/4 == 5.75

宏使用示例

这里有一个示例

define_q_num!(MyQ, Q6.2);
let a = MyQ::from(13.75);
let b = MyQ::from(-2.25);
let c = a + b; // 11.5

依赖关系

~255–700KB
~17K SLoC