The splitting by denominations was indeed intended to allow ring signatures to easily find other candidates to sign with.
Pre-ringCT, a ring is made up of a number of inputs, possibly one (just the one that's being spent), or more. In order to verify that no money is being created from thin air, all inputs in a ring must have the same amount, since you can't tell which one is actually spent. In fact, technically, it would be enough to say that the smaller amount in a ring is used to prevent money creation, but then there is very strong monetary incentive to not lose money by selecting fake outputs with a lower amount than the real output, so you'd end up with ineffective ring signatures if you did that.
Now, if each transaction was sending amounts as is, you'd typically have two outputs per transasction: one which is the actual payment, and a change output. The actual payment would typically be a nice round amount (ie, please pay only 1.95 for our widget!), while the change would be weird amounts, as it'd be the result of subtracting the fee from whatever input sum you had, and the fee has more decimal places, typically.
This means you'd end up with a wide range of output sizes on the blockchain, and, in turn, it'd be pretty hard to find other outputs of the exact amount you need to sign with.
Therefore, splitting by denominations ensures that even weird amounts such as 8.54753282 end up creating "simple" amount outputs.
With rct, since amounts are encrypted, we don't need inputs to be the same amount anymore, since we rely on commitments to ensure no monero is created out of thin air without knowing the actual values.