示例#1
0
        public iNumber Deduct(iNumber Value)
        {
            double Re = _re - ((Complex)Value)._re;
            double Im = _im - ((Complex)Value)._im;

            return(new Complex(Re, Im));
        }
示例#2
0
        public iNumber Mul(iNumber Value)
        {
            double Re = _re * ((Complex)Value)._re - _im * ((Complex)Value)._im;
            double Im = _im * ((Complex)Value)._re + ((Complex)Value)._im * _re;

            return(new Complex(Re, Im));
        }
示例#3
0
 /*public iNumber InitNull()
  * {
  *
  *      if (strCalculate[strCalculate.Length - 1] == '/')
  *          strCalculate += "1";
  *      return new Frac("0/1", 10);
  *
  * }*/
 public void Total()
 {
     if (!_isTotal)
     {
         if (_proc.GetState() == Operation.None)
         {
             return;
         }
         iNumber n = Init();
         n = Convert(n, _proc.GetLop().GetType());
         if (n == null)
         {
             Debug.WriteLine("4");
             throw new FormatException("Can't continue");
         }
         _proc.SetRop(n);
         _proc.RunOprtn();
         strHistory  += _proc.GetRop().GetNumberString() + "=" + _proc.GetLop().GetNumberString();
         strCalculate = _proc.GetLop().GetNumberString();
         _isTotal     = true;
         _isUsing     = true;
         _bufOprt     = _proc.GetState();
         _proc.SetState(Operation.None);
         return;
     }
     else
     {
         _proc.SetState(_bufOprt);
         _proc.RunOprtn();
         _proc.SetState(Operation.None);
         strHistory  += "=" + _proc.GetLop().GetNumberString();
         strCalculate = _proc.GetLop().GetNumberString();
     }
 }
示例#4
0
        public iNumber Add(iNumber Value)
        {
            double Re = _re + ((Complex)Value)._re;
            double Im = _im + ((Complex)Value)._im;

            return(new Complex(Re, Im));
        }
示例#5
0
        public iNumber Divide(iNumber Value)
        {
            if (((Complex)Value)._re == 0 && ((Complex)Value)._im == 0)
            {
                throw new DivideByZeroException();
            }
            double den = (Math.Pow(((Complex)Value)._re, 2) + Math.Pow(((Complex)Value)._im, 2));
            double Re  = (_re * ((Complex)Value)._re + _im * ((Complex)Value)._im) / den;
            double Im  = (((Complex)Value)._re * _im - _re * ((Complex)Value)._im) / den;

            return(new Complex(Re, Im));
        }
示例#6
0
 public bool Equal(iNumber Value)
 {
     if (_im != ((Complex)Value)._im)
     {
         return(false);
     }
     if (_re != ((Complex)Value)._re)
     {
         return(false);
     }
     return(true);
 }
示例#7
0
        public void MDeduct()
        {
            iNumber n = Init();

            if (_mem.Get() is Complex)
            {
                if (n is Complex)
                {
                    _mem.Deduct(n);
                }
            }
        }
示例#8
0
        public void MAdd()
        {
            iNumber n = Init();

            if (_mem.Get() is Complex)
            {
                if (n is Complex)
                {
                    _mem.Sum(n);
                }
            }
        }
示例#9
0
 private iNumber Convert(iNumber Value, Type Dest)
 {
     if (Value.GetType() == Dest)
     {
         return(Value);
     }
     if (Dest == typeof(Complex))
     {
         SetTypeCalc(TypeCalc.Complex);
         return(Init());
     }
     return(null);
 }
示例#10
0
        public void Compute(Operation _operation)
        {
            if (_isTotal)
            {
                strHistory = "";
                _isTotal   = false;
            }
            if (_proc.GetState() == Operation.None)
            {
                iNumber n = Init();
                _proc.SetLop(n);
                _proc.SetRop(_proc.GetLop());
                _proc.SetState(_operation);
            }
            else
            {
                iNumber n = Init();
                n = Convert(n, _proc.GetLop().GetType());
                if (n == null)
                {
                    Debug.WriteLine("3");
                    throw new FormatException("Can't continue");
                }
                _proc.SetRop(n);
                _proc.RunOprtn();
                _proc.SetState(_operation);
            }
            _isUsing     = true;
            strHistory  += _proc.GetRop().GetNumberString();
            strCalculate = _proc.GetLop().GetNumberString();
            switch (_operation)
            {
            case Operation.Add: strHistory += "+"; break;

            case Operation.Deduct: strHistory += "-"; break;

            case Operation.Division: strHistory += "/"; break;

            case Operation.Mul: strHistory += "*"; break;
            }
        }