algebrite
Version:
Computer Algebra System in Coffeescript
76 lines (55 loc) • 1.22 kB
text/coffeescript
# Bignum multiplication and division
mmul = (a, b) ->
return a.multiply b
mdiv = (a, b) ->
return a.divide b
##
addf(unsigned int *a, unsigned int *b, int len)
{
int i
long long t = 0;
for (i = 0; i < len; i++) {
t += (long long) a[i] + b[i]
a[i] = (unsigned int) t
t >>= 32
}
}
// a = a - b
static void
subf(unsigned int *a, unsigned int *b, int len)
{
int i
long long t = 0;
for (i = 0; i < len; i++) {
t += (long long) a[i] - b[i]
a[i] = (unsigned int) t
t >>= 32
}
}
// a = b * c
// 0xffffffff + 0xffffffff * 0xffffffff == 0xffffffff00000000
static void
mulf(unsigned int *a, unsigned int *b, int len, unsigned int c)
{
int i
unsigned long long t = 0;
for (i = 0; i < len; i++) {
t += (unsigned long long) b[i] * c
a[i] = (unsigned int) t
t >>= 32
}
a[i] = (unsigned int) t
}
##
return a.mod b
mdivrem = (a,b) ->
toReturn = a.divmod b
return [toReturn.quotient, toReturn.remainder]