devronious
- 7
- 0
Is there a Hi-prec math for visual studio c#?
Thanks in advance,
Devin
Thanks in advance,
Devin
class Bignum {
protected ulong[] limb;
public Bignum (long initialValue) {
limb = new ulong[] {initialValue};
}
public Bignum (long[] initialValue) {
Array.Copy(limb, initialValue, initialValue.Length);
}
public Bignum (string initialValue) {
// Bad method, replace with a faster one if needed
limb = new ulong[] {long.Parse(initialValue.Substring(0, 18))};
for (int i = 18; i < initialValue.Length; ++i)
limb = limb * 10 + long.Parse(initialValue[i]);
}
public Bignum (Bignum initialValue) {
Array.Copy(limb, initialValue.limb, initialValue.limb.Length);
}
public static Bignum operator+ (Bignum a, Bignum b) {
long carry = 0;
int sz = Math.Max (a.limb.Length. b.limb.length);
Bignum result = new Bignum(a);
for (int i = 0; i < sz; ++i) {
long o1 = result.limb[i];
long o2 = b.limb[i];
limb[i] += b.limb[i] + carry;
if (result.limb[i] < o1 || result.limb[i] < o2)
carry = 1;
else
carry = 0;
}
if (carry == 1) {
Array.Copy(result.limb, result.limb, result.limb.Length + 1);
result.limb[sz] = 1;
}
return result;
}
public static Bignum operator* (Bignum a, Bignum b) {
// Code here
}
public static Bignum operator^ (Bignum a, uint b) {
Bignum result = new Bignum(a);
Bignum carry = new Bignum(0);
while (b > 1) {
if ((b&1) == 1)
carry *= result;
result *= result;
b >>= 1;
}
return result * carry;
}
}