David Mathog
6/9/2011 8:55:00 PM
On Jun 9, 12:53 pm, Mickey Mouse <f...@email.com> wrote:
This seems to do the trick:
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#define fltprec(A,B) ((A) > (B) ? (A) : ((A) < -(B) ? (A) : 0.0 ))
int main(void){
double dv=0.0;
double dlim;
int precision;
for(precision=1; precision<15; precision++){
dlim=5*pow(10.0,-(precision+1));
fprintf(stdout,"dlim %.15f ",dlim);
fprintf(stdout," %.*f",precision,1.0001*dlim);
fprintf(stdout," %.*f",precision,dlim);
fprintf(stdout," %.*f\n",precision,0.9999*dlim);
}
for(precision=1; precision<15; precision++){
dlim=5*pow(10.0,-(precision+1));
fprintf(stdout,"dlim %.15f ",dlim);
fprintf(stdout," %.*f ",precision,fltprec(-dlim*10.0,dlim));
fprintf(stdout," %.*f ",precision,fltprec(dlim*10.0,dlim));
fprintf(stdout," %.*f ",precision,fltprec(-dlim,dlim));
fprintf(stdout," %.*f ",precision,fltprec(dlim,dlim));
fprintf(stdout," %.*f ",precision,fltprec(-dlim/10.0,dlim));
fprintf(stdout," %.*f\n",precision,fltprec(dlim/10.0,dlim));
}
}
The first loop shows that there are rounding issues for various
precisions
right at the cutoff (sometimes rounds up, sometimes down). So the
slightly modified #define handles those, resulting in zero in all
columns which were supposed to be (not -0).
Hopefully that is the final solution.
Regards,
David Mathog