Introduce normalised value in fraction class

Bit of a cheat but it would allow us to do some interesting graphical
stuff later.
This commit is contained in:
2024-07-26 03:11:58 +01:00
parent f58a7e80ef
commit 7f7a609d30
2 changed files with 6 additions and 1 deletions

View File

@@ -19,13 +19,17 @@
#include <sstream> #include <sstream>
Fraction::Fraction(word_t numerator, word_t denominator) Fraction::Fraction(word_t numerator, word_t denominator)
: numerator{numerator}, denominator{denominator} : numerator{numerator}, denominator{denominator},
norm{numerator / ((long double)denominator)}
{ {
word_t hcf = gcd(MIN(numerator, denominator), MAX(numerator, denominator)); word_t hcf = gcd(MIN(numerator, denominator), MAX(numerator, denominator));
numerator /= hcf; numerator /= hcf;
denominator /= hcf; denominator /= hcf;
} }
// floating point arithmetic inaccuracies blah blah blah better to use
// simplified fractions here
bool Fraction::operator<(const Fraction other) bool Fraction::operator<(const Fraction other)
{ {
if (other.denominator == denominator) if (other.denominator == denominator)

View File

@@ -30,6 +30,7 @@ typedef uint64_t word_t;
struct Fraction struct Fraction
{ {
word_t numerator, denominator; word_t numerator, denominator;
long double norm;
Fraction(word_t numerator = 0, word_t denominator = 1); Fraction(word_t numerator = 0, word_t denominator = 1);
bool operator<(const Fraction other); bool operator<(const Fraction other);