pokefirered/src/math_util.c
2021-05-26 09:59:32 -04:00

88 lines
1000 B
C

#include "global.h"
#include "math_util.h"
s16 Q_8_8_mul(s16 x, s16 y)
{
s32 result;
result = x;
result *= y;
result /= 256;
return result;
}
s16 Q_N_S_mul(u8 s, s16 x, s16 y)
{
s32 result;
result = x;
result *= y;
result /= (1 << s);
return result;
}
s32 Q_24_8_mul(s32 x, s32 y)
{
s64 result;
result = x;
result *= y;
result /= 256;
return result;
}
s16 Q_8_8_div(s16 x, s16 y)
{
if (y == 0)
{
return 0;
}
return (x << 8) / y;
}
s16 Q_N_S_div(u8 s, s16 x, s16 y)
{
if (y == 0)
{
return 0;
}
return (x << s) / y;
}
s32 Q_24_8_div(s32 x, s32 y)
{
s64 _x;
if (y == 0)
{
return 0;
}
_x = x;
_x *= 256;
return _x / y;
}
s16 Q_8_8_inv(s16 y)
{
s32 x;
x = 0x10000;
return x / y;
}
s16 Q_N_S_inv(u8 s, s16 y)
{
s32 x;
x = 0x100 << s;
return x / y;
}
s32 Q_24_8_inv(s32 y)
{
s64 x;
x = 0x10000;
return x / y;
}