I don't quite understand. Can you give us a few examples, how they are handled by PHP today and how they would be handled by your code. I'll start off: 0.9+0.1
0.9+0.0000001 8/10.0 + 0.2 I'm sure you know of juicier examples :) Andi At 02:33 PM 6/26/2002 +0100, George Whiffen wrote: >Oops, > >I forgot to sort out the catastrophic loss of precision on >differences. So that >means that on add and subtract we need to use the maximum fabs value >of the operands to calculate the rounding trather than the result itself: > >So redecimalize() becomes: > >double redecimalize(double dval,double rval) >{ > double f; > if (dval == 0) > { > return dval; > } > f = pow(10.0, (double) DBL_DIG - (1 + floor(log10(fabs(rval))))); > return (double) (rint(dval*f))/f; > } > > >and add_function, div_function need to look more like: > >double dop1,dop2,rval; >.... > if ((op1->type == IS_DOUBLE || op1->type == IS_LONG) > && (op2->type == IS_LONG || op2->type == IS_DOUBLE)) { > dop1 = (op1->type == IS_LONG) ? ((double) op1->value.lval):op1->value.dval; > dop2 = (op2->type == IS_LONG) ? ((double) op2->value.lval):op2->value.dval; > result->value.dval = dop1 - dop2; > rval = fabs(dop1) > fabs(dop2) ? dop1:dop2; > result->value.dval = redecimalize(result->value.dval,rval); > result->type = IS_DOUBLE; > return SUCCESS; > } > >The calls to redecimalize on mul_function,div_function simply pass the >result twice e.g. > result->value.dval = redecimalize(result->value.dval,result->value.dval); > >There's no significant impact on performance. > >George > > > > >-- >PHP Development Mailing List <http://www.php.net/> >To unsubscribe, visit: http://www.php.net/unsub.php -- PHP Development Mailing List <http://www.php.net/> To unsubscribe, visit: http://www.php.net/unsub.php