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 在 无标准库 中
27KB
430 行
nanval
一个 no_std
、无依赖的 crate,用于创建和处理 NaN 标记的 64 位浮点值。
这是如何工作的?
当 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
的设置无关紧要,我们可以将其用作标志/标记,表示该值是某种 cell
或 ptr
。
结合事实,基本上所有 x64 平台仅使用低 48 或 50 位进行寻址(忽略 CHERI 的小花招),我们剩下 3 位(包括 'quiet' 位)来存储某种类型的标签;请参阅 crate::cell::CellTag
。