Let me de-generalize the problem a little to give me a place to start. You are handed a one-litre container that is partially full and asked to determine, to an arbitrary accuracy, just how full it is (how much it contains.) You have a tap and a bunch of other identical one litre containers. It's not necessary for the containers to have any degree of symmetry as long as they are the same. The containers need to be translucent so you can see the level of the water in them.
(If the original container is not translucent, pour the water from the original container into one of the translucent ones before you begin. If the original container is larger than the one-litre containers, carefully fill one litre containers from it, keeping count, until you have an amount less than one litre in the last one, and use this process to establish that volume, then add the number of full litres you got as well.)
You fill one container and grab an empty one, then carefully pour from the full to the empty until the level in the one you're filling matches the level in the one you're pouring from. You now have 0.5 in each container. Compare to the reference container to see if x, the volume you're looking for, is more or less than 0.5. By eye you could probably have declared the volume to the nearest half, so this is presumably not super useful, but so be it.
Next, fill one container and then pour it carefully between 3 containers and compare to the reference volume. You now know whether x is between 0 and one-third, or one-third and one half, or one half and two thirds, or two-thirds and one.
Split one of the half full containers between two other empty containers so that you have quarters. (If pouring is becoming too much of a challenge when you get to fine accuracy, use a dropper or dip something in one container and let the drops fall into the other for the final balancing of levels between containers.) If x is more than 0.5, add a quarter to a half to get 0.75. Now you can narrow down the possible ranges of x to 0-0.25, 0.25-0.33, 0.33-0.5, 0.5-0.66, 0.66-0.75, and 0.75-1. If this is accurate enough, stop. If it is not, construct a 1/8th container by splitting a quarter, and add that eighth to whatever represents the bottom of the range you're considering. Say you know it's between 0.75 and 1 - add an eighth to that making 7/8ths or 0.875 and you'll know whether x is 0.75 to 0.875 or 0.875 to 1. If you only need to be accurate to one decimal place you can announce "0.8" or "0.9" and be correct.
If you need more accuracy, make sixteenths. And so on. At some point your ability to put two cylinders together and declare their volumes the same will put a natural limit on what you're doing. Also, the drops that cling to the sides when you pour from container to container will become relevant. Therefore this technique cannot produce arbitrary accuracy. I can overcome that by declaring I was actually using 100-litre containers (and some imaginary lifting help to let me pour among them) thus effectively dividing those effects by 100.