People use to say when I write even for clarity its umnaintainable look at code for arb255.zip My standard bijective 256 symbol arithmetic coder.
Well, there are plenty of variable names which don't contain valid words in your code, eg: a, b, c, f1, f2, f3, etc. That fact alone makes it hard to follow. But, OTOH, it's pretty standard for codes that deal with lots of arithmetics. It's not good, however.
to be honest its far easier for my to follow the code with short letters. I don't trust long names in code. I feel there are trying to mislead with long names. I use to find and fix lots of mistakes in other peoples code that used long names and people could not fix it or find the problem since the long names confused them. I can't remember the name of the editor I used it was an old one not vi. But I would take the code and search and replace all occurrences of the long names with short 1 or 2 letter names so I could get a big picture of what was going on. People were glad it was fixed but then they wanted long names back. I was able to indefinitely delay that they had to do that themselves.
But I do like programs like indent to arrange the code for seeing.
I think, though, that it may be worth adding back good names and comments after you've finished working on the logic. Just because you've imported the whole thing into your brain doesn't mean that it is self-evident to everybody, and you may be glad someday if you revisit it.