forked from KolibriOS/kolibrios
96 lines
1.3 KiB
C
96 lines
1.3 KiB
C
|
/* Rocket Forces
|
||
|
* Filename: mymath.h
|
||
|
* Version 0.1
|
||
|
* Copyright (c) Serial 2007
|
||
|
*/
|
||
|
|
||
|
|
||
|
extern "C" int _fltused = 0;
|
||
|
|
||
|
#define M_PI 3.14159265358979323846
|
||
|
|
||
|
inline double sin(double x)
|
||
|
{
|
||
|
__asm fld x
|
||
|
__asm fsin
|
||
|
}
|
||
|
|
||
|
inline double cos(double x)
|
||
|
{
|
||
|
__asm fld x
|
||
|
__asm fcos
|
||
|
}
|
||
|
|
||
|
inline double sqrt(double x)
|
||
|
{
|
||
|
__asm fld x
|
||
|
__asm fsqrt
|
||
|
}
|
||
|
|
||
|
inline double acos(double x)
|
||
|
{
|
||
|
__asm fld x
|
||
|
__asm fld st(0)
|
||
|
__asm fmul st,st(1)
|
||
|
__asm fld1
|
||
|
__asm fsubrp st(1),st(0)
|
||
|
__asm fsqrt
|
||
|
__asm fxch st(1)
|
||
|
__asm fpatan
|
||
|
}
|
||
|
|
||
|
inline double atan(double x)
|
||
|
{
|
||
|
double res = acos(1 / sqrt(1 + x * x));
|
||
|
if (x < 0)
|
||
|
{
|
||
|
res *= -1;
|
||
|
}
|
||
|
return res;
|
||
|
}
|
||
|
|
||
|
inline int round_int(double x)
|
||
|
{
|
||
|
int i;
|
||
|
static const float round_to_nearest = 0.5f;
|
||
|
__asm
|
||
|
{
|
||
|
fld x
|
||
|
fadd st, st(0)
|
||
|
fadd round_to_nearest
|
||
|
fistp i
|
||
|
sar i, 1
|
||
|
}
|
||
|
return i;
|
||
|
}
|
||
|
|
||
|
inline int floor_int(double x)
|
||
|
{
|
||
|
int i;
|
||
|
static const float round_toward_m_i = -0.5f;
|
||
|
__asm
|
||
|
{
|
||
|
fld x
|
||
|
fadd st, st (0)
|
||
|
fadd round_toward_m_i
|
||
|
fistp i
|
||
|
sar i, 1
|
||
|
}
|
||
|
return i;
|
||
|
}
|
||
|
|
||
|
inline int ceil_int(double x)
|
||
|
{
|
||
|
int i;
|
||
|
static const float round_toward_p_i = -0.5f;
|
||
|
__asm
|
||
|
{
|
||
|
fld x
|
||
|
fadd st, st (0)
|
||
|
fsubr round_toward_p_i
|
||
|
fistp i
|
||
|
sar i, 1
|
||
|
}
|
||
|
return (-i);
|
||
|
}
|