What does this structure actually do?

Posted by LGTrader on Stack Overflow See other posts from Stack Overflow or by LGTrader
Published on 2011-02-07T15:10:59Z Indexed on 2011/02/07 15:25 UTC
Read the original article Hit count: 246

Filed under:
|

I found this structure code in a Julia Set example from a book on CUDA. I'm a newbie C programmer and cannot get my head around what it's doing, nor have I found the right thing to read on the web to clear it up. Here's the structure:

struct cuComplex {
    float   r;
    float   i;
    cuComplex( float a, float b ) : r(a), i(b)  {}
    float magnitude2( void ) { return r * r + i * i; }
    cuComplex operator*(const cuComplex& a) {
        return cuComplex(r*a.r - i*a.i, i*a.r + r*a.i);
    }
    cuComplex operator+(const cuComplex& a) {
        return cuComplex(r+a.r, i+a.i);
    }
};

and it's called very simply like this:

cuComplex c(-0.8, 0.156);
cuComplex a(jx, jy);

int i = 0;
for (i=0; i<200; i++) {
    a = a * a + c;
    if (a.magnitude2() > 1000)
        return 0;
}

return 1;

So, the code did what? Defined something of structure type 'cuComplex' giving the real and imaginary parts of a number. (-0.8 & 0.156) What is getting returned? (Or placed in the structure?) How do I work through the logic of the operator stuff in the struct to understand what is actually calculated and held there?

I think that it's probably doing recursive calls back into the stucture

float magnitude2 (void) { return return r * r + i * i; }

probably calls the '*' operator for r and again for i, and then the results of those two operations call the '+' operator? Is this correct and what gets returned at each step?

Just plain confused.

Thanks!

© Stack Overflow or respective owner

Related posts about c++

Related posts about cuda