#fixed #math #numeric

nightly no-std fp

通过编译时检查实现快速且安全的定点运算

3个版本 (破坏性更新)

新版本 0.4.0 2024年8月5日
0.3.0 2024年5月24日
0.2.0 2024年5月23日
0.1.0 2017年1月23日

#299 in 嵌入式开发

Download history 261/week @ 2024-05-21 6/week @ 2024-05-28 10/week @ 2024-06-04 9/week @ 2024-06-11 1/week @ 2024-07-02 59/week @ 2024-07-30

每月59次下载

MIT许可证

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

无运行时依赖