Helps with making nice intervals at arbitrary scale.
One use case is where we are producing progress or error messages every time an incoming
record is received. It is generally bad form to produce a message for every input
so it would be better to produce a message for each of the first 10 records, then every
other record up to 20 and then every 5 records up to 50 and then every 10 records up to 100,
more or less. The pattern can now repeat scaled up by 100. The total number of messages will scale
with the log of the number of input lines which is much more survivable than direct output
and because early records all get messages, we get indications early.