Vitamin, имхо у тебя как-то перемудрено.
вместо одной строчки "if (++ta >= fa) { ta = 0; bitA ^= -1; }" имеется 4 функции, не считая этой самой строчки.
(это я так, просто сказал а то можно опять скатиться к C vs C++).