Reputation: 23
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);
}
......
}
gen_range(a,b)
can get a random number from a
to b
, but not included b
.
If I write gen_range(-2147483648,2147483648)
, it can't work, because gen_range -> (i32,i32)
So, what should I do?
Upvotes: 2
Views: 1415
Reputation: 16233
Uniform::from(std::i32::MIN..=std::i32::MAX)
with inclusive range too, and this is faster if sampling from the same range repeatedly: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());
}
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());
}
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());
}
let a: [i32; 32] = rng.gen();
gen_range
: since i32 range is -2147483648 to +2147483647 and gen_range
generate a random value in the range [low, high), i.e. inclusive of low and exclusive of high. One simple solution is:a[i] = rng.gen_range(-2_147_483_648_i64, 2_147_483_648_i64) as i32;
Try:
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());
}
This function is optimised for the case that only a single sample is made from the given range. See also the Uniform distribution type which may be faster if sampling from the same range repeatedly.
Upvotes: 5