Пример #1
0
        public void AddNonCanonicOperator()
        {
            string AsString;

            using mpz_t n0 = new mpz_t("222509832503450298345029835740293845720");
            using mpz_t d0 = new mpz_t("115756986668303657898962467957");

            using mpq_t a = new mpq_t(n0, d0);
            AsString      = a.ToString();
            Assert.AreEqual("222509832503450298345029835740293845720/115756986668303657898962467957", AsString);

            using mpz_t n1 = new mpz_t("222987435987982730594288574029879874539");
            using mpz_t d1 = new mpz_t("590872612825179551336102196593");

            using mpq_t b = new mpq_t(n1, d1);
            AsString      = b.ToString();
            Assert.AreEqual("222987435987982730594288574029879874539/590872612825179551336102196593", AsString);

            using mpz_t n2 = n0 * 2;
            using mpz_t d2 = d0 * 17;

            using mpq_t c = new mpq_t(n2, d2);
            AsString      = c.ToString();
            Assert.AreEqual("445019665006900596690059671480587691440/1967868773361162184282361955269", AsString);

            c.Canonicalize();

            AsString = c.ToString();
            Assert.AreEqual("445019665006900596690059671480587691440/1967868773361162184282361955269", AsString);

            using mpz_t n3 = n1 * 2;
            using mpz_t d3 = d1 * 17;

            using mpq_t d = new mpq_t(n3, d3);
            AsString      = d.ToString();
            Assert.AreEqual("445974871975965461188577148059759749078/10044834418028052372713737342081", AsString);

            d.Canonicalize();

            AsString = d.ToString();
            Assert.AreEqual("445974871975965461188577148059759749078/10044834418028052372713737342081", AsString);

            using mpq_t e = c + d;

            AsString = e.ToString();
            Assert.AreEqual("314574639530933745596599719402044828752321603866779219489192838557566/1162759763812990990673034143436978981948983216731205310198517", AsString);

            using mpz_t Numerator = c.GetNumerator() * d.GetDenominator() + d.GetNumerator() * c.GetDenominator();

            AsString = Numerator.ToString();
            Assert.AreNotEqual("314574639530933745596599719402044828752321603866779219489192838557566", AsString);
        }
Пример #2
0
        public void DivNonCanonicOperator()
        {
            string AsString;

            using mpz_t n0 = new mpz_t("222509832503450298345029835740293845720");
            using mpz_t d0 = new mpz_t("115756986668303657898962467957");

            using mpq_t a = new mpq_t(n0, d0);
            AsString      = a.ToString();
            Assert.AreEqual("222509832503450298345029835740293845720/115756986668303657898962467957", AsString);

            using mpz_t n1 = new mpz_t("590872612825179551336102196593");
            using mpz_t d1 = new mpz_t("222987435987982730594288574029879874539");

            using mpq_t b = new mpq_t(n1, d1);
            AsString      = b.ToString();
            Assert.AreEqual("590872612825179551336102196593/222987435987982730594288574029879874539", AsString);

            using mpz_t n2 = n0 * 2;
            using mpz_t d2 = d0 * 17;

            using mpq_t c = new mpq_t(n2, d2);
            AsString      = c.ToString();
            Assert.AreEqual("445019665006900596690059671480587691440/1967868773361162184282361955269", AsString);

            c.Canonicalize();

            AsString = c.ToString();
            Assert.AreEqual("445019665006900596690059671480587691440/1967868773361162184282361955269", AsString);

            using mpz_t n3 = n1 * 2;
            using mpz_t d3 = d1 * 17;

            using mpq_t d = new mpq_t(n3, d3);
            AsString      = d.ToString();
            Assert.AreEqual("1181745225650359102672204393186/3790786411795706420102905758507957867163", AsString);

            d.Canonicalize();

            AsString = d.ToString();
            Assert.AreEqual("1181745225650359102672204393186/3790786411795706420102905758507957867163", AsString);

            using mpq_t e = c / d;

            AsString = e.ToString();
            Assert.AreEqual("49616897032059882578779559314539403611774953165369490340046561577107422123080/68397633165470058274884361378645822467587248043012077070501", AsString);

            using mpz_t Numerator = c.GetNumerator() * d.GetDenominator();

            AsString = Numerator.ToString();
            Assert.AreNotEqual("49616897032059882578779559314539403611774953165369490340046561577107422123080", AsString);
        }