Beispiel #1
0
        static void Main(string[] args)
        {
            // === NB: COMPILE IN 64-bit MODE ===

            using (new DisposeContext()) {
                // Lhs
                var img = Image.FromFile(@"C:\Downloads\Mountains\mountains_landscapes_fields_california_meadows_blue_flowers_wildflowers_1920x1080_26083.jpg");
                var raw = ImageExtractor.GetImageAsRaw(img);
                var lhs = new GmpInteger(raw);

                // Rhs
                var img2 = Image.FromFile(@"C:\Downloads\Mountains\Edged-Mountains-landscape-mountain-1920x1080.jpg");
                var raw2 = ImageExtractor.GetImageAsRaw(img2);

                var rhs = new GmpInteger(raw2);

                var    combined   = (lhs + rhs) / new GmpInteger("2");
                bool   isNegative = false;
                byte[] output     = null;
                combined.Export(out output, out isNegative);

                var imgOut = ImageExtractor.GetRawAsImage(img.Width, img.Height, output);
                imgOut.Save("fout.bmp", ImageFormat.Bmp);
            }
        }
Beispiel #2
0
        static void Main(string[] args)
        {
            using (new DisposeContext()) {
                // Arithmatic
                GmpInteger lhs      = new GmpInteger("111111111111111111111111111111111111111111111111111111111111111111111111111");
                GmpInteger rhs      = new GmpInteger("111111111111111111111111111111111111111111111111111111111111111111111111111");
                GmpInteger one      = new GmpInteger("1");
                GmpInteger add      = lhs + rhs;
                GmpInteger sub      = lhs - rhs;
                GmpInteger neg      = -lhs;
                GmpInteger abs      = neg.Abs();
                GmpInteger pow      = one.Pow2(64);
                GmpInteger lhsPlus1 = lhs + one;
                GmpInteger mod      = lhsPlus1 % lhs;
                GmpInteger mul      = lhs * rhs;
                GmpInteger div      = lhs / pow;

                Console.WriteLine($"lhs = {lhs}");
                Console.WriteLine($"rhs = {rhs}");
                Console.WriteLine($"one = {one}");
                Console.WriteLine($"lhs + rhs = {add}");
                Console.WriteLine($"lhs - rhs = {sub}");
                Console.WriteLine($"neg(lhs) = {neg}");
                Console.WriteLine($"abs(neg(lhs)) = {abs}");
                Console.WriteLine($"pow(1,64) = {pow}");
                Console.WriteLine($"lhs * rhs = {mul}");
                Console.WriteLine($"(lhs + 1) % lhs = {mod}");
                Console.WriteLine($"lhs / pow(1,65) = {div}");
                Console.WriteLine($"lhs = rhs: {lhs == rhs}");
                Console.WriteLine($"lhs + rhs > 1: {add > one}");
                Console.WriteLine($"lhs + rhs < 1: {add < one}");
                Console.WriteLine($"lhs + rhs >= 1: {add >= one}");
                Console.WriteLine($"lhs + rhs <= 1: {add <= one}");
                Console.WriteLine($"lhs == null: {lhs == null}");
                Console.WriteLine($"null == lhs: {null == lhs}");

                byte[] exportedValue = null;
                bool   isNegative    = false;
                pow.Export(out exportedValue, out isNegative);
                Console.WriteLine($"export pow(1,64) = {BitConverter.ToString(exportedValue)}");
                Console.WriteLine($"export pow(1,64) is negative = {isNegative}");

                // Import and export
                GmpInteger impTest = new GmpInteger(new byte[] { 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 });
                Console.WriteLine($"new byte[] {{ 0x1,0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 }} = {impTest}");

                HashSet <GmpInteger> set = new HashSet <GmpInteger>();
                set.Add(lhs);
                set.Add(lhs);
                set.Add(new GmpInteger("1111"));
                set.Add(new GmpInteger("1111"));
                set.Add(new GmpInteger("11111111"));
                Console.WriteLine($"HashSet<GmpInteger> len = {set.Count}");
            }
        }
Beispiel #3
0
 PiDigits(int initN)
 {
     q      = new GmpInteger(1);
     r      = new GmpInteger();
     s      = new GmpInteger();
     t      = new GmpInteger(1);
     u      = new GmpInteger();
     v      = new GmpInteger();
     w      = new GmpInteger();
     strBuf = new StringBuilder(40);
     i      = 0;
     n      = initN;
 }
Beispiel #4
0
 public void Divide(GmpInteger op1, GmpInteger op2)
 {
     mpz_tdiv_q(pointer, op1.pointer, op2.pointer);
 }
Beispiel #5
0
 public void Add(GmpInteger op1, GmpInteger op2)
 {
     mpz_add(pointer, op1.pointer, op2.pointer);
 }
Beispiel #6
0
 public void Multiply(GmpInteger src, int val)
 {
     mpz_mul_si(pointer, src.pointer, val);
 }
Beispiel #7
0
 public void div(GmpInteger op1, GmpInteger op2)
 {
     mpz_tdiv_q(ref pointer, ref op1.pointer, ref op2.pointer);
 }
Beispiel #8
0
 public void add(GmpInteger op1, GmpInteger op2)
 {
     mpz_add(ref pointer, ref op1.pointer, ref op2.pointer);
 }
Beispiel #9
0
 public void mul(GmpInteger src, int val)
 {
     mpz_mul_si(ref pointer, ref src.pointer, val);
 }