- SetupData
- Amortize
- FindPayment
- FindRate
- FindTime
- CheckArguments

**Effective**which is used as the multiplier for the balance. This is used to get the value of the balance on each successive payment period.**TotalPeriods**which is the total number of payment periods for the mortgage calculation.**LowerBound**which is the lower asymptote limit for the payment value when solving for time.**Min**which is the low end value for the payment when solving for payment value.**Max**which is the high end value for the payment when solving for payment value.

There are other methods available for root finding. Another commonly used one is Newton's method. I did not choose to use Newton's method because I saw no real advantage in using it over the bisection method in this situation. Newton's method is able to find the root of a function which has both increasing and decreasing slope over an interval, but the amortization function only has decreasing slope over the whole of its interval. The bisection method is quite reliable in finding roots of function that are either increasing or decreasing so there's no disadvantage in this area. Furthermore, we need to solve for the derivative of the function when applying Newton's method. In the case of the amortization function there is no easy way to simplify the function into its derivative form. The only choice is to call the amortization method twice per iteration, once for the function value and once for the value given by the derivative of the function. Any efficiency gained by Newton's method over the bisection method would not be overwhelming in this case.

- TotalTime, this value must be greater than zero
- Price, any monetary value like the price must be at least 1 cent or greater.
- Payment, the payment value must be at least high enough to repay the interest when solving for time. And cannot be so low that it is not even able to repay interest free loans within the given time interval when solving for equal sized payments.

- General Testing
- Boundary Value Testing

Next we do boundary value testing. To do this, we input values into the program that are almost at the bounding limit for valid data. For example, the lower bound limit for the payment value when solving for "time needed" is $806.705 given the rest of the financial data is:

- pay period: monthly
- price: $90,000
- interest rate: 11%
- compounding: Semi-Annually

The boundary values for the rest of the tests are as follows:

- In solving for interest rate the boundary test value for payment is: 500.01
- In solving for payment value the boundary test value for time is: 0.1 years