diff options
| author | Julian Weigt <juw@posteo.de> | 2026-01-16 19:05:23 +0100 |
|---|---|---|
| committer | Julian Weigt <juw@posteo.de> | 2026-02-04 15:55:54 +0100 |
| commit | 2d7d2f09189d57b47863d2ce89b6a450f4402681 (patch) | |
| tree | e8ac8b38fe3125631d4e6f1be0c068b4600a5b1e /charf.c | |
| parent | eefbfcdfc2f2374dcba95a62c31f3162e2247853 (diff) | |
Finish all printing including latex and niceties for printing 0 and 1 and such.
Diffstat (limited to 'charf.c')
| -rw-r--r-- | charf.c | 82 |
1 files changed, 68 insertions, 14 deletions
@@ -32,6 +32,8 @@ #define EXPTYPE double #endif +#define STRING_SIZE 65536 + /*maximum length of the support of f*/ #define N 24 @@ -162,16 +164,31 @@ int generate_function(VALUETYPE* f, int i){ //return generate_triangle(f,i); } -void format_result(char* s, int index, int k, EXPTYPE p, VALUETYPE r){ +#define FORMAT_TEXT 0 +#define FORMAT_LATEX 1 +void format_result(char* s, int index, int k, EXPTYPE p, VALUETYPE r, int format){ VALUETYPE f[N]; int d = generate_function(f,index); - sprintf(s,"f: "); - int l = 3; - for(int i=0; i<d; i++) l += sprintf(s+l,"%2.0f ",valuetype_to_double(f[i])); - for(int i=d; i<N; i++) l += sprintf(s+l," "); - char rts[128]; - root_to_string(rts,r,p); - l += sprintf(s+l,"|f^(%d)|_1/%2.1f: %s",k,inv_exptype_to_double(p),rts); + if(format == FORMAT_TEXT){ + strcpy(s,"f: "); + int l = 3; + for(int i=0; i<d; i++) l += sprintf(s+l,"%2.0f ",valuetype_to_double(f[i])); + for(int i=d; i<N; i++) l += sprintf(s+l," "); + char rts[128]; + root_to_string(rts,r,p); + l += sprintf(s+l,"|f^(%d)|_1/%2.1f: %s",k,inv_exptype_to_double(p),rts); + } + else if(format == FORMAT_LATEX){ + int l = 0; + char v[128]; + root_to_latex(v,r,p); + l += sprintf(s+l,"$%d$ & $\\frac1{%1.0f}$ & %s",k,inv_exptype_to_double(p),v); + for(int i=0; i<d; i++){ + valuetype_to_latex(v,f[i]); + l += sprintf(s+l,"& %s ",v); + } + for(int i=d; i<N; i++) l += sprintf(s+l,"& "); + } } bool over_threshold_charf(double t, int k){ @@ -237,7 +254,7 @@ int compute(int index, int num_exponents[K+1], EXPTYPE exponents[K+1][P], VALUET if(is_greater_certainly(r,(*records_ratio)[k][p])){ (*records_index)[k][p] = index; char s[1024]; - format_result(s, index, k, exponents[k][p], r); + format_result(s, index, k, exponents[k][p], r, FORMAT_TEXT); printf("%s\n",s); } (*records_ratio)[k][p] = maximum((*records_ratio)[k][p],r); @@ -247,13 +264,46 @@ int compute(int index, int num_exponents[K+1], EXPTYPE exponents[K+1][P], VALUET return D; } -void print_records(int num_exponents[K+1], EXPTYPE exponents[K+1][P], VALUETYPE ratios[K+1][P], int indeces[K+1][P]){ - char s[1024]; - printf("Current records:\n"); +void format_results(char* text, int num_exponents[K+1], EXPTYPE exponents[K+1][P], VALUETYPE ratios[K+1][P], int indeces[K+1][P], int format){ + char newline[4]; + if(format == FORMAT_TEXT) strcpy(newline,""); + else if(format == FORMAT_LATEX) strcpy(newline,"\\\\"); + + char s[STRING_SIZE]; + int l = 0; for(int k=0; k<=K; k++) for(int p=0; p<num_exponents[k]; p++){ - format_result(s, indeces[k][p], k, exponents[k][p], ratios[k][p]); - printf("%s\n",s); + format_result(s, indeces[k][p], k, exponents[k][p], ratios[k][p], format); + l += sprintf(text+l,"%s%s\n",s,newline); } + /*Remove last \\ and \n*/ + text[l-4] = '\0'; +} + +void print_records(int num_exponents[K+1], EXPTYPE exponents[K+1][P], VALUETYPE ratios[K+1][P], int indeces[K+1][P]){ + char s[STRING_SIZE]; + printf("Current records:\n"); + format_results(s, num_exponents, exponents, ratios, indeces, FORMAT_TEXT); + printf("%s\n",s); +} + +void print_latex_records_to_file(int num_exponents[K+1], EXPTYPE exponents[K+1][P], VALUETYPE ratios[K+1][P], int indeces[K+1][P], char* filename){ + char h[1024]; + strcpy(h,"{ccc"); + for(int n=0; n<N; n++) strcat(h,"c"); + strcat(h,"}"); + + char f[1024]; + strcpy(f,"$k$ & $p$ & $r$ & $f$ "); + for(int n=1; n<N; n++) strcat(f,"& "); + strcat(f,"\\\\\n\\hline"); + + char s[STRING_SIZE]; + format_results(s, num_exponents, exponents, ratios, indeces, FORMAT_LATEX); + + FILE *fptr; + fptr = fopen(filename, "w"); + fprintf(fptr, "\\begin{tabular}%s\n%s\n%s\n\\end{tabular}",h,f,s); + fclose(fptr); } typedef struct { int num_exponents[K+1]; EXPTYPE exponents[K+1][P]; VALUETYPE (*records_ratio)[K+1][P]; int (*records_index)[K+1][P]; int num_thread; int* domain_current; int* cont; } Args; @@ -316,6 +366,10 @@ int main() { exit(EXIT_SUCCESS); } else if( 0 == strcmp(buff,"r")) print_records(num_exponents,exponents,records_ratio,records_index); + else if( 0 == strcmp(buff,"t")){ + getLine("Enter file name:\n", buff, sz); + print_latex_records_to_file(num_exponents,exponents,records_ratio,records_index,buff); + } } while(cont < NUM_THREADS); // wait for each thread to complete |
