From 0727126061f5ac48984beae72f2f50e92c7e2225 Mon Sep 17 00:00:00 2001 From: Aryadev Chavali Date: Thu, 25 Jul 2024 21:32:07 +0100 Subject: Simple fraction structure Holds numerator and denominator. Can self simplify, but not automatically. --- src/main.cpp | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) (limited to 'src') diff --git a/src/main.cpp b/src/main.cpp index 5d7858f..143816a 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -14,9 +14,42 @@ * Description: Entrypoint */ +#include #include #include +typedef uint64_t word_t; + +struct Fraction +{ + word_t numerator, denominator; + bool is_simplified; + + Fraction(word_t numerator = 0, word_t denominator = 1, + bool is_simplified = false) + : numerator{numerator}, denominator{denominator}, + is_simplified{is_simplified} + { + } + + void simplify(void) + { + // No-Op if already simplified + if (is_simplified) + return; + word_t a = numerator < denominator ? numerator : denominator, + b = numerator < denominator ? denominator : numerator; + // Euclidean algorithm + for (word_t r = b % a; r != 0; b = a, a = r, r = b % a) + continue; + // a will be the gcd + numerator /= a; + denominator /= a; + // Ensure this is a noop after this + is_simplified = true; + } +}; + int main(void) { puts("Hello, world!"); -- cgit v1.2.3-13-gbd6f