#include "double.h" #include #include #include #include typedef long double vtype; typedef long double etype; vtype int_to_valuetype(int i){ return (vtype)i; } etype int_to_exptype(int d){ return (etype)d; } etype infinity_to_exptype(){ return INFINITY; } bool exptype_is_infinite(etype d){ return d==INFINITY; } vtype sum(vtype d1, vtype d2){ return d1+d2; } vtype difference(vtype d1, vtype d2){ return d1-d2; } bool is_greater_certainly(vtype d1, vtype d2){ return (d1 > d2); } bool is_greater_possibly(vtype d1, vtype d2){ return is_greater_certainly(d1,d2); } vtype maximum(vtype d1, vtype d2){ if(d1>d2) return d1; else return d2; } vtype product(vtype d1, vtype d2){ return d1*d2; } vtype ratio(vtype d1, vtype d2){ return d1/d2; } vtype absolute(vtype d){ //return fabs(d); return fabsl(d); } vtype power(vtype d, vtype p) { return pow(d,p); } double valuetype_to_double(vtype d){ return (double)d; } int valuetype_to_string(char* s, vtype d){ if( d == 0.0 || d == 1.0 || d == 2.0 || d == 4.0 || d == 8.0 || d == 16.0 ) sprintf(s,"%d", (int)d); //else sprintf(s,"%4.3f",d); //else sprintf(s,"%+4.3Le",d); else sprintf(s,"%4.3Lf",d); return 0; } int valuetype_to_latex(char* s, vtype d){ return valuetype_to_string(s,d); } int exptype_to_string(char *s, etype p){ if(exptype_is_infinite(p)){ sprintf(s,"inf"); return 0; } else return valuetype_to_string(s,p); } int exptype_to_latex(char *s, etype p){ if(exptype_is_infinite(p)){ sprintf(s,"\\infty"); return 0; } else return valuetype_to_latex(s,p); } int root_to_string(char* s, vtype d, etype p){ if(exptype_is_infinite(p)) valuetype_to_string(s,d); else valuetype_to_string(s,pow(d,1.0/p)); return 0; } int root_to_latex(char* s, vtype d, etype p){ if(exptype_is_infinite(p)) valuetype_to_latex(s,d); else valuetype_to_latex(s,pow(d,1.0/p)); return 0; }