neaten code and check pre-conditions (as they are cheaper than the calculation in this case, not our job to check them but if we can we might as well)