Exemple #1
0
        public override MMC.Numbers.CNumber sqr()
        {
            int cnt = _Values.Count;

            // calc the different interims (could be done in parallel)
            CNumber_Integer[] Results = new CNumber_Integer[cnt];
            for (int i = 0; i < cnt; ++i)
            {
                CNumber_Integer tmp = new CNumber_Integer(this);
                tmp.Multiply(_Values[i]);
                tmp._Values.InsertRange(0, new byte[i]);
                Results[i] = tmp;
            }

            // now add them all up
            CNumber_Integer res = new CNumber_Integer(Results[0]);

            for (int i = 1; i < cnt; i++)
            {
                res.Addition(Results[i]);
            }

            res.Trim();
            return(res);
        }
Exemple #2
0
        //------------------------------------------------------------
        // logical functions
        public override CNumber not()
        {
            CNumber_Integer res = new CNumber_Integer(this);

            res.Not();
            res.Trim();
            return(res);
        }
Exemple #3
0
        public override CNumber xor(CNumber other)
        {
            if (other.MyType != MyType)
            {
                throw new NotImplementedException();
            }
            CNumber_Integer res   = new CNumber_Integer(this);
            CNumber_Integer o     = (CNumber_Integer)other;
            int             o_len = o._Values.Count;                 // the other length
            int             t_len = _Values.Count;                   // our own length
            int             len   = (t_len < o_len) ? t_len : o_len; // calc the minimum length
            int             i     = 0;                               // start with the lowest digit

            for (; i < len; i++)                                     // first handle the common digits
            {
                res._Values[i] ^= o._Values[i];
            }
            res.Trim();
            return(res);
        }
Exemple #4
0
        // written multiplication
        public override MMC.Numbers.CNumber mul(MMC.Numbers.CNumber other)
        {
            if (other.MyType != MyType)
            {
                throw new NotImplementedException();
            }

            CNumber_Integer o   = (CNumber_Integer)other;
            int             cnt = o._Values.Count;

            // calc the different interims (could be done in parallel)
            CNumber_Integer[] Results = new CNumber_Integer[cnt];
            for (int i = 0; i < cnt; i++)
            {
                CNumber_Integer tmp = new CNumber_Integer(this);
                tmp.Multiply(o._Values[i]);
                tmp._Values.InsertRange(0, new byte[i]);
                Results[i] = tmp;
            }

            // now add them all up
            CNumber_Integer res = new CNumber_Integer(Results[0]);

            for (int i = 1; i < cnt; i++)
            {
                res.Addition(Results[i]);
            }

            //CNumber_Integer mul = (CNumber_Integer)other;
            //for (int i = mul._Values.Count - 1; i >= 0; i--)
            //{
            //    CNumber_Integer tmp = (CNumber_Integer) Clone();
            //    tmp.Multiply(mul._Values[i]);
            //    res.Insert(0);
            //    res.Addition(tmp);
            //}

            res._Sign = (_Sign != o._Sign);
            res.Trim();
            return(res);
        }