7个版本 (2个稳定版)
1.0.1 | 2023年3月7日 |
---|---|
0.1.4 | 2022年12月14日 |
#733 在 算法
每月506次下载
在 5 crate 中使用
18KB
199 行
ilog
适用于整数类型的10和2的对数函数
IntLog
trait定义了以下方法
fn log10(self) -> usize
fn log2(self) -> usize
fn checked_log10(self) -> Option<usize>
fn checked_log2(self) -> Option<usize>
log2
和 log10
方法针对整数宽度进行了优化,并且是 [inline]
的,因为代码足够小。它们通常使用仅存储一次的常量表,即使使用这些表的方法被内联多次。
方法的 checked 版本,即 checked_log2
和 checked_log10
,如果对数对于参数值未定义,则返回 None
,而上面提到的未检查的方法简单地panic或返回错误值。
示例
use ilog::IntLog;
let hundred: u32 = 100;
assert_eq!(hundred.log10(), 2);
assert_eq!(u32::log10(99), 1);
let value: u64 = 256;
assert_eq!(value.log2(), 8);
assert_eq!(u64::log2(255), 7);
assert_eq!(u32::checked_log2(63), Some(5));
assert_eq!(0_u32.checked_log2(), None);
兼容性
ilog
crate已在rustc 1.65及以上版本、Windows 64位和Linux 64/32位平台上进行了测试。
它不依赖于std
库,并支持16、32和64位架构。
Rust版本1.64及之前
请注意,在1.64及之前版本中,log
、log2
和 log10
是 nightly experimental core::num
方法,然后在1.65版本(仍然为实验性)中分别重命名为 ilog
、ilog2
和 ilog10
。作者在crate首次发布时不知道这一点。
如果您需要使用此crate与较早版本的rustc,可以使用此文件指令来屏蔽警告
#![allow(unstable_name_collisions)]
或者在此方法使用之前使用此指令
#[allow(unstable_name_collisions)]
版本
RELEASES.md 记录了所有版本的日志。
许可证
受 MIT许可证 保护。