I have read multiple papers/articles explaining how to practically implement Arithmetic Coding. They say the same things and is really mind-bending. But here is how far I got. See the wall of text below. Can someone please explain in as few words as I did and explain clearly what I got wrong?
Two reference links. If need, see page 8-10 https://www.cc.gatech.edu/~jarek/courses/7491/Arithmetic2.pdf
Another detailed one: https://www.drdobbs.com/cpp/data-com...0169251?pgno=2
"All we do is wait as the float precision elongates and then when we see the first bit at the start (in the 3 here > 0.[3]172537584) won't change anymore again, we chop it off and store the bit. Until we know when to chop, we Follow it, and may chop off 2 or more bits simultaneously. The end of the 0.2646264 gets a (or more) bit added to it, we chop one and add one. - We shift the whole float thing to the left. We look to see if low has increased above 0x7FFFFFFF, and if high has dropped below 0x80000000. If was high, we add a 1 bit to the end, if low, 0 to the end. What we look for (to know when to chop off the 1st bit), is, think about it, we start with 0.0-1.0 with 256 ranges ex. |......|...|..|.|.|, and you have to look at these 256 ranges as a whole and see it split as 4 units (leading bits) > $|.....S.|..$.|..|S.|.|$ where halfway means 1st bit won't change, and the 4ths mean the 2nd bit won't change, and we jump in one range, eventually the decimal gets too long, but before that occurs we have chopped off a front-end bit. The bits we chop off, are the encoded file, we don't directly double each range left/rightwards nor convert to binary from decimal. Each bit we chop is part of ex. 0.23634634 (look at this as a number, not 8-bit chars 0 . 2 3 6....), so after ex. 3 bits the number is shrunken until disappears."
It would appear, all I need do is know when to chop off a bit (shrinks the 'number describing the whole file'). We can see here the 0.2 gets locked in, none of the 3 ranges has a 0.3 etc anymore. https://royvanrijn.com/blog/2010/02/...by-prediction/
So we store the bit, which is 0 if low! 1 if high. And at the end we add a 1 if....why would we do that? The algorithm already makes the float grow more precise. Say we end up with 0.264755546346757543467876878, of '1' (we are at 0.2... of 0.0-1.0) we have 256 ranges and extend the code like the link above does.