Я хочу заполнить вектор устройства со случайными значениями в диапазоне [-3.2, 3.2)
. Вот код, который я написал для создания этого:Почему равномерное случайное распределение Thrust генерирует неправильные значения?
#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
На самом деле, я не мог найти единственное значение, которое больше нуль!
Почему это не создает случайные значения из диапазона, который я установил? Как это исправить?
Возможный дубликат [Генерация вектора случайных чисел между 0 и 1.0 с использованием Thrust] (http://stackoverflow.com/questions/12614164/generating-a-random-number-vector-between-0-and-1- 0-с помощью тяги) – talonmies