1个不稳定版本
0.2.0 | 2022年11月15日 |
---|
#10 in #tagged-pointers
每月下载 69 次
在 11 个crate中使用(通过 litl-val)
26KB
430 行
nanval
一个用于创建和处理NaN标记值的无std、零依赖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
的设置并不重要,我们可以将其用作标志/标记,以指示该值是某种类型的cell
或ptr
。
结合事实,基本上所有x64平台仅使用最低48位或50位进行寻址(忽略CHERI的奇怪之处),我们剩下3位(包括'安静'位)来存储某种类型的单元标签;请参阅crate::cell::CellTag
。