Exemple #1
0
        static void Main(string[] args)
        {
            //Run().Wait();
            mpf_t x = -1;

            Console.WriteLine(x.ToString());
            x *= x;
            Console.WriteLine(x.ToString());
        }
Exemple #2
0
        static mpf_t getd()
        {
            mpf_t d = new mpf_t();

            gmp_lib.mpf_init(d);
            char_ptr value = new char_ptr("1000000000000000000000000");

            gmp_lib.mpf_set_str(d, value, 10);
            return(d);
        }
Exemple #3
0
 public static int MultiplyAddLosslessToInt(this double x, double multiply, long add)
 {
     using (mpf_t x_ = new mpf_t(x))
         using (mpf_t multiply_ = new mpf_t(multiply))
             using (mpf_t add_ = new mpf_t(add.ToString(CultureInfo.InvariantCulture)))
                 using (mpf_t result_ = mpf_t.init2(DefaultPrecision)) {
                     mpir.mpf_mul(result_, x_, multiply_); // result = (x * multiply) + add
                     mpir.mpf_add(result_, result_, add_);
                     return(mpir.mpf_get_si(result_));
                 }
 }
Exemple #4
0
 public static double SubtractDivideLossless(this int x, long subtract, double divide)
 {
     using (mpf_t x_ = new mpf_t(x))
         using (mpf_t subtract_ = new mpf_t(subtract.ToString(CultureInfo.InvariantCulture)))
             using (mpf_t divide_ = new mpf_t(divide))
                 using (mpf_t result_ = mpf_t.init2(DefaultPrecision)) {
                     mpir.mpf_sub(result_, x_, subtract_);
                     mpir.mpf_div(result_, result_, divide_); // result = (x - subtract) / divide
                     return(mpir.mpf_get_d(result_));
                 }
 }
Exemple #5
0
        public void Add(string hastings)
        {
            var   s = new char_ptr(hastings);
            mpf_t x = new mpf_t();

            gmp_lib.mpf_init(x);
            gmp_lib.mpf_set_str(x, s, 10);
            gmp_lib.free(s);
            gmp_lib.mpf_div(x, x, d);
            gmp_lib.mpf_add(value, value, x);
            gmp_lib.mpf_clear(x);
        }
Exemple #6
0
        public void BasicSqrt()
        {
            string AsString;

            using mpf_t a = new mpf_t("22250983250345029834502983.5740293845720");
            AsString      = a.ToString();
            Assert.AreEqual("2.22509832503450298345E+25", AsString);

            using mpf_t b = a.Sqrt();

            AsString = b.ToString();
            Assert.AreEqual("4.71709478920500704353E+12", AsString);
        }
Exemple #7
0
        public void UintDiv()
        {
            string AsString;

            using mpf_t a = new mpf_t("22250983250345029834502983.5740293845720");
            AsString      = a.ToString();
            Assert.AreEqual("2.22509832503450298345E+25", AsString);

            uint b = 98873014;

            using mpf_t c = b / a;

            AsString = c.ToString();
            Assert.AreEqual("4.44353460193570762729E-18", AsString);
        }
Exemple #8
0
        public void UintSub()
        {
            string AsString;

            using mpf_t a = new mpf_t("22250983250345029834502983.5740293845720");
            AsString      = a.ToString();
            Assert.AreEqual("2.22509832503450298345E+25", AsString);

            uint b = 98873014;

            using mpf_t c = b - a;

            AsString = c.ToString();
            Assert.AreEqual("-2.22509832503450297356E+25", AsString);
        }
Exemple #9
0
        public void BasicPow()
        {
            string AsString;

            using mpf_t a = new mpf_t("22250983250345029834502983.5740293845720");
            AsString      = a.ToString();
            Assert.AreEqual("2.22509832503450298345E+25", AsString);

            uint b = 89;

            using mpf_t c = a.Pow(b);

            AsString = c.ToString();
            Assert.AreEqual("8.20501550859436020769E+2255", AsString);
        }
Exemple #10
0
        public void LeftShift()
        {
            string AsString;

            using mpf_t a = new mpf_t("22250983250345029834502983.5740293845720");
            AsString      = a.ToString();
            Assert.AreEqual("2.22509832503450298345E+25", AsString);

            int b = 50;

            using mpf_t c = a << b;

            AsString = c.ToString();
            Assert.AreEqual("2.50523799687202560686E+40", AsString);
        }
Exemple #11
0
        public void RightShift()
        {
            string AsString;

            using mpf_t a = new mpf_t("22250983250345029834502983.5740293845720");
            AsString      = a.ToString();
            Assert.AreEqual("2.22509832503450298345E+25", AsString);

            int b = 50;

            using mpf_t c = a >> b;

            AsString = c.ToString();
            Assert.AreEqual("1.97628431400654046208E+10", AsString);
        }
Exemple #12
0
        public void AddUint()
        {
            string AsString;

            using mpf_t a = new mpf_t("22250983250345029834502983.5740293845720");
            AsString      = a.ToString();
            Assert.AreEqual("2.22509832503450298345E+25", AsString);

            uint b = 98873014;

            using mpf_t c = a + b;

            AsString = c.ToString();
            Assert.AreEqual("2.22509832503450299334E+25", AsString);
        }
Exemple #13
0
        public void DivIntNegative()
        {
            string AsString;

            using mpf_t a = new mpf_t("22250983250345029834502983.5740293845720");
            AsString      = a.ToString();
            Assert.AreEqual("2.22509832503450298345E+25", AsString);

            int b = -98873014;

            using mpf_t c = a / b;

            AsString = c.ToString();
            Assert.AreEqual("-2.25046070208247417587E+17", AsString);
        }
Exemple #14
0
        public void MulIntNegative()
        {
            string AsString;

            using mpf_t a = new mpf_t("22250983250345029834502983.5740293845720");
            AsString      = a.ToString();
            Assert.AreEqual("2.22509832503450298345E+25", AsString);

            int b = -98873014;

            using mpf_t c = a * b;

            AsString = c.ToString();
            Assert.AreEqual("-2.20002177842512963966E+33", AsString);
        }
Exemple #15
0
        public void AddIntNegative()
        {
            string AsString;

            using mpf_t a = new mpf_t("22250983250345029834502983.5740293845720");
            AsString      = a.ToString();
            Assert.AreEqual("2.22509832503450298345E+25", AsString);

            int b = -98873014;

            using mpf_t c = a + b;

            AsString = c.ToString();
            Assert.AreEqual("2.22509832503450297356E+25", AsString);
        }
Exemple #16
0
        public void MulOperator()
        {
            string AsString;

            using mpf_t a = new mpf_t("22250983250345029834502983.5740293845720");
            AsString      = a.ToString();
            Assert.AreEqual("2.22509832503450298345E+25", AsString);

            using mpf_t b = new mpf_t("2229874359879827.30594288574029879874539");
            AsString      = b.ToString();
            Assert.AreEqual("2.22987435987982730594E+15", AsString);

            using mpf_t c = a * b;

            AsString = c.ToString();
            Assert.AreEqual("4.96168970320598825788E+40", AsString);
        }
Exemple #17
0
        private bool disposedValue = false; // To detect redundant calls

        protected virtual void Dispose(bool disposing)
        {
            if (!disposedValue)
            {
                if (disposing)
                {
                    // TODO: dispose managed state (managed objects).
                }

                // TODO: free unmanaged resources (unmanaged objects) and override a finalizer below.
                // TODO: set large fields to null.
                gmp_lib.mpf_clear(value);
                value = null;

                disposedValue = true;
            }
        }
Exemple #18
0
        public void DivOperator()
        {
            string AsString;

            using mpf_t a = new mpf_t("22250983250345029834502983.5740293845720");
            AsString      = a.ToString();
            Assert.AreEqual("2.22509832503450298345E+25", AsString);

            using mpf_t b = new mpf_t("2229874359879827.30594288574029879874539");
            AsString      = b.ToString();
            Assert.AreEqual("2.22987435987982730594E+15", AsString);

            using mpf_t c = a / b;

            AsString = c.ToString();
            Assert.AreEqual("9.97858159665290867233E+9", AsString);
        }
Exemple #19
0
        public void AddOperator()
        {
            string AsString;

            using mpf_t a = new mpf_t("22250983250345029834502983.5740293845720");
            AsString      = a.ToString();
            Assert.AreEqual("2.22509832503450298345E+25", AsString);

            using mpf_t b = new mpf_t("2229874359879827.30594288574029879874539");
            AsString      = b.ToString();
            Assert.AreEqual("2.22987435987982730594E+15", AsString);

            using mpf_t c = a + b;

            AsString = c.ToString();
            Assert.AreEqual("2.22509832525749041944E+25", AsString);
        }
Exemple #20
0
        public void BasicSub()
        {
            string AsString;

            using mpf_t a = new mpf_t("22250983250345029834502983.5740293845720");
            AsString      = a.ToString();
            Assert.AreEqual("2.22509832503450298345E+25", AsString);

            using mpf_t b = new mpf_t("2229874359879827.30594288574029879874539");
            AsString      = b.ToString();
            Assert.AreEqual("2.22987435987982730594E+15", AsString);

            using mpf_t c = new();
            mpf.sub(c, a, b);

            AsString = c.ToString();
            Assert.AreEqual("2.22509832481151554746E+25", AsString);
        }
Exemple #21
0
        public void Rounding()
        {
            string AsString;

            using mpf_t a = new mpf_t("2983.5740293845720");
            AsString      = a.ToString();
            Assert.AreEqual("2.983574029384572E+3", AsString);

            using mpf_t b = a.Ceil();
            AsString      = b.ToString();
            Assert.AreEqual("2.984E+3", AsString);

            using mpf_t c = a.Floor();
            AsString      = c.ToString();
            Assert.AreEqual("2.983E+3", AsString);

            using mpf_t d = a.Trunc();
            AsString      = d.ToString();
            Assert.AreEqual("2.983E+3", AsString);
        }
Exemple #22
0
        public void IsEqual()
        {
            string AsString;
            bool   IsEqualTo;
            bool   IsDifferentThan;

            using mpf_t a = new mpf_t("22250983250345029834502983.5740293845720");
            AsString      = a.ToString();
            Assert.AreEqual("2.22509832503450298345E+25", AsString);

            using mpf_t b = new mpf_t("2229874359879827.30594288574029879874539");
            AsString      = b.ToString();
            Assert.AreEqual("2.22987435987982730594E+15", AsString);

            using mpf_t c = a;

            IsEqualTo = a == c;
            Assert.IsTrue(IsEqualTo);

            IsDifferentThan = a != b;
            Assert.IsTrue(IsDifferentThan);
        }
Exemple #23
0
        public void LesserThan()
        {
            string AsString;
            bool   IsLesserThan;

            using mpf_t a = new mpf_t("-22250983250345029834502983.5740293845720");
            AsString      = a.ToString();
            Assert.AreEqual("-2.22509832503450298345E+25", AsString);

            using mpf_t b = new mpf_t("2229874359879827.30594288574029879874539");
            AsString      = b.ToString();
            Assert.AreEqual("2.22987435987982730594E+15", AsString);

            IsLesserThan = a < b;
            Assert.IsTrue(IsLesserThan);

            IsLesserThan = mpf.cmp_si(a, -1922215141) < 0;
            Assert.IsTrue(IsLesserThan);

            double d = 2e5;

            IsLesserThan = d < b;
            Assert.IsTrue(IsLesserThan);

            int e = -10;

            IsLesserThan = e < b;
            Assert.IsTrue(IsLesserThan);

            int f = -10;

            IsLesserThan = f < b;
            Assert.IsTrue(IsLesserThan);

            float g = 2e5F;

            IsLesserThan = g < b;
            Assert.IsTrue(IsLesserThan);
        }
Exemple #24
0
        public void GreaterThan()
        {
            string AsString;
            bool   IsGreaterThan;

            using mpf_t a = new mpf_t("22250983250345029834502983.5740293845720");
            AsString      = a.ToString();
            Assert.AreEqual("2.22509832503450298345E+25", AsString);

            using mpf_t b = new mpf_t("2229874359879827.30594288574029879874539");
            AsString      = b.ToString();
            Assert.AreEqual("2.22987435987982730594E+15", AsString);

            IsGreaterThan = a > b;
            Assert.IsTrue(IsGreaterThan);

            IsGreaterThan = mpf.cmp_ui(a, 1922215141) > 0;
            Assert.IsTrue(IsGreaterThan);

            double d = 2e25;

            IsGreaterThan = a > d;
            Assert.IsTrue(IsGreaterThan);

            int e = -10;

            IsGreaterThan = a > e;
            Assert.IsTrue(IsGreaterThan);

            uint f = 10;

            IsGreaterThan = a > f;
            Assert.IsTrue(IsGreaterThan);

            float g = 2e25F;

            IsGreaterThan = a > g;
            Assert.IsTrue(IsGreaterThan);
        }
Exemple #25
0
 /// <summary>
 /// Initializes a new instance of the <see cref="mpq_t"/> class.
 /// </summary>
 /// <param name="source">The source instance.</param>
 public mpq_t(mpf_t source)
 {
     mpq_init(ref Value);
     mpq_set_f(ref Value, ref source.Value);
 }
Exemple #26
0
        public void GreaterEqual()
        {
            string AsString;
            bool   IsGreaterThan;

            Assert.IsTrue(mpfr_t.LiveObjectCount() == 0);

            using mpfr_t a = new mpfr_t("22250983250345029834502983.5740293845720");
            AsString       = a.ToString();
            Assert.AreEqual("2.225098325034502799228928E+25", AsString);

            using mpfr_t b = new mpfr_t("2229874359879827.30594288574029879874539");
            AsString       = b.ToString();
            Assert.AreEqual("2.22987435987982725E+15", AsString);

            IsGreaterThan = a >= b;
            Assert.IsTrue(IsGreaterThan);

            IsGreaterThan = b >= a;
            Assert.IsFalse(IsGreaterThan);

            IsGreaterThan = a >= 1UL;
            Assert.IsTrue(IsGreaterThan);

            IsGreaterThan = 1UL >= a;
            Assert.IsFalse(IsGreaterThan);

            IsGreaterThan = a >= 1L;
            Assert.IsTrue(IsGreaterThan);

            IsGreaterThan = 1L >= a;
            Assert.IsFalse(IsGreaterThan);

            IsGreaterThan = a >= 1.0;
            Assert.IsTrue(IsGreaterThan);

            IsGreaterThan = 1.0 >= a;
            Assert.IsFalse(IsGreaterThan);

            using mpz_t c = new mpz_t("222509832503450298345029");
            AsString      = c.ToString();
            Assert.AreEqual("222509832503450298345029", AsString);

            IsGreaterThan = a >= c;
            Assert.IsTrue(IsGreaterThan);

            IsGreaterThan = c >= a;
            Assert.IsFalse(IsGreaterThan);

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

            IsGreaterThan = a >= d;
            Assert.IsTrue(IsGreaterThan);

            IsGreaterThan = d >= a;
            Assert.IsFalse(IsGreaterThan);

            using mpf_t e = new mpf_t("222583250345029834502983.5");
            AsString      = e.ToString();
            Assert.AreEqual("2.22583250345029834503E+23", AsString);

            IsGreaterThan = a >= e;
            Assert.IsTrue(IsGreaterThan);

            IsGreaterThan = e >= a;
            Assert.IsFalse(IsGreaterThan);
        }
Exemple #27
0
        public void Different()
        {
            string AsString;
            bool   IsEqualTo;

            Assert.IsTrue(mpfr_t.LiveObjectCount() == 0);

            using mpfr_t a = new mpfr_t("22250983250345029834502983.5740293845720");
            AsString       = a.ToString();
            Assert.AreEqual("2.225098325034502799228928E+25", AsString);

            using mpfr_t b = new mpfr_t("2229874359879827.30594288574029879874539");
            AsString       = b.ToString();
            Assert.AreEqual("2.22987435987982725E+15", AsString);

            IsEqualTo = a != b;
            Assert.IsTrue(IsEqualTo);

            IsEqualTo = b != a;
            Assert.IsTrue(IsEqualTo);

            IsEqualTo = a != 1UL;
            Assert.IsTrue(IsEqualTo);

            IsEqualTo = 1UL != a;
            Assert.IsTrue(IsEqualTo);

            IsEqualTo = a != 1L;
            Assert.IsTrue(IsEqualTo);

            IsEqualTo = 1L != a;
            Assert.IsTrue(IsEqualTo);

            IsEqualTo = a != 1.0;
            Assert.IsTrue(IsEqualTo);

            IsEqualTo = 1.0 != a;
            Assert.IsTrue(IsEqualTo);

            using mpz_t c = new mpz_t("222509832503450298345029");
            AsString      = c.ToString();
            Assert.AreEqual("222509832503450298345029", AsString);

            IsEqualTo = a != c;
            Assert.IsTrue(IsEqualTo);

            IsEqualTo = c != a;
            Assert.IsTrue(IsEqualTo);

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

            IsEqualTo = a != d;
            Assert.IsTrue(IsEqualTo);

            IsEqualTo = d != a;
            Assert.IsTrue(IsEqualTo);

            using mpf_t e = new mpf_t("222583250345029834502983.5");
            AsString      = e.ToString();
            Assert.AreEqual("2.22583250345029834503E+23", AsString);

            IsEqualTo = a != e;
            Assert.IsTrue(IsEqualTo);

            IsEqualTo = e != a;
            Assert.IsTrue(IsEqualTo);
        }
Exemple #28
0
        public void GreaterThan()
        {
            string AsString;
            bool   IsGreaterThan;

            Assert.IsTrue(mpfr_t.LiveObjectCount() == 0);

            ulong DefaultPrecision = mpfr_t.DefaultPrecision;

            mpfr_t.DefaultPrecision = 128;

            using mpfr_t a = new mpfr_t("8720124937520142.5");
            AsString       = a.ToString();
            Assert.AreEqual("8.7201249375201425E+15", AsString);

            using mpfr_t b = new mpfr_t("22298.125");
            AsString       = b.ToString();
            Assert.AreEqual("2.2298125E+4", AsString);

            IsGreaterThan = a > b;
            Assert.IsTrue(IsGreaterThan);

            IsGreaterThan = b > a;
            Assert.IsFalse(IsGreaterThan);

            IsGreaterThan = a > 8720124937520142UL;
            Assert.IsTrue(IsGreaterThan);

            IsGreaterThan = a > 8720124937520143UL;
            Assert.IsFalse(IsGreaterThan);

            IsGreaterThan = 8720124937520142UL > a;
            Assert.IsFalse(IsGreaterThan);

            IsGreaterThan = 8720124937520143UL > a;
            Assert.IsTrue(IsGreaterThan);

            IsGreaterThan = a > 8720124937520142L;
            Assert.IsTrue(IsGreaterThan);

            IsGreaterThan = a > 8720124937520143L;
            Assert.IsFalse(IsGreaterThan);

            IsGreaterThan = 8720124937520142L > a;
            Assert.IsFalse(IsGreaterThan);

            IsGreaterThan = 8720124937520143L > a;
            Assert.IsTrue(IsGreaterThan);

            IsGreaterThan = a > 8720124937520142.1;
            Assert.IsTrue(IsGreaterThan);

            IsGreaterThan = 8720124937520142.9 > a;
            Assert.IsTrue(IsGreaterThan);

            using mpz_t c = new mpz_t("1720124937520142");
            AsString      = c.ToString();
            Assert.AreEqual("1720124937520142", AsString);

            IsGreaterThan = a > c;
            Assert.IsTrue(IsGreaterThan);

            IsGreaterThan = c > a;
            Assert.IsFalse(IsGreaterThan);

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

            IsGreaterThan = a > d;
            Assert.IsTrue(IsGreaterThan);

            IsGreaterThan = d > a;
            Assert.IsFalse(IsGreaterThan);

            using mpf_t e = new mpf_t("8720124937520142.1");
            AsString      = e.ToString();
            Assert.AreEqual("8.7201249375201421E+15", AsString);

            IsGreaterThan = a > e;
            Assert.IsTrue(IsGreaterThan);

            IsGreaterThan = e > a;
            Assert.IsFalse(IsGreaterThan);

            mpfr_t.DefaultPrecision = DefaultPrecision;
        }
Exemple #29
0
 /// <summary>
 /// See http://mpir.org/mpir-3.0.0.pdf.
 /// </summary>
 /// <param name="rop">The result operand.</param>
 /// <param name="op">The operand.</param>
 public static void set_f(mpq_t rop, mpf_t op)
 {
     NativeMethods.mpq_set_f(ref rop.Value, ref op.Value);
 }
 /// <summary>
 /// See https://www.mpfr.org/mpfr-current/mpfr.pdf.
 /// </summary>
 /// <param name="rop">The result operand.</param>
 /// <param name="op">The operand.</param>
 /// <param name="rnd">The rounding mode.</param>
 public static int set_f(mpfr_t rop, mpf_t op, mpfr_rnd_t rnd)
 {
     return(mpfr_set_f(ref rop.Value, ref op.Value, (__mpfr_rnd_t)rnd));
 }