Hi,

Im trying to write some C that will test whether a complex number in the form a + bi lies within the madelbrot set.

To lie within the set C has to be iterated 200 times without the result going over 2.

to start with the values are set to 0 and the first iteration is does on the zero values, then the real and imaginary parts of C are added and if the modulus of the new answer is less then 2 then the loop continues, if not it outputs that C is not in the mandelbrot set.

For some reason my code always outputs

Time until 2 is exceeded = 2

I cant quite see where Im going wrong, I am pretty new to C.

Here is my code.

Thanks for any help

#include <stdio.h>

#include <math.h>

int main() {

mSetTest(2.0, 2.0);

return (0);

}

int mSetTest(double c_re, double c_im)

{

int i, count;

float real = c_re;

float imag = c_im;

float zreal, zimag = 0;

float zrealans,zimagans,testreal,testimag;

//Perform 200 Iterations to test wheter C is in Mandelbrot set

for(i=1; i<200; i++)

{

zrealans = (zreal*zreal)-(zimag*zimag);

zimagans = (zreal * zimag) * 2;

testreal = zrealans+real;

testimag = zimagans + imag;

if (sqrt((testreal*testreal) + (testimag*testimag))>2)

{ /*Increase the counter and print how many

iterations were performed before exceeding 2

*/

count ++;

printf("Times until 2 is exceeded =%i\n", count);

return (0);

}

else

{ /*Increase the counter and set the initial variables to the new ones */

count ++;

zreal=testreal;

zimag=testimag;

}

return (i);

}

/*If iterations go greater than 200 then C is in the mandelbrot set*/

printf("C is in the mandelbrot set");

}

Im trying to write some C that will test whether a complex number in the form a + bi lies within the madelbrot set.

To lie within the set C has to be iterated 200 times without the result going over 2.

to start with the values are set to 0 and the first iteration is does on the zero values, then the real and imaginary parts of C are added and if the modulus of the new answer is less then 2 then the loop continues, if not it outputs that C is not in the mandelbrot set.

For some reason my code always outputs

Time until 2 is exceeded = 2

I cant quite see where Im going wrong, I am pretty new to C.

Here is my code.

Thanks for any help

#include <stdio.h>

#include <math.h>

int main() {

mSetTest(2.0, 2.0);

return (0);

}

int mSetTest(double c_re, double c_im)

{

int i, count;

float real = c_re;

float imag = c_im;

float zreal, zimag = 0;

float zrealans,zimagans,testreal

//Perform 200 Iterations to test wheter C is in Mandelbrot set

for(i=1; i<200; i++)

{

zrealans = (zreal*zreal)-(zimag*zimag

zimagans = (zreal * zimag) * 2;

testreal = zrealans+real;

testimag = zimagans + imag;

if (sqrt((testreal*testreal) + (testimag*testimag))>2)

{ /*Increase the counter and print how many

iterations were performed before exceeding 2

*/

count ++;

printf("Times until 2 is exceeded =%i\n", count);

return (0);

}

else

{ /*Increase the counter and set the initial variables to the new ones */

count ++;

zreal=testreal;

zimag=testimag;

}

return (i);

}

/*If iterations go greater than 200 then C is in the mandelbrot set*/

printf("C is in the mandelbrot set");

}

real is 2.0

imag is 2.0

zreal is 0

zimag is 0

Therefore

zrealans is 0

zimagans is 0

testreal is 2.0

testimag is 2.0

Therefore

sqrt((testreal*testreal) + (testimag*testimag)) is sqrt ((2*2) + (2*2) which is sqrt (8) which is > 2. Thus you always take the first branch, print the message, and return.

Gary

But now, no matter what values I pass it for c_re and c_im my program always outputs Time until 2 is exceeded = 1

!!

int mSetTest(double c_re, double c_im)

{

int i;

int count = 0;

float real = c_re;

float imag = c_im;

float zreal, zimag = 0;

float zrealans,zimagans,testreal

//Perform 200 Iterations to test wheter C is in Mandelbrot set

for(i=0; i<199; i++)

{

zrealans = (zreal*zreal)-(zimag*zimag

zimagans = (zreal * zimag) * 2;

testreal = zrealans+real;

testimag = zimagans + imag;

if (sqrt((testreal*testreal) + (testimag*testimag))>2)

{ /*Increase the counter and print how many

iterations were performed before exceeding 2

*/

count ++;

printf("Times until 2 is exceeded =%i\n", count);

return (0);

}

else

{ /*Increase the counter and set the initial variables to the new ones */

count ++;

zreal=testreal;

zimag=testimag;

}

return (i);

}

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.

float zreal, zimag = 0;

doesn't initialize zreal, only zimag. Personally, I prefer the style of initialization that puts each variable on its own line, i.e.

float zreal = 0.0;

float zimag = 0.0;

Gary