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
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
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
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
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
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
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
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?
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
Want to port it to support UChar*?
-A
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