|
|
@ -68,8 +68,8 @@ constexpr typename SFixed<0, Fraction>::InternalType SFixed<0, Fraction>::getInt |
|
|
|
template< unsigned Fraction > |
|
|
|
template< unsigned Fraction > |
|
|
|
constexpr typename SFixed<0, Fraction>::IntegerType SFixed<0, Fraction>::getInteger(void) const |
|
|
|
constexpr typename SFixed<0, Fraction>::IntegerType SFixed<0, Fraction>::getInteger(void) const |
|
|
|
{ |
|
|
|
{ |
|
|
|
static_assert(false, "UNDEFINED BEHAVIOUR"); |
|
|
|
//static_assert(false, "UNDEFINED BEHAVIOUR");
|
|
|
|
//return (static_cast<IntegerType>(this->value >> IntegerShift) & IntegerMask) | ((this->value < 0) ? ~IntegerMask : 0);
|
|
|
|
return (static_cast<IntegerType>(this->value >> IntegerShift) & IntegerMask) | ((this->value < 0) ? ~IntegerMask : 0); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
template< unsigned Fraction > |
|
|
|
template< unsigned Fraction > |
|
|
@ -172,7 +172,7 @@ template< unsigned Fraction > |
|
|
|
SFixed<0, Fraction> & SFixed<0, Fraction>::operator *=(const SFixed<0, Fraction> & other) |
|
|
|
SFixed<0, Fraction> & SFixed<0, Fraction>::operator *=(const SFixed<0, Fraction> & other) |
|
|
|
{ |
|
|
|
{ |
|
|
|
using InternalType = typename SFixed<0, Fraction>::InternalType; |
|
|
|
using InternalType = typename SFixed<0, Fraction>::InternalType; |
|
|
|
using PrecisionType = typename SFixed<Integer * 2, Fraction * 2>::InternalType; |
|
|
|
using PrecisionType = typename SFixed<0, Fraction * 2>::InternalType; |
|
|
|
const PrecisionType temp = (static_cast<PrecisionType>(this->value) * static_cast<PrecisionType>(other.value)) >> Fraction; |
|
|
|
const PrecisionType temp = (static_cast<PrecisionType>(this->value) * static_cast<PrecisionType>(other.value)) >> Fraction; |
|
|
|
this->value = static_cast<InternalType>(temp); |
|
|
|
this->value = static_cast<InternalType>(temp); |
|
|
|
return *this; |
|
|
|
return *this; |
|
|
@ -182,7 +182,7 @@ template< unsigned Fraction > |
|
|
|
SFixed<0, Fraction> & SFixed<0, Fraction>::operator /=(const SFixed<0, Fraction> & other) |
|
|
|
SFixed<0, Fraction> & SFixed<0, Fraction>::operator /=(const SFixed<0, Fraction> & other) |
|
|
|
{ |
|
|
|
{ |
|
|
|
using InternalType = typename SFixed<0, Fraction>::InternalType; |
|
|
|
using InternalType = typename SFixed<0, Fraction>::InternalType; |
|
|
|
using PrecisionType = typename SFixed<Integer * 2, Fraction * 2>::InternalType; |
|
|
|
using PrecisionType = typename SFixed<0, Fraction * 2>::InternalType; |
|
|
|
const PrecisionType temp = (static_cast<PrecisionType>(this->value) << Fraction) / static_cast<PrecisionType>(other.value); |
|
|
|
const PrecisionType temp = (static_cast<PrecisionType>(this->value) << Fraction) / static_cast<PrecisionType>(other.value); |
|
|
|
this->value = static_cast<InternalType>(temp); |
|
|
|
this->value = static_cast<InternalType>(temp); |
|
|
|
return *this; |
|
|
|
return *this; |
|
|
|