Mercurial > mm7
view Engine/OurMath.h @ 2521:8e2022a843d9
.
author | a.parshin |
---|---|
date | Thu, 09 Oct 2014 19:30:22 +0300 |
parents | 68cdef6879a0 |
children | 1bcadc6dd203 |
line wrap: on
line source
#pragma once #include <cassert> #include <limits> /* 186 */ #pragma pack(push, 1) struct stru193_math { stru193_math(); int Cos(int angle); unsigned int Atan2(int x, int y); int Sin(int angle); int pTanTable[520]; int pCosTable[520]; int pInvCosTable[520]; static const unsigned int uIntegerPi = 1024; static const unsigned int uIntegerHalfPi = 512; static const unsigned int uIntegerDoublePi = 2048; static const unsigned int uDoublePiMask = 2047; static const unsigned int uPiMask = 1023; static const unsigned int uHalfPiMask = 511; }; #pragma pack(pop) __int64 fixpoint_mul(int, int); __int64 fixpoint_dot(int x1, int x2, int y1, int y2, int z1, int z2); __int64 fixpoint_div(int, int); __int64 fixpoint_sub_unknown(int, int); int fixpoint_from_float(float value); int fixpoint_from_int(int lhv, int rhv); int integer_sqrt(int val); int __fastcall GetDiceResult(unsigned int uNumDice, unsigned int uDiceSides); // idb inline int round_to_int(float x) { return (int)floor(x + 0.5f); } template <typename FloatType> inline int bankersRounding(const FloatType& value) { assert("Method unsupported for this type" && false); return value; } template<> inline int bankersRounding<float>(const float& inValue) { union Cast { double d; long l; }; volatile Cast c; c.d = inValue + 6755399441055744.0; return c.l; } #pragma push_macro("max") #undef max template<> inline int bankersRounding<double>(const double& inValue) { double maxValue = std::numeric_limits<int>::max(); assert(maxValue - 6755399441055744.0 >= inValue); union Cast { double d; long l; }; volatile Cast c; c.d = inValue + 6755399441055744.0; return c.l; } #pragma pop_macro("max") extern struct stru193_math *stru_5C6E00;