diff options
Diffstat (limited to 'ratio.c')
| -rw-r--r-- | ratio.c | 64 |
1 files changed, 64 insertions, 0 deletions
@@ -0,0 +1,64 @@ +#include <stdio.h> +#include <stdlib.h> +#include <math.h> + +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; +} |
