summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulian Weigt <juw@posteo.de>2025-12-22 23:01:36 +0000
committerJulian Weigt <juw@posteo.de>2026-02-04 15:55:45 +0100
commit470b14ac5e1a852ad36a9fd7ff580aaab7d23053 (patch)
treea942e1e051d35f19118e99a6402afbb443679759
parent01f37f5a70891532f62925fab41b82fe9a194789 (diff)
Start writing exact version of charf.c.
-rw-r--r--charf.c15
-rw-r--r--double.c18
-rw-r--r--double.h17
-rw-r--r--ratio.c64
-rw-r--r--ratio.h23
5 files changed, 131 insertions, 6 deletions
diff --git a/charf.c b/charf.c
index 5ce7321..ccbc265 100644
--- a/charf.c
+++ b/charf.c
@@ -3,12 +3,15 @@
#include <math.h>
#define EXACT false
-#define VALUETYPE double
-#define EXPTYPE double
#if EXACT
+#include "ratio.h"
#define VALUETYPE ratio
-#define EXPTYPE int
+#define EXPTYPE unsigned int
+#else
+#include "double.h"
+#define VALUETYPE double
+#define EXPTYPE double
#endif
@@ -26,11 +29,11 @@ void differentiate(VALUETYPE** df, int D, int K){
/*given function f on domain [0,D-1] compute pth root of integral of |f|^p*/
VALUETYPE integrate(VALUETYPE* f, EXPTYPE p, int D){
- VALUETYPE sum = 0.0;
+ VALUETYPE integralp = 0.0;
for(int i=0;i<D;i++){
- sum += pow(fabs(f[i]),p);
+ integralp += pow(fabs(f[i]),p);
}
- return pow(sum,1/p);
+ return pow(integralp,1/p);
}
void compute_maximalfunction(VALUETYPE* f, VALUETYPE** Sf, VALUETYPE** Af, VALUETYPE* Mf, int D){
diff --git a/double.c b/double.c
new file mode 100644
index 0000000..170e56a
--- /dev/null
+++ b/double.c
@@ -0,0 +1,18 @@
+#include <stdlib.h>
+#include <math.h>
+
+double sum(double d1, double d2){ return d1+d2; }
+
+double difference(double d1, double d2){ return d1-d2; }
+
+bool is_greater(double d1, double d2){ return (d1 > d2); }
+
+double product(double d1, double d2){ return d1*d2; }
+
+double ratio(double d1, double d2){ return d1/d2; }
+
+double absolute(double d){ return abs(d); }
+
+double power(double d, double p) { return pow(d,p); }
+
+double to_double(double d){ return d; }
diff --git a/double.h b/double.h
new file mode 100644
index 0000000..3f31782
--- /dev/null
+++ b/double.h
@@ -0,0 +1,17 @@
+double convert_int(int);
+
+bool is_greater(double,double);
+
+double sum(double,double);
+
+double difference(double,double);
+
+double product(double,double);
+
+double ratio(double,double);
+
+double absolute(double);
+
+double power(double,double);
+
+double to_double(double);
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 <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;
+}
diff --git a/ratio.h b/ratio.h
new file mode 100644
index 0000000..26ed1c2
--- /dev/null
+++ b/ratio.h
@@ -0,0 +1,23 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+typedef struct {long int n; long unsigned int d}rational;
+
+rational convert_int(int);
+
+bool is_greater(rational,rational);
+
+rational sum(rational,rational);
+
+rational difference(rational,rational);
+
+rational product(rational,rational);
+
+rational ratio(rational,rational);
+
+rational absolute(rational);
+
+rational power(rational,unsigned int);
+
+double to_double(rational);