Simple fraction structure
Holds numerator and denominator. Can self simplify, but not automatically.
This commit is contained in:
33
src/main.cpp
33
src/main.cpp
@@ -14,9 +14,42 @@
|
|||||||
* Description: Entrypoint
|
* Description: Entrypoint
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <cstdint>
|
||||||
#include <cstdio>
|
#include <cstdio>
|
||||||
#include <raylib.h>
|
#include <raylib.h>
|
||||||
|
|
||||||
|
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)
|
int main(void)
|
||||||
{
|
{
|
||||||
puts("Hello, world!");
|
puts("Hello, world!");
|
||||||
|
|||||||
Reference in New Issue
Block a user