1
0
mirror of https://github.com/php/php-src.git synced 2026-04-08 00:22:52 +02:00

- Use pointer arithmetic to speed up the function a bit

This commit is contained in:
Andi Gutmans
2000-05-28 18:59:40 +00:00
parent 0ebb7335c9
commit 015884dda5

View File

@@ -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<length; i++) {
if ((number[i] <= '9' && number[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<length; i++) {
if ((number[i] <= '9' && number[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;
}