Then you have rank and file employees are are actually doing the work. Even in a relatively low skill position the company might have to put in 1-2 months of training to have an employee functioning. Unless the employee is completely horrible (in which case they should be fired anyway, and if this keeps happening hiring practices should be analyzed), from a cost standpoint it makes more sense to coach them to do better rather than remove them.
In higher skill positions it makes even less sense to just cut the bottom unless the bottom is doing very poorly. In that case they should have been cut prior to ranking. Where I work now we don't expect someone to get fully up to speed until they have been in our codebase for 3-6 months. If we constantly ranked, fired, and hired again we would only have a few good people at the top end doing all of the work and simply churning money on the bottom end. We might find a superstar who displaces the top, but does that mean you want to fire your previous tops? They were doing fine, and presumably still are, until the superstar showed up.
Again, I have no problem with ranking people or with firing people for poor performance. The problem is picking an arbitrary line and firing people who fall below it even if their raw performance is acceptable.