What's so complex about Mandelbrot?

I solved all cases of this puzzle except ‘05 Complex Out’. I have no idea why the answer should be 124 (instead my code gets 275 as solution). Any hint is appreciated.

2 Likes

Debug print your result at each step and see if there are any parsing/calculation errors. If you can’t find any, you may list out your results (f0, f1, f2…) here and we’ll see what else may be the issues.

This are my results for 120 < i < 130. The answer should be 124, but i have no idea why. All other cases work perfect.

step is 121
Re is -0.4529522
Im is -0.2372207
abs value is 0.511311409928747
step is 122
Re is -0.4529543
Im is -0.2370997
abs value is 0.511257125033862
step is 123
Re is -0.4529524
Im is -0.2372103
abs value is 0.511306727836043
step is 124
Re is -0.4529541
Im is -0.2371093
abs value is 0.511261417068481
step is 125
Re is -0.4529525
Im is -0.2372015
abs value is 0.51130279500562
step is 126
Re is -0.452954
Im is -0.2371173
abs value is 0.511264996177762
step is 127
Re is -0.4529527
Im is -0.2371942
abs value is 0.511299532827035
step is 128
Re is -0.4529538
Im is -0.237124
abs value is 0.511267993612557
step is 129
Re is -0.4529528
Im is -0.2371881
abs value is 0.511296797335672

I think your calculation may have gone wrong much earlier? Check from the beginning.
1 -0.65812 -0.452
2 -0.42930206559999995 0.1429404800000001
3 -0.4942517172942038 -0.574729286643711
4 -0.7441489928777194 0.11612187380585376
5 -0.11784656597525855 -0.6248239508873994
etc

2 Likes

I also have an error in the complex out case (complex in passes fine). However i get 123 and the answer is 124 i even checked and it seems that 123 is a good answer since the radius is 2.09, however there might be a chance that the calculations are wrong well before that.

Here is the pastebin link of all steps https://pastebin.com/cn9NBSfi

Daniel_Saranovic, not sure if there are some rounding errors in your parsing or calculating process? Your results are close to mine at the beginning but then begin to deviate more and more.

1 Like

Thanks, that’s probably it, will have a look at it tomorrow.

1 Like

I used the stof function to parse the float and used the c++11 complex class for complex multiplication so basically i did no rounding on my own :confused: .

Try doubles instead of floats, you probably just have a precision issue.

3 Likes

Double helped, also norm in c++11 doesn’t mean the norm in a mathematical sence (radius) so i needed to change that to abs. All tests now pass ok, thanks

I solved it, I made a mistake somewhere. Thanks for your help anyway. :slight_smile:

1 Like

I think there is something wrong about this puzzle. I tried not only my own algorithm but not less than four others I googled off the internet. All have the same issue, they solve all tasks but “05 Complex Out”. What could be so wrong about

int i;
double complex z = c;

for (i = 1; i < Limit; i++)
{
    if (cabs(z) > 2.0) break;
    z = cpow(z, 2.0) + c;
}

return(i);
1 Like

My code worked in the end, so the puzzle is not wrong.

2 Likes

And around 200 others work too.

1 Like

Well, how many did not work? The few that do work might satisfy the puzzle, but may be wrong (not however, but especially because of that). It’s not that I care too much, but again, as I said, I used a set of five iterator functions that all stem from actual working Mandelbrot renderers, all of them being rejected by the puzzle, so I conclude that either the puzzle is wrong or all of those functions. Also, I think the code I posted yesterday should be close to any reference implementation of the iterators function.

Do me a favor, would you? Try any one of the functions from here and give me one that satisfies “05 Complex Out” in terms of providing 124 instead of 123. I challenge you! :slight_smile:

124 is plain incorrect here. For god’s sake, have the puzzle accept 123 and 124, why not?

1 Like

The code you’ve pasted gives 124 for me, so I think you must have an error in how you are converting the input into the complex types?

The way the puzzle system works you can only have one correct answer.

1 Like

For C/C++, the 123 instead of 124 can come from using stof instead of stod.

1 Like

I passed all the test cases but when I submit the code it failed for last test case. What is wrong with my code?
Link: https://ideone.com/566Ymq
I switched from float to double but it did not solve.

1 Like

In python you need to use a j and not a i. How can i change it ?

I had same problem as others, you have to use double.Parse, my mistake was I used float.Parse and then cast to double and got rounding errors many decimals down, which was why it worked for all cases except the one that was supposed to go for 124 iterations. Parsing the text “-0.65812” as a float and then casting to double will give the value -0.658119976520538. So you have to parse it as a double from the start.