Edit report at http://bugs.php.net/bug.php?id=51701&edit=1

 ID:               51701
 Comment by:       magnolitao at gmail dot com
 Reported by:      k dot nagakiran at gmail dot com
 Summary:          "Maximum execution time exceeded" error with round()
                   API on octeon platform
 Status:           Open
 Type:             Bug
 Package:          Math related
 Operating System: Octeon
 PHP Version:      5.3.2

 New Comment:

I had a problem like this with php 5.3.2. but on freebsd 7.2...



Not a problem of max_execution_time but with the round() function, 



<?php

echo round((5.5/100),3);

// gives : 0.0550000000000000002775557561563 <== I specified and
expected 3 floats, and no 30 !

?>

I have tested it on different PHP versions and OS, and others worked
fine.

<?php

echo round((5.5/100),3);

// gives : 0.055

?>



Finally, the error was in my php.ini, "precision" was setted to 30.

I change it to 14 , as usually.

Now, it works fine.

It was my responsability.... but this comportement of round() is very
surprising and I suppose this could help to understand a problem of
max_execution of time if your "precision" is very large.



I tested to raise progressively the "precision" to 100000 and even if I
cannot obtain an error like "max_execution_time exceeded", pages were
more and more long to charge until I obtain this error : "Balloc()
allocation exceeds list boundary".

Before, the max of floats I obtained is 57 :
0.055000000000000000277555756156289135105907917022705078125.



I don't know if we could talk about a bug for this comportment of PHP,
but it seems very important to let the directive "precision" to 14...


Previous Comments:
------------------------------------------------------------------------
[2010-04-30 08:55:56] k dot nagakiran at gmail dot com

Stack Trace:

(gdb) bt

#0  mult (a=0xb32000, b=0xb33000) at
src/dist/php/Zend/zend_strtod.c:674

#1  0x006c9604 in pow5mult (b=0xb32000, k=<value optimized out>) at
src/dist/php/Zend/zend_strtod.c:803

#2  0x006cbf80 in zend_dtoa (_d=<value optimized out>, mode=2,
ndigits=14, decpt=0x3ffe9d80, sign=0x3ffe9d84, rve=0x0) at
src/dist/php/Zend/zend_strtod.c:1838

#3  0x005cd3c4 in php_gcvt (value=12, ndigit=14, dec_point=46 '.',
exponent=0 '\0', buf=0x3ffe9df1 "") at src/dist/php/main/snprintf.c:142

#4  0x005ce67c in vspprintf (pbuf=0x3ffea0e8, max_len=0, format=<value
optimized out>, ap=<value optimized out>) at
src/dist/php/main/spprintf.c:669

#5  0x00620db8 in zend_spprintf (message=0x3ffea0e8, max_len=0,
format=0x2 <Address 0x2 out of bounds>) at
src/dist/php/Zend/zend_exceptions.c:529

#6  0x006bc270 in zend_locale_sprintf_double (op=0x3ffea0e8) at
src/dist/php/Zend/zend_operators.c:2047

#7  0x005f8dbc in zend_make_printable_zval (expr=0x9aec40,
expr_copy=0x3ffea0e8, use_copy=0x3ffea0f8) at
src/dist/php/Zend/zend.c:276

#8  0x005f8e8c in zend_print_zval_ex (write_func=0x5bb56c
<php_body_write_wrapper>, expr=0x3ffea0e8, indent=<value optimized out>)
at src/dist/php/Zend/zend.c:300

#9  0x005f95a0 in zend_print_zval (expr=0x0, indent=2) at
src/dist/php/Zend/zend.c:291

#10 0x006cce04 in zend_print_variable (var=0x3ffea0e8) at
src/dist/php/Zend/zend_variables.c:150

#11 0x0063d2b0 in ZEND_ECHO_SPEC_VAR_HANDLER (execute_data=0xaf1020) at
src/dist/php/Zend/zend_vm_execute.h:7819

#12 0x00625ea4 in execute (op_array=<value optimized out>) at
src/dist/php/Zend/zend_vm_execute.h:104

#13 0x005f7328 in zend_execute_scripts (type=8, retval=0x0,
file_count=3) at src/dist/php/Zend/zend.c:1194

#14 0x005bafbc in php_execute_script (primary_file=0x3ffeb8b8) at
src/dist/php/main/main.c:2260

#15 0x006cffa4 in main (argc=0, argv=0x0) at
src/dist/php/sapi/cgi/cgi_main.c:2102

(gdb) finish

Run till exit from #0  mult (a=0xb32000, b=0xb33000) at
src/dist/php/Zend/zend_strtod.c:674

0x006c9604 in pow5mult (b=0xb32000, k=<value optimized out>) at
src/dist/php/Zend/zend_strtod.c:803

803     in src/dist/php/Zend/zend_strtod.c

Value returned is $22 = (Bigint *) 0xb34000

(gdb) finish

Run till exit from #0  0x006c9604 in pow5mult (b=0xb32000, k=<value
optimized out>) at src/dist/php/Zend/zend_strtod.c:803

X-Powered-By: PHP/5.3.2

Content-type: text/html



<br />

<b>Fatal error</b>:  Maximum execution time of 30 seconds exceeded in
<b>/cf/var/jail/jail-srxsme/html/testPHP.php</b> on line <b>13</b><br
/>



Program exited with code 0377.

------------------------------------------------------------------------
[2010-04-30 07:02:32] k dot nagakiran at gmail dot com

Description:
------------
I am facing issues with round() API of PHP 5.3.2 compiled for octeon
platform.



The following one line script throws the following error:



"Maximum execution time of 30 seconds exceeded in <fileName>"



<?php

echo round(12);

?>



With gdb, I noticed that its doing an infinite loop inside 

"static Bigint * mult(Bigint *a, Bigint *b)"  in Zend/zend_strtod.c



It works fine with PHP 5.2.3 compiled for octeon platform.

I don't see any difference in function definition between these 2
releases.



Is it a known issue or any patch available?

Please let me know if I need to provide more information.



------------------------------------------------------------------------



-- 
Edit this bug report at http://bugs.php.net/bug.php?id=51701&edit=1

Reply via email to