Mercurial > mm7
annotate Math.h @ 1988:7e2dd49832b5
Off-Hand <> Two-Handed error fixed
some trash left from previous commit
author | zipi |
---|---|
date | Sat, 02 Nov 2013 17:24:31 +0000 |
parents | 7182930263b3 |
children |
rev | line source |
---|---|
0 | 1 #pragma once |
1527 | 2 |
1131
71ba92960bc5
banker's rounding template made as fast as before and a bit more safe
Grumpy7
parents:
1130
diff
changeset
|
3 #include <cassert> |
71ba92960bc5
banker's rounding template made as fast as before and a bit more safe
Grumpy7
parents:
1130
diff
changeset
|
4 #include <limits> |
0 | 5 |
6 /* 186 */ | |
7 #pragma pack(push, 1) | |
8 struct stru193_math | |
9 { | |
10 stru193_math(); | |
323 | 11 int Cos(int angle); |
0 | 12 unsigned int Atan2(int x, int y); |
323 | 13 int Sin(int angle); |
0 | 14 |
15 int pTanTable[520]; | |
16 int pCosTable[520]; | |
17 int pInvCosTable[520]; | |
1214
0d6c7ff3cddd
simplified stru193_math constructor and class definition
Grumpy7
parents:
1131
diff
changeset
|
18 static const unsigned int uIntegerPi = 1024; |
0d6c7ff3cddd
simplified stru193_math constructor and class definition
Grumpy7
parents:
1131
diff
changeset
|
19 static const unsigned int uIntegerHalfPi = 512; |
0d6c7ff3cddd
simplified stru193_math constructor and class definition
Grumpy7
parents:
1131
diff
changeset
|
20 static const unsigned int uIntegerDoublePi = 2048; |
0d6c7ff3cddd
simplified stru193_math constructor and class definition
Grumpy7
parents:
1131
diff
changeset
|
21 static const unsigned int uDoublePiMask = 2047; |
0d6c7ff3cddd
simplified stru193_math constructor and class definition
Grumpy7
parents:
1131
diff
changeset
|
22 static const unsigned int uPiMask = 1023; |
0d6c7ff3cddd
simplified stru193_math constructor and class definition
Grumpy7
parents:
1131
diff
changeset
|
23 static const unsigned int uHalfPiMask = 511; |
0 | 24 }; |
25 #pragma pack(pop) | |
26 | |
1643 | 27 __int64 fixpoint_mul(int, int); |
1556 | 28 __int64 fixpoint_dot(int x1, int x2, int y1, int y2, int z1, int z2); |
29 __int64 fixpoint_div(int, int); | |
1643 | 30 __int64 fixpoint_sub_unknown(int, int); |
1051 | 31 int fixpoint_from_float(float value); |
1640
afc1c3514dd5
Some common code from ODM and BLV RenderParams moved to IndoorCameraD3D
Nomad
parents:
1615
diff
changeset
|
32 int fixpoint_from_int(int lhv, int rhv); |
1051 | 33 |
1131
71ba92960bc5
banker's rounding template made as fast as before and a bit more safe
Grumpy7
parents:
1130
diff
changeset
|
34 template <typename FloatType> |
1527 | 35 inline int bankersRounding( |
1131
71ba92960bc5
banker's rounding template made as fast as before and a bit more safe
Grumpy7
parents:
1130
diff
changeset
|
36 const FloatType& value |
71ba92960bc5
banker's rounding template made as fast as before and a bit more safe
Grumpy7
parents:
1130
diff
changeset
|
37 ) { |
71ba92960bc5
banker's rounding template made as fast as before and a bit more safe
Grumpy7
parents:
1130
diff
changeset
|
38 assert("Method unsupported for this type" && false); |
71ba92960bc5
banker's rounding template made as fast as before and a bit more safe
Grumpy7
parents:
1130
diff
changeset
|
39 return value; |
71ba92960bc5
banker's rounding template made as fast as before and a bit more safe
Grumpy7
parents:
1130
diff
changeset
|
40 } |
1130 | 41 |
1527 | 42 template<> inline int bankersRounding<float>(const float& inValue) |
1131
71ba92960bc5
banker's rounding template made as fast as before and a bit more safe
Grumpy7
parents:
1130
diff
changeset
|
43 { |
71ba92960bc5
banker's rounding template made as fast as before and a bit more safe
Grumpy7
parents:
1130
diff
changeset
|
44 union Cast |
1130 | 45 { |
1131
71ba92960bc5
banker's rounding template made as fast as before and a bit more safe
Grumpy7
parents:
1130
diff
changeset
|
46 double d; |
71ba92960bc5
banker's rounding template made as fast as before and a bit more safe
Grumpy7
parents:
1130
diff
changeset
|
47 long l; |
71ba92960bc5
banker's rounding template made as fast as before and a bit more safe
Grumpy7
parents:
1130
diff
changeset
|
48 }; |
71ba92960bc5
banker's rounding template made as fast as before and a bit more safe
Grumpy7
parents:
1130
diff
changeset
|
49 volatile Cast c; |
71ba92960bc5
banker's rounding template made as fast as before and a bit more safe
Grumpy7
parents:
1130
diff
changeset
|
50 c.d = inValue + 6755399441055744.0; |
71ba92960bc5
banker's rounding template made as fast as before and a bit more safe
Grumpy7
parents:
1130
diff
changeset
|
51 return c.l; |
71ba92960bc5
banker's rounding template made as fast as before and a bit more safe
Grumpy7
parents:
1130
diff
changeset
|
52 } |
1130 | 53 |
1131
71ba92960bc5
banker's rounding template made as fast as before and a bit more safe
Grumpy7
parents:
1130
diff
changeset
|
54 #pragma push_macro("max") |
71ba92960bc5
banker's rounding template made as fast as before and a bit more safe
Grumpy7
parents:
1130
diff
changeset
|
55 #undef max |
1527 | 56 template<> inline int bankersRounding<double>(const double& inValue) |
1131
71ba92960bc5
banker's rounding template made as fast as before and a bit more safe
Grumpy7
parents:
1130
diff
changeset
|
57 { |
71ba92960bc5
banker's rounding template made as fast as before and a bit more safe
Grumpy7
parents:
1130
diff
changeset
|
58 double maxValue = std::numeric_limits<int>::max(); |
71ba92960bc5
banker's rounding template made as fast as before and a bit more safe
Grumpy7
parents:
1130
diff
changeset
|
59 assert(maxValue - 6755399441055744.0 >= inValue); |
71ba92960bc5
banker's rounding template made as fast as before and a bit more safe
Grumpy7
parents:
1130
diff
changeset
|
60 union Cast |
71ba92960bc5
banker's rounding template made as fast as before and a bit more safe
Grumpy7
parents:
1130
diff
changeset
|
61 { |
71ba92960bc5
banker's rounding template made as fast as before and a bit more safe
Grumpy7
parents:
1130
diff
changeset
|
62 double d; |
71ba92960bc5
banker's rounding template made as fast as before and a bit more safe
Grumpy7
parents:
1130
diff
changeset
|
63 long l; |
71ba92960bc5
banker's rounding template made as fast as before and a bit more safe
Grumpy7
parents:
1130
diff
changeset
|
64 }; |
71ba92960bc5
banker's rounding template made as fast as before and a bit more safe
Grumpy7
parents:
1130
diff
changeset
|
65 volatile Cast c; |
71ba92960bc5
banker's rounding template made as fast as before and a bit more safe
Grumpy7
parents:
1130
diff
changeset
|
66 c.d = inValue + 6755399441055744.0; |
71ba92960bc5
banker's rounding template made as fast as before and a bit more safe
Grumpy7
parents:
1130
diff
changeset
|
67 return c.l; |
71ba92960bc5
banker's rounding template made as fast as before and a bit more safe
Grumpy7
parents:
1130
diff
changeset
|
68 } |
71ba92960bc5
banker's rounding template made as fast as before and a bit more safe
Grumpy7
parents:
1130
diff
changeset
|
69 #pragma pop_macro("max") |
1130 | 70 |
1527 | 71 extern struct stru193_math *stru_5C6E00; |