3#include <Foundation/Math/Math.h>
5template <plUInt8 DecimalBits>
8 m_iValue = iVal << DecimalBits;
12template <plUInt8 DecimalBits>
19template <plUInt8 DecimalBits>
26template <plUInt8 DecimalBits>
29 return (plInt32)(m_iValue >> DecimalBits);
32template <plUInt8 DecimalBits>
35 return (
float)((double)m_iValue / (
double)(1 << DecimalBits));
38template <plUInt8 DecimalBits>
41 return ((
double)m_iValue / (
double)(1 << DecimalBits));
44template <plUInt8 DecimalBits>
50 const plInt64 TempLHS = m_iValue;
51 const plInt64 TempRHS = rhs.m_iValue;
53 plInt64 TempRes = TempLHS * TempRHS;
60 TempRes += ((TempRes & (1 << (DecimalBits - 1))) << 1);
62 TempRes >>= DecimalBits;
65 m_iValue = (plInt32)TempRes;
68template <plUInt8 DecimalBits>
71 plInt64 TempLHS = m_iValue;
72 const plInt64 TempRHS = rhs.m_iValue;
76 plInt64 TempRes = TempLHS / TempRHS;
79 TempRes += ((TempRes & (1 << (31 - DecimalBits - 1))) << 1);
81 TempRes >>= (31 - DecimalBits);
84 m_iValue = (plInt32)TempRes;
88template <plUInt8 DecimalBits>
96template <plUInt8 DecimalBits>
104template <plUInt8 DecimalBits>
112template <plUInt8 DecimalBits>
121template <plUInt8 DecimalBits>
129template <plUInt8 DecimalBits>
137template <plUInt8 DecimalBits>
Implements fixed point arithmetic for fractional values.
Definition FixedPoint.h:23
double ToDouble() const
Implicit conversion to double.
Definition FixedPoint_inl.h:39
const plFixedPoint< DecimalBits > & operator=(plInt32 iVal)
Assignment from an integer.
Definition FixedPoint_inl.h:6
void operator*=(const plFixedPoint< DecimalBits > &rhs)
*= operator
Definition FixedPoint_inl.h:45
plInt32 ToInt() const
Implicit conversion to int (the fractional part is dropped).
Definition FixedPoint_inl.h:27
float ToFloat() const
Implicit conversion to float.
Definition FixedPoint_inl.h:33
void operator/=(const plFixedPoint< DecimalBits > &rhs)
/= operator
Definition FixedPoint_inl.h:69
PL_ALWAYS_INLINE double Round(double f)
Rounds f to the next integer.
Definition MathDouble_inl.h:35