cvs: php4 /ext/standard math.c
| From: | Jeroen van Wolffelaar | 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);