Thread overview
possible error in dmc complex arithmetic
Sep 25, 2007
John Smith
Sep 27, 2007
Walter Bright
Oct 01, 2007
John Smith
Oct 01, 2007
John Smith
Oct 01, 2007
Walter Bright
September 25, 2007
1.2 + .5i ^ -.9 + 1.5i = 0.436466 + 0.0166961i

dmc (C, not C++) exponentiation with these operands gives the result:

1.2 + .5i ^ -.9 + 1.5i = 0.436466 + 0.000000i

bug?

JS
September 27, 2007
John Smith wrote:
> 1.2 + .5i ^ -.9 + 1.5i = 0.436466 + 0.0166961i
> 
> dmc (C, not C++) exponentiation with these operands gives the result:
> 
> 1.2 + .5i ^ -.9 + 1.5i = 0.436466 + 0.000000i
> 
> bug?

Can't tell without a complete source code example exhibiting the behavior.
October 01, 2007
#include <stdio.h>
#include <complex.h>

int main(void)
{
	/* declaration */
    //double _Complex z1, z2, z3;
    double complex z1, z2, z3;

    /* assignment */
    z1 = 1.2 + .5 * I;
    z2 = -.9 + 1.5 * I;

    /* arithmetic operators */
    z3 = z1 + z2;
    printf("z1+z2 = %g %gi\n", creal(z3), cimag(z3));
    z3 = z1 - z2;
    printf("z1-z2 = %g %gi\n", creal(z3), cimag(z3));
    z3 = z1 * z2;
    printf("z1*z2 = %g %gi\n", creal(z3), cimag(z3));
    z3 = z1 / z2;
    printf("z1/z2 = %g %gi\n", creal(z3), cimag(z3));

    /* functions */
    z3 = csqrt(z1);
    printf("sqrt = %g %gi\n", creal(z3), cimag(z3));
    z3 = cpow(z1, z2);
    printf("z1^z2 = %g %fi\n", creal(z3), cimag(z3));

    return 0;
}
October 01, 2007
== Quote from John Smith (bystander@shaw.ca)'s article
> #include <stdio.h>
> #include <complex.h>
> int main(void)
> {
> 	/* declaration */
>     //double _Complex z1, z2, z3;
>     double complex z1, z2, z3;
>     /* assignment */
>     z1 = 1.2 + .5 * I;
>     z2 = -.9 + 1.5 * I;
>     /* arithmetic operators */
>     z3 = z1 + z2;
>     printf("z1+z2 = %g %gi\n", creal(z3), cimag(z3));
>     z3 = z1 - z2;
>     printf("z1-z2 = %g %gi\n", creal(z3), cimag(z3));
>     z3 = z1 * z2;
>     printf("z1*z2 = %g %gi\n", creal(z3), cimag(z3));
>     z3 = z1 / z2;
>     printf("z1/z2 = %g %gi\n", creal(z3), cimag(z3));
>     /* functions */
>     z3 = csqrt(z1);
>     printf("sqrt = %g %gi\n", creal(z3), cimag(z3));
>     z3 = cpow(z1, z2);
>     printf("z1^z2 = %g %fi\n", creal(z3), cimag(z3));
>     return 0;
> }

See incorrect result for cpow()

JS
October 01, 2007
Thank-you.