86 lines
1.9 KiB
C
Executable File
86 lines
1.9 KiB
C
Executable File
#include "types.h"
|
|
#include "timer.h"
|
|
|
|
/******************************************************************************/
|
|
|
|
/* Fonction qui retourne le logarithme 2 */
|
|
|
|
u8 log2(u32 n) {
|
|
if (n==0) return 0;
|
|
int logValue = -1;
|
|
while (n) {
|
|
logValue++;
|
|
n >>= 1;
|
|
}
|
|
return logValue+1;
|
|
}
|
|
|
|
/******************************************************************************/
|
|
|
|
/* Fonction qui retourne le logarithme 10 */
|
|
|
|
u8 log10(u32 n)
|
|
{
|
|
return (n >= 1000000000u) ? 9 : (n >= 100000000u) ? 8 :
|
|
(n >= 10000000u) ? 7 : (n >= 1000000u) ? 6 :
|
|
(n >= 100000u) ? 5 : (n >= 10000u) ? 4 :
|
|
(n >= 1000u) ? 3 : (n >= 100u) ? 2 : (n >= 10u) ? 1u : 0u;
|
|
}
|
|
|
|
|
|
/******************************************************************************/
|
|
|
|
/* Fonction qui retourne la valeur absolue */
|
|
|
|
u32 abs(int x) {
|
|
if (x < 0)
|
|
x = -x;
|
|
return (u32) x;
|
|
}
|
|
|
|
/******************************************************************************/
|
|
|
|
/* Fonction qui initialise le générateur de nombre aléatoire */
|
|
|
|
static u32 seed=0x12341234;
|
|
|
|
void randomize() {
|
|
seed=gettimer();
|
|
}
|
|
|
|
/******************************************************************************/
|
|
|
|
/* Fonction qui renvoie un nombre aléatoire */
|
|
|
|
u32 rand()
|
|
{
|
|
u32 next = seed;
|
|
int result;
|
|
|
|
next *= 1103515245;
|
|
next += 12345;
|
|
result = (unsigned int) (next / 65536) % 2048;
|
|
|
|
next *= 1103515245;
|
|
next += 12345;
|
|
result <<= 10;
|
|
result ^= (unsigned int) (next / 65536) % 1024;
|
|
|
|
next *= 1103515245;
|
|
next += 12345;
|
|
result <<= 10;
|
|
result ^= (unsigned int) (next / 65536) % 1024;
|
|
|
|
seed = next;
|
|
|
|
return result;
|
|
}
|
|
|
|
/******************************************************************************/
|
|
|
|
/* Fonction qui renvoie un nombre aléatoire borné */
|
|
|
|
u32 random(u32 lower, u32 upper) {
|
|
return (rand() % (upper - lower + 1)) + lower;
|
|
}
|