static void Main(string[] args) { //Run().Wait(); mpf_t x = -1; Console.WriteLine(x.ToString()); x *= x; Console.WriteLine(x.ToString()); }
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); }
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_)); } }
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_)); } }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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; } }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
/// <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); }
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); }
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); }
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; }
/// <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)); }