private void PerformSingleOperation(SingleCalcOperation currentSingleCalcOperation) { wasSolvedBefore = true; if (!wasLastOperationInvalid) { double answer = OperateOneNumber(currentSingleCalcOperation); string answerString = ReturnProperAnswerBasedIfInfinityOrNaN(answer); numberOneBuffer = answerString; inputTextBox.Text = numberOneBuffer; } }
private double OperateOneNumber(SingleCalcOperation currentSingleCalcOperation) { if (numberOneBuffer == String.Empty) { numberOneBuffer = "0"; if (currentCalcOperator != CalcOperator.None) { numberOneBuffer = inputTextBox.Text; } } else if (numberOneBuffer != inputTextBox.Text) { numberOneBuffer = inputTextBox.Text; } CheckDecimal(numberOneBuffer); double numberOne = Convert.ToDouble(numberOneBuffer); double result; switch (currentSingleCalcOperation) { case SingleCalcOperation.Factorial: if (numberOne < 0) { result = Double.NaN; } else { double roundedNumberOne = Math.Floor(numberOne); result = CalculateFactorial(roundedNumberOne); } break; case SingleCalcOperation.Sine: result = Math.Sin(numberOne); break; case SingleCalcOperation.Cosine: result = Math.Cos(numberOne); break; case SingleCalcOperation.Tangent: result = Math.Tan(numberOne); break; case SingleCalcOperation.Logarithm: result = Math.Log(numberOne); break; case SingleCalcOperation.SquareRoot: result = Math.Sqrt(numberOne); break; case SingleCalcOperation.TenToPowerOf: result = Math.Pow(10, numberOne); break; case SingleCalcOperation.Squared: result = Math.Pow(numberOne, 2); break; case SingleCalcOperation.Exponential: result = Math.Exp(numberOne); break; default: result = numberOne; break; } return(result); }