Re:Abusing C macros to render the Mandelbrot Set at compile-...
by jcelerier on Wednesday November 14, 2018 @07:36AM
(#18449373)
> As someone who doesn't do much C++, could `constexpr` actually do this all on its own?
yes, some people have written entire constexpr raytracers for instance : https://github.com/tcbrindle/raytracer.hpp
Re:Abusing C macros to render the Mandelbrot Set at compile-...
by nickodell on Tuesday November 13, 2018 @11:45PM
(#18447564)
Everything above and including #define C1 returns a single value, and therefore could be done with constexpr.
More to the point, constexpr would be a heck of a lot more efficient - changing M4 to M5 increases the preprocesed size from 80 MB to 240 MB. This is an exponential increase, despite that a Mandlebrot pixel can be computed in linear time. (Linear to the maximum number of steps.)
I suspect that this is because if you write a macro and use your macro argument twice, this doubles the length of whatever your macro argument was.
That said I absolutely don't disagree with you at all. It's really a bit silly C doesn't have it at this point. `gcc` will happily do all of this math for you at compile time even if you do as much of the math as you can in `static` functions. But to make it compile you have to declare `pixels` in `main` because you can't call the functions in the initializer for file-scoped variables - even though the compiler can already optimize them out.