1

範囲内のランダムな値でデバイス ベクトルを埋めたいです[-3.2, 3.2)。これを生成するために私が書いたコードは次のとおりです。

#include <thrust/random.h>
#include <thrust/device_vector.h>

struct RandGen
{
    RandGen() {}

    __device__
    float operator () (int idx)
    {
        thrust::default_random_engine randEng(idx);
        thrust::uniform_real_distribution<float> uniDist(-3.2, 3.2);
        return uniDist(randEng);
    }
};

const int num = 1000;
thrust::device_vector<float> rVec(num);
thrust::transform(
                thrust::make_counting_iterator(0),
                thrust::make_counting_iterator(num),
                rVec.begin(),
                RandGen());

ベクトルが次のような値で満たされていることがわかりました。

-3.19986 -3.19986 -3.19971 -3.19957 -3.19942 -3.05629 -3.05643 -3.05657 -3.05672 -3.05686 -3.057

実際、ゼロより大きい値は 1 つも見つかりませんでした。

設定した範囲からランダムな値が生成されないのはなぜですか? これを修正するにはどうすればよいですか?

4

1 に答える 1