1

乱数を生成する必要があるテスト プログラムがあります。したがって、使用して比較するテストを行いました

"uVal = rand::task_rng().gen();"

たとえば、乱数を使用してオブジェクトを作成する場合と比較して、乱数が生成されるたびに。:

let mut oRandom = std::rand::task_rng()

複数の乱数を生成します。作成したオブジェクト (oRandom) を使用する方がはるかに高速なので、オブジェクトを乱数を生成する関数に渡す必要があると考えましたが、それを行う方法を見つけることができませんでした。重要ではありませんが、実行できると思います。

例 1 : オブジェクトを使用しない : (2 よりもはるかに遅い)

let mut uVal : u8;
for _ in range(1, iMax) {
    uVal = std::rand::task_rng().gen();

例 2 : オブジェクトの使用 : (1 よりもはるかに高速)

let mut oRandom = std::rand::task_rng();
let mut uVal : u8;
for _ in range(1, iMax) {
    uVal = oRandom.gen();

例 3: オブジェクトを関数に渡そうとする試み:

12  let mut oRandom = std::rand::task_rng();
13  fTest03(iMax, &mut oRandom);    

53  fn fTest03(iMax : i64, oRandom : &mut std::rand::task_rng) {

This results in the following error :

    test_rand003.rs:53:38: 53:57 error: use of undeclared type name
        `std::rand::task_rng`
    test_rand003.rs:53 fn fTest03(iMax : i64, oRandom : &mut std::rand::task_rng) {

上記の 13 行目の変数「oRandom」を関数に渡すにはどうすればよいですか?

4

2 に答える 2

1

2 つの方法があります。いずれかが一般的な方法を使用できるため、タスクローカルの使用をやめる場合は、他の RNG で機能します。

fn fTest03<R: Rng>(iMax: i64, oRandom: &mut R) { ... }

task_rngまたは、戻り値の型を直接使用することもできます:

fn fTest03(iMax: i64, oRandom: @mut IsaacRng) { ... }

Rng( /をインポートするIsaacRngか、それらを完全に修飾する必要がある場合がありますstd::rand::Rng。)

どちらでも動作するはずfTest03(10, std::rand::task_rng())です。

于 2013-11-06T10:46:06.297 に答える
0

task_rng() は型ではなく、タスクのローカル乱数ジェネレーター (TaskRng) を返す関数です。

task_rng 関数のシグネチャは次のとおりです。

pub fn task_rng() -> @mut TaskRng

したがって、53行目を次のように変更すると:

fn fTest03(iMax : i64, oRandom : &mut std::rand::Rng) {...

物事はうまくいくはずです。

于 2013-10-30T15:42:11.570 に答える