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., 51 Franklin
15
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);