zend_u_strtod is slow - possible fix

php.internals

Matt W

20 years ago
Hi all, As I was working on upgrading the dec[bin|hex|oct] functions to convert large doubles, I noticed how much slower things were when converting Unicode strings to double. I found that converting the whole thing to string and using regular zend_strtod() was much faster. Then I decided to try modifying the u_strtod() function to do the same, but just on the relevant numeric portion. I don't know if I did everything right, but it seems to work fine with my limited testing. (I was working from zend_u_strtol() and zval_unicode_to_string_ex(). :-)) The function is now about *8 times* faster, and nearly 20 times faster on a non-numeric string! (I'm on Windows.) diff: http://realplain.com/php/zend_u_strtod.diff Is this something that can be used? Thanks, Matt

Andrei Zmievski

20 years ago
Yes. With your patch applied, the numeric unicode string to double conversion is about 100% slower than from binary strings. If this is acceptable we can commit the patch. Otherwise, we should port zend_strtod() to deal with unicode strings directly. -Andrei On Jul 31, 2006, at 1:58 AM, Matt W wrote:

Matt W

20 years ago
Hi Andrei, Thanks for your reply. Yeah, obviously it'll still be slower than with an already-binary string. :-) But I figured it's better than before, until something better comes along... Unless there were other plans to rewrite it, is there a way to easily (for me! :-)) have it do all the conversion? I've been thinking about the different string-to-number functions (will send a separate e-mail)... Is there a reason the regular zend_strtod() code is so complicated? zend_string_to_double(), for example, is really simple (and works the same I assume, except for not handling negatives or leading whitespace). Can zend_u_strtod() be implemented with the same methods zend_string_to_double() uses? Thanks, Matt ----- Original Message ----- From: "Andrei Zmievski" Sent: Tuesday, August 01, 2006

Andrei Zmievski

20 years ago
You'd have to ask Derick. He's the one who added it. :) Note that zend_string_to_double() is not actually used anywhere. -A On Aug 2, 2006, at 2:12 AM, Matt W wrote:

Derick Rethans

20 years ago
On Wed, 2 Aug 2006, Andrei Zmievski wrote:
> You'd have to ask Derick. He's the one who added it. :) Note that > zend_string_to_double() is not actually used anywhere.
I stole it from BSD, and yes... this is really needed because of all the different architectures. Derick

Andrei Zmievski

20 years ago
Want to port it to support UChar*? -A On Aug 3, 2006, at 12:24 AM, Derick Rethans wrote: