It would be good to have some bounds checking here.  `0.0 <= $progress <= 1.0` 

Take a look through the built-in SPL exception types, there's an `OutOfRangeException` and... something else I can't remember the name of right now, one of the two is suitable, but I can't remember which :P