[
https://issues.apache.org/jira/browse/MATH-402?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12896366#action_12896366
]
Phil Steitz commented on MATH-402:
----------------------------------
The latest draft ISO C spec appears now to be public and is here:
http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1494.pdf
The complex specifications are in Annex G. Does not look like anything has
changed since C99x, though I have not done side-by-side comparisons. It looks
to me like what we have in the code now matches the spec; but the spec does not
specifically call out (unless I missed it) specialization to real arguments.
What is causing the NaN is the singularity in the log function. Colt 1.1
looks like it matches our code. R returns 0 + 0i.
> Complex.ZERO.pow(Complex.ONE) gives NaN in unit tests
> -----------------------------------------------------
>
> Key: MATH-402
> URL: https://issues.apache.org/jira/browse/MATH-402
> Project: Commons Math
> Issue Type: Bug
> Affects Versions: 2.2
> Environment: Issue 15
> http://code.google.com/p/symja/issues/detail?id=15
> Reporter: Axel Kramer
>
> Why does this unit test in ComplexTest.java gives NaN?
> I expected to get Complex.ZERO as the result?
> {code:java}
> public void testPowZero() {
> TestUtils.assertSame(Complex.NaN,
> Complex.ZERO.pow(Complex.ONE));
> ...
> }
> {code}
> I would suggest something like this for the Complex#pow() method:
> {code:java}
> public Complex pow(Complex x) {
> if (x == null) {
> throw new NullPointerException();
> }
> if (x.imaginary == 0.0) {
> if (real == 0.0 && imaginary == 0.0) {
> if (x.real == 0.0){
> return Complex.ZERO;
> }
> }
> if (x.real == 1.0) {
> return this;
> }
> }
> return this.log().multiply(x).exp();
> }
> {code}
>
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.