public double SolvedExpression(int cycle = 0)
        {
            //foreach (IToken token in PostfixExpression)
            //{
            //    Console.WriteLine(token.Token);
            //}

            Stack <IOperand> answerHolder = new Stack <IOperand>();

            foreach (IToken token in PostfixExpression)
            {
                if (token is Operand)
                {
                    answerHolder.Push((Operand)token);
                }
                else if (token is SpecialOperand)
                {
                    answerHolder.Push((SpecialOperand)token);
                }
                else if (token is SpecialOperatorContainer)
                {
                    //Console.WriteLine("gggg");
                    answerHolder.Push((SpecialOperatorContainer)token);
                }
                else if (token is SpecialOperator)
                {
                    SpecialOperator sop = (SpecialOperator)token;

                    if (specialOperators.Contains(sop.OperatorToken))
                    {
                        //Console.WriteLine("Hiiii");
                        List <string> nonOperatorComponents = new List <string>();
                        for (int i = 1; i < sop.TokenComponents.Count; i++)
                        {
                            nonOperatorComponents.Add(sop.TokenComponents[i]);
                        }
                        //Console.WriteLine(sop.Token);
                        SpecialOperatorContainer a = (SpecialOperatorContainer)answerHolder.Pop();

                        answerHolder.Push(ApplySpecialOperator(sop.OperatorToken, nonOperatorComponents, a, cycle));
                    }
                }
                else
                {
                    Operator op = (Operator)token;

                    if (unaryOperators.Contains(token.Token))
                    {
                        IOperand a = answerHolder.Pop();
                        answerHolder.Push(ApplyUnaryOperator(a, op));
                    }
                    else
                    {
                        //Console.WriteLine("OP           " + op.Token);
                        IOperand b = answerHolder.Pop();
                        //Console.WriteLine("B           " + b.Token);
                        IOperand a = answerHolder.Pop();
                        answerHolder.Push(ApplyBinaryOperator(a, op, b));
                    }
                }

                //foreach (IOperand answer in answerHolder)
                //{
                //    Console.WriteLine("Processing:              " + answer.Token);
                //}
            }

            if (answerHolder.Count == 1)
            {
                return(answerHolder.Pop().TokenValue);//RoundAnswer(answerHolder.Pop().TokenValue); // I've gotta make this more accurate. I mean come on
            }
            else
            {
                return(-10000);//1000000000000000;
            }
        }
        private Operand ApplySpecialOperator(string op, List <string> nonOpComponents, SpecialOperatorContainer a, int cycle)
        {
            //Console.WriteLine("testing:                " + op);
            //switch (op)
            //{
            //    //case "sin":
            //    //    return new Operand((decimal)Math.Sin(Convert.ToDouble(nonOpComponents[0])));
            //    default:
            //        return new Operand(0);
            //}
            double returnValue = 0;
            string parsedA     = a.Token.Replace("&i", "&1").Replace("&j", "&2").Replace("&k", "&3");

            if (op == TokenLibrary.tokenLibrary["summation"])
            {
                returnValue = Summation(nonOpComponents, parsedA, cycle);
                //int i = Convert.ToInt32(nonOpComponents[0]);
                //int top = Convert.ToInt32(nonOpComponents[1]);
                ////while (i <= top)
                ////{
                ////    i++;
                ////}
                //double addValue = 0;

                //if (!a.Token.Contains("&i"))
                //{
                //    //Postfix addValuePostfix = new Infix(a.Token).ToPostfix();
                //    addValue = new Infix(a.Token).ToPostfix().SolvedExpression();
                //}

                //for (; i <= top; i++)
                //{
                //    if (a.Token.Contains("&i"))
                //    {
                //        //Console.WriteLine(i);
                //        string newRawInfix = a.Token.Replace("&i", "&" + Convert.ToString(i) + "&");
                //        //Console.WriteLine(newRawInfix);
                //        addValue = new Infix(newRawInfix).ToPostfix().SolvedExpression();
                //    }

                //    returnValue += addValue;
                //}
            }
            else if (op == TokenLibrary.tokenLibrary["integral"])
            {
                returnValue = Integral(nonOpComponents, parsedA, cycle);
            }
            else
            {
                returnValue = 0;
            }

            return(new Operand(returnValue));
        }