Hi Ramakrishnan,
The code in your latest patch looks good to me, though the commit
message has some problems, and I'd add more test cases:
> * libguile/numbers.c: If base is negative, expt needs to find
> -x^n = (-1^n) * (|x|^n). We find x^n and then if n is odd, we
> also multiply the result with -1. These changes apply only for
> cases where n is an integer.
In the equation above, -x^n parses as -(x^n), but it should be (-x)^n.
Same problem with (-1^n). Also, the absolute value should be removed.
It is superfluous for the case you are handling (x>0), and for other
cases it is erroneous.
The equation above should be: (-x)^n = (-1)^n * x^n
Also, I would add a couple more test cases:
* Test the case from Ludovic's original bug report:
(expt -2742638075.5 2) should loosely equal
7.52206361318235e18
* Test that (expt -1 0.5) is loosely equal to +i.
(I believe this would have failed with your second patch)
Thanks,
Mark