Plasma Engine  2.0
Loading...
Searching...
No Matches
Rational_inl.h
1
2PL_ALWAYS_INLINE plRational::plRational()
3
4 = default;
5
6PL_ALWAYS_INLINE plRational::plRational(plUInt32 uiNumerator, plUInt32 uiDenominator)
7 : m_uiNumerator(uiNumerator)
8 , m_uiDenominator(uiDenominator)
9{
10}
11
12PL_ALWAYS_INLINE bool plRational::IsIntegral() const
13{
14 if (m_uiNumerator == 0 && m_uiDenominator == 0)
15 return true;
16
17 return ((m_uiNumerator / m_uiDenominator) * m_uiDenominator) == m_uiNumerator;
18}
19
20PL_ALWAYS_INLINE bool plRational::operator==(const plRational& other) const
21{
22 return m_uiNumerator == other.m_uiNumerator && m_uiDenominator == other.m_uiDenominator;
23}
24
25PL_ALWAYS_INLINE bool plRational::operator!=(const plRational& other) const
26{
27 return m_uiNumerator != other.m_uiNumerator || m_uiDenominator != other.m_uiDenominator;
28}
29
30PL_ALWAYS_INLINE plUInt32 plRational::GetNumerator() const
31{
32 return m_uiNumerator;
33}
34
35PL_ALWAYS_INLINE plUInt32 plRational::GetDenominator() const
36{
37 return m_uiDenominator;
38}
39
40PL_ALWAYS_INLINE plUInt32 plRational::GetIntegralResult() const
41{
42 if (m_uiNumerator == 0 && m_uiDenominator == 0)
43 return 0;
44
45 return m_uiNumerator / m_uiDenominator;
46}
47
48PL_ALWAYS_INLINE double plRational::GetFloatingPointResult() const
49{
50 if (m_uiNumerator == 0 && m_uiDenominator == 0)
51 return 0.0;
52
53 return static_cast<double>(m_uiNumerator) / static_cast<double>(m_uiDenominator);
54}
55
56PL_ALWAYS_INLINE bool plRational::IsValid() const
57{
58 return m_uiDenominator != 0 || (m_uiNumerator == 0 && m_uiDenominator == 0);
59}
60
62{
63 PL_ASSERT_DEV(IsValid() && IsIntegral(), "ReduceIntegralFraction can only be called on valid, integral rational numbers");
64
65 return plRational(m_uiNumerator / m_uiDenominator, 1);
66}
A class which can be used to represent rational numbers by stating their numerator and denominator.
Definition Rational.h:13
bool IsIntegral() const
returns true if the division of the numerator by the denominator would result in a full integer
Definition Rational_inl.h:12
bool operator==(const plRational &other) const
Equality operator.
Definition Rational_inl.h:20
plUInt32 GetIntegralResult() const
Returns the result of the division as an integer.
Definition Rational_inl.h:40
plUInt32 GetDenominator() const
Returns the denominator.
Definition Rational_inl.h:35
plRational()
Default constructor, initializes to 0/1.
plUInt32 GetNumerator() const
Returns the numerator of the rational number.
Definition Rational_inl.h:30
bool operator!=(const plRational &other) const
Inequality operator.
Definition Rational_inl.h:25
bool IsValid() const
Returns true if the rational is valid (follows the rules stated in the class description)
Definition Rational_inl.h:56
double GetFloatingPointResult() const
Returns the result of the division as a floating point number (double).
Definition Rational_inl.h:48
plRational ReduceIntegralFraction() const
This helper returns a reduced fraction in case of an integral input.
Definition Rational_inl.h:61