diff options
| author | Julian Weigt <juw@posteo.de> | 2025-12-22 23:01:36 +0000 |
|---|---|---|
| committer | Julian Weigt <juw@posteo.de> | 2026-02-04 15:55:45 +0100 |
| commit | 470b14ac5e1a852ad36a9fd7ff580aaab7d23053 (patch) | |
| tree | a942e1e051d35f19118e99a6402afbb443679759 /ratio.c | |
| parent | 01f37f5a70891532f62925fab41b82fe9a194789 (diff) | |
Start writing exact version of charf.c.
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; +} |
