Milestone 4: invalid discount checking
Milestone 5: input resilience, floating point values
Milestone 6: unreasonable input resilience testing