3个版本 (破坏性更新)
新版本 0.4.0 | 2024年8月5日 |
---|---|
0.3.0 | 2024年5月24日 |
0.2.0 | 2024年5月23日 |
0.1.0 |
|
#299 in 嵌入式开发
每月59次下载
34KB
492 行
这是一个Rust crate,提供具有静态验证溢出安全和位移正确性的定点运算,并且无运行时开销。
请注意:此crate需要nightly Rust,用于generic_const_exprs
特性。此外,这是一个“alpha”版本,文档不完整,测试覆盖率也不完整。提供广泛使用的、生产就绪的定点运算选项的fixed crate,尽管它不提供编译时溢出安全性,也不保证零运行时开销。
定点运算将分数值表示为整数,具有隐式位移。例如,十进制数2.375(在2进制中:10.011)可以表示为整数0b10011
(十进制19)和隐式位移3。通常,程序员负责跟踪程序中使用的所有位移,确保它们之间保持一致,并在算术操作中避免任何溢出。
相比之下,浮点数会自动调整“位移”(即指数),以提供不会溢出的最大分辨率。它们易于使用,并且在大多数情况下都会做正确的事。然而,它们可能导致难以识别和预防的细微舍入错误。正如Gerald Sussman教授所说的,“没有什么比浮点数更能让我感到恐惧了。”
此crate使用Rust类型系统提供固定点数,具有编译时位移检查和溢出保护。每个固定点类型有两个const泛型参数,一个描述位移,一个描述可能非零的最大位数。每个算术操作都实现了一个输出类型,它正确反映了结果的位和移位。例如,乘以一个10位数字(移位2)和一个12位数字(移位3)的结果是一个22位数字(移位5)。