From: Andi Gutmans Date: Sun, 28 May 2000 18:59:40 +0000 (+0000) Subject: - Use pointer arithmetic to speed up the function a bit X-Git-Tag: PRE_EIGHT_BYTE_ALLOC_PATCH~208 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=015884dda5e0dd37a577e00aef7c395419af5626;p=php - Use pointer arithmetic to speed up the function a bit --- diff --git a/Zend/zend_operators.c b/Zend/zend_operators.c index a058083ef8..2c0b36bbed 100644 --- a/Zend/zend_operators.c +++ b/Zend/zend_operators.c @@ -51,42 +51,45 @@ ZEND_API double zend_string_to_double(const char *number, zend_uint length) { - zend_uint i=0; double divisor = 10.0; double result = 0.0; double exponent; + const char *end = number+length; + const char *digit = number; if (!length) { return result; } - for (i=0; i= '0')) { + while (digit < end) { + if ((*digit <= '9' && *digit >= '0')) { result *= 10; - result += number[i] - '0'; - } else if (number[i] == '.') { - i++; + result += *digit - '0'; + } else if (*digit == '.') { + digit++; break; - } else if (toupper(number[i]) == 'E') { - exponent = (double) atoi(&number[i+1]); + } else if (toupper(*digit) == 'E') { + exponent = (double) atoi(digit+1); result *= pow(10.0, exponent); return result; } else { return result; } + digit++; } - for (; i= '0')) { - result += (number[i] - '0') / divisor; + while (digit < end) { + if ((*digit <= '9' && *digit >= '0')) { + result += (*digit - '0') / divisor; divisor *= 10; - } else if (toupper(number[i]) == 'E') { - exponent = (double) atoi(&number[i+1]); + } else if (toupper(*digit) == 'E') { + exponent = (double) atoi(digit+1); result *= pow(10.0, exponent); return result; } else { return result; } + digit++; } return result; }