use rand::Rng;
fn main() {
let mut zz = rand::thread_rng();
let mut a: [i32; 4096] = [0; 4096];
for n in 0..4096 {
a[n] = zz.gen_range(-2147483648,2147483647);
}
......
}
Run Code Online (Sandbox Code Playgroud)
gen_range(a,b)a可以从到获得随机数b,但不包括在内b。
如果我写gen_range(-2147483648,2147483648),它就无法工作,因为gen_range -> (i32,i32)
所以我该怎么做?
Uniform::from(std::i32::MIN..=std::i32::MAX)包含范围,如果重复从同一范围采样,速度会更快:use rand::distributions::{Distribution, Uniform};
fn main() {
let between = Uniform::from(std::i32::MIN..=std::i32::MAX);
let mut rng = rand::thread_rng();
let mut a = [0_i32; 4096];
for i in 0..4096 {
a[i] = between.sample(&mut rng);
}
println!("{} {}", a.iter().min().unwrap(), a.iter().max().unwrap());
}
Run Code Online (Sandbox Code Playgroud)
rng.fill(&mut a);use rand::{thread_rng, Rng};
fn main() {
let mut rng = thread_rng();
let mut a = [0_i32; 4096];
rng.fill(&mut a); // array fill
println!("{} {}", a.iter().min().unwrap(), a.iter().max().unwrap());
}
Run Code Online (Sandbox Code Playgroud)
a[i] = rng.gen()use rand::{thread_rng, Rng};
fn main() {
let mut rng = thread_rng();
let mut a = [0_i32; 4096];
for i in 0..4096 {
a[i] = rng.gen();
}
println!("{} {}", a.iter().min().unwrap(), a.iter().max().unwrap());
}
Run Code Online (Sandbox Code Playgroud)
let a: [i32; 32] = rng.gen();
Run Code Online (Sandbox Code Playgroud)
gen_range: 因为 i32 范围是 -2147483648 到 +2147483647 并 gen_range生成 [low, high) 范围内的随机值,即包含 low 且不包含 high。一种简单的解决方案是:a[i] = rng.gen_range(-2_147_483_648_i64, 2_147_483_648_i64) as i32;
Run Code Online (Sandbox Code Playgroud)
尝试:
use rand::Rng;
fn main() {
let mut rng = rand::thread_rng();
let mut a = [0_i32; 4096];
for i in 0..4096 {
a[i] = rng.gen_range(-2_147_483_648_i64, 2_147_483_648_i64) as i32;
}
println!("{} {}", a.iter().min().unwrap(), a.iter().max().unwrap());
}
Run Code Online (Sandbox Code Playgroud)
此函数针对仅从给定范围中生成单个样本的情况进行了优化。另请参见均匀分布类型,如果重复从同一范围采样,该类型可能会更快。