mirror of
https://github.com/RobTillaart/Arduino.git
synced 2024-09-20 00:55:58 -04:00
Optimized functions
Changed by-value elements to by-reference. Also changed private section to protected; in case someone wants to inherit the Fraction class.
This commit is contained in:
parent
19daf61fee
commit
5379f830b1
@ -227,14 +227,14 @@ double Fraction::toAngle()
|
|||||||
|
|
||||||
// the mediant is a fraction that is always between 2 fractions
|
// the mediant is a fraction that is always between 2 fractions
|
||||||
// at least if within precission.
|
// at least if within precission.
|
||||||
Fraction Fraction::mediant(Fraction a, Fraction b)
|
Fraction Fraction::mediant(const Fraction &a, const Fraction &b)
|
||||||
{
|
{
|
||||||
return Fraction(a.n + b.n, a.d + b.d);
|
return Fraction(a.n + b.n, a.d + b.d);
|
||||||
}
|
}
|
||||||
|
|
||||||
// approximate a fraction with defined denominator
|
// approximate a fraction with defined denominator
|
||||||
// sort of setDenominator(uint16_t den);
|
// sort of setDenominator(uint16_t den);
|
||||||
Fraction Fraction::setDenominator(Fraction a, uint16_t b)
|
Fraction Fraction::setDenominator(const Fraction &a, uint16_t b)
|
||||||
{
|
{
|
||||||
int32_t n = round((a.n * b * 1.0) / a.d);
|
int32_t n = round((a.n * b * 1.0) / a.d);
|
||||||
int32_t d = b;
|
int32_t d = b;
|
||||||
@ -245,7 +245,7 @@ Fraction Fraction::setDenominator(Fraction a, uint16_t b)
|
|||||||
////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////
|
||||||
// PRIVATE
|
// PRIVATE
|
||||||
// http://en.wikipedia.org/wiki/Binary_GCD_algorithm
|
// http://en.wikipedia.org/wiki/Binary_GCD_algorithm
|
||||||
int32_t Fraction::gcd(int32_t a , int32_t b)
|
int32_t& Fraction::gcd(int32_t &a , int32_t &b)
|
||||||
{
|
{
|
||||||
long c;
|
long c;
|
||||||
while ( a != 0 )
|
while ( a != 0 )
|
||||||
|
@ -56,15 +56,15 @@ public:
|
|||||||
bool isProper(); // abs(f) < 1
|
bool isProper(); // abs(f) < 1
|
||||||
double toAngle();
|
double toAngle();
|
||||||
|
|
||||||
static Fraction mediant(Fraction, Fraction);
|
static Fraction mediant(const Fraction&, const Fraction&);
|
||||||
// approximate a fraction with defined denominator
|
// approximate a fraction with defined denominator
|
||||||
static Fraction setDenominator(Fraction, uint16_t);
|
static Fraction setDenominator(const Fraction&, uint16_t);
|
||||||
|
|
||||||
|
|
||||||
private:
|
protected:
|
||||||
void simplify();
|
void simplify();
|
||||||
double fractionize(double);
|
double fractionize(double);
|
||||||
int32_t gcd(int32_t, int32_t);
|
int32_t& gcd(int32_t&, int32_t&);
|
||||||
|
|
||||||
int32_t n;
|
int32_t n;
|
||||||
int32_t d;
|
int32_t d;
|
||||||
|
Loading…
Reference in New Issue
Block a user