cvs: php4 /ext/standard math.c

From: Date: Sun, 05 Aug 2001 20:27:04 +0000
Subject: cvs: php4 /ext/standard math.c
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-6588@lists.php.net to get a copy of this message
jeroen Sun Aug 5 16:27:04 2001 EDT Modified files: /php4/ext/standard math.c Log: Bugfix in abs(), abs(LONG_MIN) was bogus Index: php4/ext/standard/math.c diff -u php4/ext/standard/math.c:1.51 php4/ext/standard/math.c:1.52 --- php4/ext/standard/math.c:1.51 Sun Aug 5 10:40:14 2001 +++ php4/ext/standard/math.c Sun Aug 5 16:27:03 2001 @@ -19,7 +19,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: math.c,v 1.51 2001/08/05 14:40:14 stas Exp $ */ +/* $Id: math.c,v 1.52 2001/08/05 20:27:03 jeroen Exp $ */ #include "php.h" #include "php_math.h" @@ -49,7 +49,11 @@ if (Z_TYPE_PP(value) == IS_DOUBLE) { RETURN_DOUBLE(fabs(Z_DVAL_PP(value))); } else if (Z_TYPE_PP(value) == IS_LONG) { - RETURN_LONG(Z_LVAL_PP(value) < 0 ? -Z_LVAL_PP(value) : Z_LVAL_PP(value)); + if (Z_LVAL_PP(value) == LONG_MIN) { + RETURN_DOUBLE(-(double)LONG_MIN); + } else { + RETURN_LONG(Z_LVAL_PP(value) < 0 ? -Z_LVAL_PP(value) : Z_LVAL_PP(value)); + } } RETURN_FALSE; @@ -466,19 +470,10 @@ } case 1: RETURN_LONG(1); - case LONG_MIN: /* special case since -LONG_MIN == 0 */ - /* lexp != 0, and only lexp==1 is LONG, DOUBLE otherwise */ - if (lexp == 1) { - RETURN_LONG(LONG_MIN); - } else { - dval = exp(log(-(double)LONG_MIN) * (double)lexp); - RETURN_DOUBLE(lexp&1 ? -dval : dval); - } default: /* abs(lbase) > 1 */ - dval = exp(log((double) (lbase>0?lbase:-lbase)) * + dval = exp(log(lbase>0? (double)lbase : -(double)lbase ) * (double) lexp); - /* long result = 1; */ if (lexp < 0 || dval > (double) LONG_MAX) { /* 1/n ( abs(n) > 1 ) || overflow */ RETURN_DOUBLE(((lexp & 1) && lbase<0) ? -dval : dval);

« previous php.cvs (#6588) next »