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); } }
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}"); } }
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; }
public void Divide(GmpInteger op1, GmpInteger op2) { mpz_tdiv_q(pointer, op1.pointer, op2.pointer); }
public void Add(GmpInteger op1, GmpInteger op2) { mpz_add(pointer, op1.pointer, op2.pointer); }
public void Multiply(GmpInteger src, int val) { mpz_mul_si(pointer, src.pointer, val); }
public void div(GmpInteger op1, GmpInteger op2) { mpz_tdiv_q(ref pointer, ref op1.pointer, ref op2.pointer); }
public void add(GmpInteger op1, GmpInteger op2) { mpz_add(ref pointer, ref op1.pointer, ref op2.pointer); }
public void mul(GmpInteger src, int val) { mpz_mul_si(ref pointer, ref src.pointer, val); }