123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- #include "Precompiled.h"
- #include "globaldata.h"
- #include "stdlib.h"
- #include "doomtype.h"
- #include "i_system.h"
- #ifdef __GNUG__
- #pragma implementation "m_fixed.h"
- #endif
- #include "m_fixed.h"
- fixed_t
- FixedMul
- ( fixed_t a,
- fixed_t b )
- {
- return fixed_t( ((long long) a * (long long) b) >> FRACBITS );
- }
- fixed_t
- FixedDiv
- ( fixed_t a,
- fixed_t b )
- {
- if ( (abs(a)>>14) >= abs(b))
- return (a^b)<0 ? MININT : MAXINT;
- return FixedDiv2 (a,b);
- }
- fixed_t
- FixedDiv2
- ( fixed_t a,
- fixed_t b )
- {
- #if 0
- long long c;
- c = ((long long)a<<16) / ((long long)b);
- return (fixed_t) c;
- #endif
- double c;
- c = ((double)a) / ((double)b) * FRACUNIT;
- if (c >= 2147483648.0 || c < -2147483648.0)
- I_Error("FixedDiv: divide by zero");
- return (fixed_t) c;
- }
|