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

无std litl-nanval

一个64位值,可以是浮点数(f64),或者一个任意的52位整数

1个不稳定版本

0.2.0 2022年11月15日

#10 in #tagged-pointers

Download history 41/week @ 2024-04-05 28/week @ 2024-04-12 33/week @ 2024-04-19 34/week @ 2024-04-26 31/week @ 2024-05-03 25/week @ 2024-05-10 29/week @ 2024-05-17 31/week @ 2024-05-24 23/week @ 2024-05-31 25/week @ 2024-06-07 31/week @ 2024-06-14 35/week @ 2024-06-21 13/week @ 2024-06-28 4/week @ 2024-07-05 25/week @ 2024-07-12 26/week @ 2024-07-19

每月下载 69
11 个crate中使用(通过 litl-val

MIT/Apache

26KB
430

nanval

Crates.io Docs.rs GitHub LOC

一个用于创建和处理NaN标记值的无std、零依赖crate。

这篇文章这个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值,它们可以是任何其他东西!这为我们提供了50位来随意操作/使用...

无符号整数

有关此信息,请参阅模块crate::uint

待办事项:添加解释。

单元/指针

有关此信息,请参阅模块crate::cell

由于符号位s的设置并不重要,我们可以将其用作标志/标记,以指示该值是某种类型的cellptr

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

参考

无运行时依赖

功能