1 /*****************************************************************************
3 Copyright (c) 1994, 2009, Innobase Oy. All Rights Reserved.
5 This program is free software; you can redistribute it and/or modify it under
6 the terms of the GNU General Public License as published by the Free Software
7 Foundation; version 2 of the License.
9 This program is distributed in the hope that it will be useful, but WITHOUT
10 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11 FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
13 You should have received a copy of the GNU General Public License along with
14 this program; if not, write to the Free Software Foundation, Inc.,
15 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
17 *****************************************************************************/
19 /***************************************************************//**
21 Random numbers and hashing
23 Created 5/11/1994 Heikki Tuuri
24 ********************************************************************/
32 /** These random numbers are used in ut_find_prime */
34 #define UT_RANDOM_1 1.0412321
35 #define UT_RANDOM_2 1.1131347
36 #define UT_RANDOM_3 1.0132677
39 /** Seed value of ut_rnd_gen_ulint(). */
40 UNIV_INTERN ulint ut_rnd_ulint_counter
= 65654363;
42 /***********************************************************//**
43 Looks for a prime number slightly greater than the given argument.
44 The prime is chosen so that it is not near any power of 2.
50 ulint n
) /*!< in: positive number > 100 */
58 while (pow2
* 2 < n
) {
62 if ((double)n
< 1.05 * (double)pow2
) {
63 n
= (ulint
) ((double)n
* UT_RANDOM_1
);
68 if ((double)n
> 0.95 * (double)pow2
) {
69 n
= (ulint
) ((double)n
* UT_RANDOM_2
);
76 /* Now we have n far enough from powers of 2. To make
77 n more random (especially, if it was not near
78 a power of 2), we then multiply it by a random number. */
80 n
= (ulint
) ((double)n
* UT_RANDOM_3
);