www.digitalmars.com         C & C++   DMDScript  

c++ - possible error in dmc complex arithmetic

reply John Smith <bystander shaw.ca> writes:
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
Sep 25 2007
parent reply Walter Bright <newshound1 digitalmars.com> writes:
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.
Sep 27 2007
parent reply John Smith <bystander shaw.ca> writes:
#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;
}
Oct 01 2007
parent reply John Smith <bystander shaw.ca> writes:
== 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
Oct 01 2007
parent Walter Bright <newshound1 digitalmars.com> writes:
Thank-you.
Oct 01 2007