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., 59 Temple
15
Place, Suite 330, Boston, MA 02111-1307 USA
17
*****************************************************************************/
19
/*******************************************************************
20
Random numbers and hashing
22
Created 5/11/1994 Heikki Tuuri
23
********************************************************************/
31
/* These random numbers are used in ut_find_prime */
32
#define UT_RANDOM_1 1.0412321
33
#define UT_RANDOM_2 1.1131347
34
#define UT_RANDOM_3 1.0132677
37
UNIV_INTERN ulint ut_rnd_ulint_counter = 65654363;
39
/***************************************************************
40
Looks for a prime number slightly greater than the given argument.
41
The prime is chosen so that it is not near any power of 2. */
47
ulint n) /* in: positive number > 100 */
55
while (pow2 * 2 < n) {
59
if ((double)n < 1.05 * (double)pow2) {
60
n = (ulint) ((double)n * UT_RANDOM_1);
65
if ((double)n > 0.95 * (double)pow2) {
66
n = (ulint) ((double)n * UT_RANDOM_2);
73
/* Now we have n far enough from powers of 2. To make
74
n more random (especially, if it was not near
75
a power of 2), we then multiply it by a random number. */
77
n = (ulint) ((double)n * UT_RANDOM_3);