#nan #tagged-pointers #pointers #tagged-enum #nanbox

无 std nanval

一个无 std、无依赖的 crate,用于创建和处理 NaN 标记的 64 位浮点值

4 个版本

0.2.1 2022 年 11 月 15 日
0.2.0 2022 年 10 月 18 日
0.1.1 2021 年 12 月 12 日
0.1.0 2021 年 12 月 12 日

#180无标准库

MIT/Apache

27KB
430

nanval

Crates.io Docs.rs GitHub LOC

一个 no_std、无依赖的 crate,用于创建和处理 NaN 标记的 64 位浮点值。

灵感来源于 这篇文章这个 crate

这是如何工作的?

当 64 位浮点数被设置为 NaN/0x7FF8000000000000 时,它的位如下所示

s111 1111 1111 1qxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx
^               ^\____________________________________________________________/
|               |                             ^
| Sign Bit      | Quiet Bit                   | Data Bits

只要数据位不是全部设置为 0,表明原始/哨兵 NaN 值,它们可以 literally 是任何其他东西!这给了我们 50 位来随意操作/使用...

UInts / 无符号整数

有关此内容,请参阅模块 crate::uint

待办事项: 添加解释。

Cells / 指针

有关此内容,请参阅模块 crate::cell

由于符号位 s 的设置无关紧要,我们可以将其用作标志/标记,表示该值是某种 cellptr

结合事实,基本上所有 x64 平台仅使用低 48 或 50 位进行寻址(忽略 CHERI 的小花招),我们剩下 3 位(包括 'quiet' 位)来存储某种类型的标签;请参阅 crate::cell::CellTag

参考资料

无运行时依赖

功能