[Rust] 浮動小数点数の乱数を生成する

  • 2022年9月26日
  • 2022年9月26日
  • Rust
  • 18View
  • 0件

浮動小数点数の乱数を生成

前回の記事では、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 (f32 and f64): Uniformly distributed in the half-open range [0, 1). See notes below.

https://docs.rs/rand/latest/rand/fn.random.html

浮動小数点数の乱数の生成 その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