4 个版本
0.1.16-alpha.0 | 2023 年 3 月 31 日 |
---|---|
0.1.13-alpha.0 | 2023 年 3 月 17 日 |
0.1.12-alpha.0 | 2023 年 1 月 19 日 |
0.1.10-alpha.0 | 2023 年 1 月 18 日 |
#137 在 #bits
615 每月下载量
用于 116 个 crates (7 直接)
265KB
641 行
bitcoinleveldb-rand
这个 Rust 包是从 C++ 直接翻译到 Rust 的比特币核心随机数生成器实现。该包提供了生成随机数和实现各种随机数分布方案的功能。请注意,一些函数的实现可能仍在翻译过程中。
注意
该包是 C++ 到 Rust 直接翻译比特币核心的一部分。因此,一些函数的实现可能仍在翻译过程中。请注意,翻译完成后,该系统将可测试。
令牌
随机
Random
结构体用于生成随机数。它包含一个方法 next()
,该方法返回一个随机数。
next
next()
方法生成一个随机数。
one_in
one_in(n: u32)
函数以概率 1/n
返回 true。
skewed
skewed(max_log: u32)
函数生成介于 0
和 2^max_log
之间的偏斜随机数。
uniform
uniform(max: u32)
函数生成介于 0
和 max
之间的均匀随机数。
使用方法
要使用此包,请将 bitcoinleveldb-rand
添加到您的 Cargo.toml
文件中的依赖项
[dependencies]
bitcoinleveldb-rand = "0.1.0"
然后在您的 Rust 代码中导入该包
use bitcoinleveldb_rand::{Random, one_in, skewed, uniform};
fn main() {
let mut random = Random::new();
let random_number = random.next();
if one_in(1000) {
// do something with probability 1/1000
}
// generates a number between 0 and 1023 with
// a skewed distribution
let skewed_number = skewed(10);
// generates a number between 0 and 99 with
// a uniform distribution
let uniform_number = uniform(100);
}
75> 在 leveldb 中如何使用随机数?
LevelDB在多个地方使用随机数。其中一个主要用途是在选择用于压缩的文件。在压缩过程中,LevelDB将多个SSTable合并成一个SSTable,随机数用于选择要合并的文件。这种随机化有助于确保数据均匀分布在SSTable中,并且SSTable的大小平衡,这可以提高性能。
随机数还用于基准测试和测试期间键和值的生成。这允许生成各种测试用例,有助于确保系统的健壮性和可靠性。此外,随机数还用于系统其他需要随机性的部分,例如选择块大小和压缩比率。
总的来说,LevelDB中使用随机数有助于确保系统能够处理各种数据和负载,并针对不同场景优化性能。
76> 谢谢——你能告诉我这个crate的接口吗?
bitcoinleveldb-rand
crate提供了一个简单的随机数生成接口。该crate提供的主要类型是Random
,它表示一个随机数源。以下是在Random
上可用的方法:
-
new(seed: u64)
使用给定的种子创建一个新的Random
对象。 -
skewed(max_log: u32) -> u32
返回一个介于0和2^max_log - 1之间的随机整数,偏向较小的数字。 -
uniform(max: u32) -> u32
返回一个介于0和max - 1之间的随机整数,分布均匀。 -
one_in(n: u32) -> bool
以1/n的概率返回true。 -
next() -> u32
返回序列中的下一个随机数。
这些方法可用于在Leveldb系统中生成随机数,例如选择随机文件进行压缩或在测试期间生成键和值。
依赖关系
~88MB
~846K SLoC