Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

121 lines (96 sloc) 3.766 kb
/*
* Copyright 2008-2012 NVIDIA Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/*! \file random.h
* \brief Pseudo-random number generators.
*/
#pragma once
#include <thrust/detail/config.h>
#include <thrust/detail/cstdint.h>
// RNGs
#include <thrust/random/discard_block_engine.h>
#include <thrust/random/linear_congruential_engine.h>
#include <thrust/random/linear_feedback_shift_engine.h>
#include <thrust/random/subtract_with_carry_engine.h>
#include <thrust/random/xor_combine_engine.h>
// distributions
#include <thrust/random/uniform_int_distribution.h>
#include <thrust/random/uniform_real_distribution.h>
#include <thrust/random/normal_distribution.h>
namespace thrust
{
/*! \addtogroup random Random Number Generation
* \{
*/
/*! \namespace thrust::random
* \brief \p thrust::random is the namespace which contains random number engine class templates,
* random number engine adaptor class templates, engines with predefined parameters,
* and random number distribution class templates. They are provided in a separate namespace
* for import convenience but are also aliased in the top-level \p thrust namespace for
* easy access.
*/
namespace random
{
/*! \addtogroup predefined_random Random Number Engines with Predefined Parameters
* \ingroup random
* \{
*/
/*! \typedef ranlux24
* \brief A random number engine with predefined parameters which implements the
* RANLUX level-3 random number generation algorithm.
* \note The 10000th consecutive invocation of a default-constructed object of type \p ranlux24
* shall produce the value \c 9901578 .
*/
typedef discard_block_engine<ranlux24_base, 223, 23> ranlux24;
/*! \typedef ranlux48
* \brief A random number engine with predefined parameters which implements the
* RANLUX level-4 random number generation algorithm.
* \note The 10000th consecutive invocation of a default-constructed object of type \p ranlux48
* shall produce the value \c 88229545517833 .
*/
typedef discard_block_engine<ranlux48_base, 389, 11> ranlux48;
/*! \typedef taus88
* \brief A random number engine with predefined parameters which implements
* L'Ecuyer's 1996 three-component Tausworthe random number generator.
*
* \note The 10000th consecutive invocation of a default-constructed object of type \p taus88
* shall produce the value \c 3535848941 .
*/
typedef xor_combine_engine<
linear_feedback_shift_engine<thrust::detail::uint32_t, 32u, 31u, 13u, 12u>,
0,
xor_combine_engine<
linear_feedback_shift_engine<thrust::detail::uint32_t, 32u, 29u, 2u, 4u>, 0,
linear_feedback_shift_engine<thrust::detail::uint32_t, 32u, 28u, 3u, 17u>, 0
>,
0
> taus88;
/*! \typedef default_random_engine
* \brief An implementation-defined "default" random number engine.
* \note \p default_random_engine is currently an alias for \p minstd_rand, and may change
* in a future version.
*/
typedef minstd_rand default_random_engine;
/*! \} // end predefined_random
*/
} // end random
/*! \} // end random
*/
// import names into thrust::
using random::ranlux24;
using random::ranlux48;
using random::taus88;
using random::default_random_engine;
} // end thrust
Jump to Line
Something went wrong with that request. Please try again.