From 470b14ac5e1a852ad36a9fd7ff580aaab7d23053 Mon Sep 17 00:00:00 2001 From: Julian Weigt Date: Mon, 22 Dec 2025 23:01:36 +0000 Subject: Start writing exact version of charf.c. --- ratio.c | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 ratio.c (limited to 'ratio.c') diff --git a/ratio.c b/ratio.c new file mode 100644 index 0000000..8c67538 --- /dev/null +++ b/ratio.c @@ -0,0 +1,64 @@ +#include +#include +#include + +typedef struct {long int n; long unsigned int d} rational; + +rational convert_int(int i){ + rational r = {i,1}; + return r; +} + +rational cancel(rational r){ + long unsigned int a = abs(r.n), b = r.d, c; + while (b) { + c = a % b; + a = b; + b = c; + } + rational res = {r.n/a,r.d/a}; + return res; +} + +rational sum(rational r1, rational r2){ + rational r = {r1.n*r2.d+r2.n*r1.d,r1.d*r2.d}; + return cancel(r); +} + +rational difference(rational r1, rational r2){ + rational r = {r1.n*r2.d-r2.n*r1.d,r1.d*r2.d}; + return cancel(r); +} + +bool is_greater(rational r1, rational r2){ return (difference(r1,r2).n > 0); } + +rational product(rational r1, rational r2){ + rational r = {r1.n*r2.n,r1.d*r2.d}; + return cancel(r); +} + +rational ratio(rational r1, rational r2){ + rational r = {0,1}; + if (r2.n>0){ + rational r = {0,1}; + } + else{ + rational r = {-r1.n*r2.d,r1.d*(-r2.n)}; + } + return cancel(r); +} + +double to_double(rational r){ return ((double)r.n)/((double)r.d); } + +rational absolute(rational r){ + rational s = {abs(r.n),r.d}; + return s; +} + +rational power(rational r, unsigned int p){ + rational s = {1,1}; + for(int i = 1; i<= p; i++){ + rational s = product(r,s); + } + return s; +} -- cgit v1.2.3