devronious
- 7
- 0
Is there a Hi-prec math for visual studio c#?
Thanks in advance,
Devin
Thanks in advance,
Devin
The discussion revolves around the need for high-precision mathematical operations in Visual Studio C#. Participants explore available libraries, specific requirements for mathematical operations, and the possibility of implementing custom solutions.
Participants do not reach a consensus on a specific library or solution, as the discussion includes various suggestions and considerations without definitive conclusions.
The provided code snippet is not compiled or tested, and participants acknowledge that certain operations (like multiplication and division) are not fully implemented, leaving room for further development and refinement.
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;
}
}