Mercurial > mm7
annotate Math.h @ 1640:afc1c3514dd5
Some common code from ODM and BLV RenderParams moved to IndoorCameraD3D
author | Nomad |
---|---|
date | Tue, 17 Sep 2013 17:40:59 +0200 |
parents | 89dec2be255f |
children | 7182930263b3 |
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 | |
1556 | 27 __int64 fixpoint_sub0(int, int); |
1615 | 28 __int64 fixpoint_sub2(int, int); |
1556 | 29 __int64 fixpoint_dot(int x1, int x2, int y1, int y2, int z1, int z2); |
30 __int64 fixpoint_div(int, int); | |
31 __int64 fixpoint_mul(int, int); | |
1051 | 32 int fixpoint_from_float(float value); |
1640
afc1c3514dd5
Some common code from ODM and BLV RenderParams moved to IndoorCameraD3D
Nomad
parents:
1615
diff
changeset
|
33 int fixpoint_from_int(int lhv, int rhv); |
1051 | 34 |
1131
71ba92960bc5
banker's rounding template made as fast as before and a bit more safe
Grumpy7
parents:
1130
diff
changeset
|
35 template <typename FloatType> |
1527 | 36 inline int bankersRounding( |
1131
71ba92960bc5
banker's rounding template made as fast as before and a bit more safe
Grumpy7
parents:
1130
diff
changeset
|
37 const FloatType& value |
71ba92960bc5
banker's rounding template made as fast as before and a bit more safe
Grumpy7
parents:
1130
diff
changeset
|
38 ) { |
71ba92960bc5
banker's rounding template made as fast as before and a bit more safe
Grumpy7
parents:
1130
diff
changeset
|
39 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
|
40 return value; |
71ba92960bc5
banker's rounding template made as fast as before and a bit more safe
Grumpy7
parents:
1130
diff
changeset
|
41 } |
1130 | 42 |
1527 | 43 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
|
44 { |
71ba92960bc5
banker's rounding template made as fast as before and a bit more safe
Grumpy7
parents:
1130
diff
changeset
|
45 union Cast |
1130 | 46 { |
1131
71ba92960bc5
banker's rounding template made as fast as before and a bit more safe
Grumpy7
parents:
1130
diff
changeset
|
47 double d; |
71ba92960bc5
banker's rounding template made as fast as before and a bit more safe
Grumpy7
parents:
1130
diff
changeset
|
48 long l; |
71ba92960bc5
banker's rounding template made as fast as before and a bit more safe
Grumpy7
parents:
1130
diff
changeset
|
49 }; |
71ba92960bc5
banker's rounding template made as fast as before and a bit more safe
Grumpy7
parents:
1130
diff
changeset
|
50 volatile Cast c; |
71ba92960bc5
banker's rounding template made as fast as before and a bit more safe
Grumpy7
parents:
1130
diff
changeset
|
51 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
|
52 return c.l; |
71ba92960bc5
banker's rounding template made as fast as before and a bit more safe
Grumpy7
parents:
1130
diff
changeset
|
53 } |
1130 | 54 |
1131
71ba92960bc5
banker's rounding template made as fast as before and a bit more safe
Grumpy7
parents:
1130
diff
changeset
|
55 #pragma push_macro("max") |
71ba92960bc5
banker's rounding template made as fast as before and a bit more safe
Grumpy7
parents:
1130
diff
changeset
|
56 #undef max |
1527 | 57 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
|
58 { |
71ba92960bc5
banker's rounding template made as fast as before and a bit more safe
Grumpy7
parents:
1130
diff
changeset
|
59 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
|
60 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
|
61 union Cast |
71ba92960bc5
banker's rounding template made as fast as before and a bit more safe
Grumpy7
parents:
1130
diff
changeset
|
62 { |
71ba92960bc5
banker's rounding template made as fast as before and a bit more safe
Grumpy7
parents:
1130
diff
changeset
|
63 double d; |
71ba92960bc5
banker's rounding template made as fast as before and a bit more safe
Grumpy7
parents:
1130
diff
changeset
|
64 long l; |
71ba92960bc5
banker's rounding template made as fast as before and a bit more safe
Grumpy7
parents:
1130
diff
changeset
|
65 }; |
71ba92960bc5
banker's rounding template made as fast as before and a bit more safe
Grumpy7
parents:
1130
diff
changeset
|
66 volatile Cast c; |
71ba92960bc5
banker's rounding template made as fast as before and a bit more safe
Grumpy7
parents:
1130
diff
changeset
|
67 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
|
68 return c.l; |
71ba92960bc5
banker's rounding template made as fast as before and a bit more safe
Grumpy7
parents:
1130
diff
changeset
|
69 } |
71ba92960bc5
banker's rounding template made as fast as before and a bit more safe
Grumpy7
parents:
1130
diff
changeset
|
70 #pragma pop_macro("max") |
1130 | 71 |
1527 | 72 extern struct stru193_math *stru_5C6E00; |