/* * 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 #include // RNGs #include #include #include #include #include // distributions #include #include #include 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; /*! \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; /*! \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, 0, xor_combine_engine< linear_feedback_shift_engine, 0, linear_feedback_shift_engine, 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