aboutsummaryrefslogtreecommitdiff
path: root/APEX_1.4/shared/general/HACD/include/dgGoogol.h
diff options
context:
space:
mode:
authorgit perforce import user <a@b>2016-10-25 12:29:14 -0600
committerSheikh Dawood Abdul Ajees <Sheikh Dawood Abdul Ajees>2016-10-25 18:56:37 -0500
commit3dfe2108cfab31ba3ee5527e217d0d8e99a51162 (patch)
treefa6485c169e50d7415a651bf838f5bcd0fd3bfbd /APEX_1.4/shared/general/HACD/include/dgGoogol.h
downloadphysx-3.4-3dfe2108cfab31ba3ee5527e217d0d8e99a51162.tar.xz
physx-3.4-3dfe2108cfab31ba3ee5527e217d0d8e99a51162.zip
Initial commit:
PhysX 3.4.0 Update @ 21294896 APEX 1.4.0 Update @ 21275617 [CL 21300167]
Diffstat (limited to 'APEX_1.4/shared/general/HACD/include/dgGoogol.h')
-rw-r--r--APEX_1.4/shared/general/HACD/include/dgGoogol.h109
1 files changed, 109 insertions, 0 deletions
diff --git a/APEX_1.4/shared/general/HACD/include/dgGoogol.h b/APEX_1.4/shared/general/HACD/include/dgGoogol.h
new file mode 100644
index 00000000..9dd38705
--- /dev/null
+++ b/APEX_1.4/shared/general/HACD/include/dgGoogol.h
@@ -0,0 +1,109 @@
+/* Copyright (c) <2003-2011> <Julio Jerez, Newton Game Dynamics>
+*
+* This software is provided 'as-is', without any express or implied
+* warranty. In no event will the authors be held liable for any damages
+* arising from the use of this software.
+*
+* Permission is granted to anyone to use this software for any purpose,
+* including commercial applications, and to alter it and redistribute it
+* freely, subject to the following restrictions:
+*
+* 1. The origin of this software must not be misrepresented; you must not
+* claim that you wrote the original software. If you use this software
+* in a product, an acknowledgment in the product documentation would be
+* appreciated but is not required.
+*
+* 2. Altered source versions must be plainly marked as such, and must not be
+* misrepresented as being the original software.
+*
+* 3. This notice may not be removed or altered from any source distribution.
+*/
+
+#ifndef __dgGoogol__
+#define __dgGoogol__
+
+
+#include "dgArray.h"
+#include "dgVector.h"
+
+
+
+//#define DG_GOOGOL_SIZE 16
+#define DG_GOOGOL_SIZE 4
+
+class dgGoogol
+{
+ public:
+ dgGoogol(void);
+ dgGoogol(double value);
+ ~dgGoogol(void);
+
+ double GetAproximateValue() const;
+ void InitFloatFloat (double value);
+
+ dgGoogol operator+ (const dgGoogol &A) const;
+ dgGoogol operator- (const dgGoogol &A) const;
+ dgGoogol operator* (const dgGoogol &A) const;
+ dgGoogol operator/ (const dgGoogol &A) const;
+
+ dgGoogol operator+= (const dgGoogol &A);
+ dgGoogol operator-= (const dgGoogol &A);
+
+ dgGoogol Floor () const;
+
+#ifdef _DEBUG
+ void ToString (char* const string) const;
+#endif
+
+ private:
+ void NegateMantissa (uint64_t* const mantissa) const;
+ void CopySignedMantissa (uint64_t* const mantissa) const;
+ int32_t NormalizeMantissa (uint64_t* const mantissa) const;
+ uint64_t CheckCarrier (uint64_t a, uint64_t b) const;
+ void ShiftRightMantissa (uint64_t* const mantissa, int32_t bits) const;
+
+ int32_t LeadinZeros (uint64_t a) const;
+ void ExtendeMultiply (uint64_t a, uint64_t b, uint64_t& high, uint64_t& low) const;
+ void ScaleMantissa (uint64_t* const out, uint64_t scale) const;
+
+ int8_t m_sign;
+ int16_t m_exponent;
+ uint64_t m_mantissa[DG_GOOGOL_SIZE];
+};
+
+
+class dgHugeVector: public dgTemplateVector<dgGoogol>
+{
+ public:
+ dgHugeVector ()
+ :dgTemplateVector<dgGoogol>()
+ {
+ }
+
+ dgHugeVector (const dgBigVector& a)
+ :dgTemplateVector<dgGoogol>(dgGoogol (a.m_x), dgGoogol (a.m_y), dgGoogol (a.m_z), dgGoogol (a.m_w))
+ {
+ }
+
+ dgHugeVector (const dgTemplateVector<dgGoogol>& a)
+ :dgTemplateVector<dgGoogol>(a)
+ {
+ }
+
+ dgHugeVector (double x, double y, double z, double w)
+ :dgTemplateVector<dgGoogol>(x, y, z, w)
+ {
+ }
+
+ dgGoogol EvaluePlane (const dgHugeVector& point) const
+ {
+ return (point % (*this)) + m_w;
+ }
+
+
+
+
+};
+
+
+#endif