浮動小数点数の乱数を生成
前回の記事では、rand crate を利用して整数乱数を生成しました。
今回の記事では浮動小数点数の乱数を生成します。
動作環境
- Windows 11
- WSL Ubuntu 20.04
- Rust 1.64.0
サンプルプロジェクトの作成
今回利用するサンプルプロジェクトを作成します。
※前回の記事と同じ手順です。
$ cargo new rand-sample
依存パッケージに rand を追加します。
[package]
name = "rand-sample"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
rand = "0.8.5"
浮動小数点数の乱数の生成 その1
rand::random
を呼び出す際に、f64
の型を指定することで浮動小数点数の乱数を生成することができます。
fn main() {
println!("{}", rand::random::<f64>());
println!("{}", rand::random::<f64>());
println!("{}", rand::random::<f64>());
}
$ cargo run
0.8307969062872236
0.09566261929600695
0.11476509041841298
なお、rand crate のドキュメントに記載がありますが、生成される乱数の範囲は 0 以上 1 未満となります。
Floating point types (
https://docs.rs/rand/latest/rand/fn.random.htmlf32
andf64
): Uniformly distributed in the half-open range[0, 1)
. See notes below.
浮動小数点数の乱数の生成 その2
整数乱数と同じように thread_rng
から乱数を生成することも可能です。
こちらも 0 以上 1 未満の乱数が生成されます。
use rand::Rng;
fn main() {
let mut rng = rand::thread_rng();
println!("{}", rng.gen::<f64>());
println!("{}", rng.gen::<f64>());
println!("{}", rng.gen::<f64>());
}
$ cargo run
0.709218705270441
0.423986484448616
0.13464751890688875
範囲指定の乱数生成
整数乱数と同様に gen_range
メソッドを呼び出すことで、乱数の範囲を指定することもできます。
次の例では、-10.0 以上 10.0 未満の浮動小数点数乱数を3回生成しています。
use rand::Rng;
fn main() {
let mut rng = rand::thread_rng();
println!("{}", rng.gen_range(-10.0..10.0));
println!("{}", rng.gen_range(-10.0..10.0));
println!("{}", rng.gen_range(-10.0..10.0));
}
$ cargo run
2.6702841651047127
0.34076831664900276
-6.320311777868226