mariadb/innobase/ut/ut0rnd.c
unknown 2662b59306 Added Innobase to source distribution
Docs/manual.texi:
  Added Innobase documentation
configure.in:
  Incremented version
include/my_base.h:
  Added option for Innobase
myisam/mi_check.c:
  cleanup
mysql-test/t/bdb.test:
  cleanup
mysql-test/t/innobase.test:
  Extended with new tests from bdb.test
mysql-test/t/merge.test:
  Added test of SHOW create
mysys/my_init.c:
  Fix for UNIXWARE 7
scripts/mysql_install_db.sh:
  Always write how to start mysqld
scripts/safe_mysqld.sh:
  Fixed type
sql/ha_innobase.cc:
  Update to new version
sql/ha_innobase.h:
  Update to new version
sql/handler.h:
  Added 'update_table_comment()' and 'append_create_info()'
sql/sql_delete.cc:
  Fixes for Innobase
sql/sql_select.cc:
  Fixes for Innobase
sql/sql_show.cc:
  Append create information (for MERGE tables)
sql/sql_update.cc:
  Fixes for Innobase
2001-02-17 14:19:19 +02:00

79 lines
1.4 KiB
C

/*******************************************************************
Random numbers and hashing
(c) 1994, 1995 Innobase Oy
Created 5/11/1994 Heikki Tuuri
********************************************************************/
#include "ut0rnd.h"
#ifdef UNIV_NONINL
#include "ut0rnd.ic"
#endif
/* These random numbers are used in ut_find_prime */
#define UT_RANDOM_1 1.0412321
#define UT_RANDOM_2 1.1131347
#define UT_RANDOM_3 1.0132677
ulint ut_rnd_ulint_counter = 65654363;
/***************************************************************
Looks for a prime number slightly greater than the given argument.
The prime is chosen so that it is not near any power of 2. */
ulint
ut_find_prime(
/*==========*/
/* out: prime */
ulint n) /* in: positive number > 100 */
{
ulint pow2;
ulint i;
n += 100;
pow2 = 1;
while (pow2 * 2 < n) {
pow2 = 2 * pow2;
}
if ((double)n < 1.05 * (double)pow2) {
n = (ulint) ((double)n * UT_RANDOM_1);
}
pow2 = 2 * pow2;
if ((double)n > 0.95 * (double)pow2) {
n = (ulint) ((double)n * UT_RANDOM_2);
}
if (n > pow2 - 20) {
n += 30;
}
/* Now we have n far enough from powers of 2. To make
n more random (especially, if it was not near
a power of 2), we then multiply it by a random number. */
n = (ulint) ((double)n * UT_RANDOM_3);
for (;; n++) {
i = 2;
while (i * i <= n) {
if (n % i == 0) {
goto next_n;
}
i++;
}
/* Found a prime */
break;
next_n: ;
}
return(n);
}