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

 ID:                 63136
 Updated by:         ni...@php.net
 Reported by:        tstobbe at sacbee dot com
 Summary:            pow() returns NaN where base is negative and
                     exponent is an odd number root
-Status:             Open
+Status:             Not a bug
 Type:               Bug
 Package:            Math related
 Operating System:   Linux (fc17, 32-bit)
 PHP Version:        5.4.7
 Block user comment: N
 Private report:     N

 New Comment:

Real-exponent powers are not defined for negative numbers, see 
http://en.wikipedia.org/wiki/Exponentiation#Real_exponents_with_negative_bases.

You can see this very easily if you remember that a^b is defined as 
exp(b*ln(a)) and the logarithm is only defined in the range ]0,inf[.


Previous Comments:
------------------------------------------------------------------------
[2012-09-22 02:47:21] tstobbe at sacbee dot com

It should be noted that all subsequent fractional pow() issues are related to 
this. For example: pow(-[any number], 1/5) vs pow(-[any number], 2/5). Likewise 
I suspect that most other exponent based functions (such as log with an 
arbitrary base) are probably suspect, but this hasn't been verified.

------------------------------------------------------------------------
[2012-09-21 22:38:15] tstobbe at sacbee dot com

Description:
------------
Odd roots (3, 5, etc) of negative numbers passed to pow() result in NaN rather 
than the actual result. While this makes sense for even numbered roots (sqrt 
and 
what-not), it wrecks havoc on any system that actually uses arbitrary roots of 
negative numbers.

Example: -2*-2*-2 = -8; pow(-8, 1/3) should return -2

Test script:
---------------
var_dump(pow(-8, 1/3));


Expected result:
----------------
float(-2)


Actual result:
--------------
float(NAN)



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



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

Reply via email to