int main() { bignum l1 = from_str("99"), l2 = from_str("10"); printf("%s\n", to_str(from_int(666))); printf("%d\n", to_int(from_str("666"))); bignum sum = plus(l1, l2); printf("%s\n", to_str(sum)); bignum diff = minus(l1, l2); printf("%s\n", to_str(diff)); printf("%i\n", lesser(l1, l2)); bignum muli = mul_int(l1, 2); printf("%s\n", to_str(muli)); printf("%d\n", mod_int(l1, 10)); bignum divi = div_int(l1, 10); printf("%s\n", to_str(divi)); bignum mul = multiply(l1, l2); printf("%s\n", to_str(mul)); bignum div = divide(l1, l2); printf("%s\n", to_str(div)); bignum mod = modulo(l1, l2); printf("%s\n", to_str(mod)); return 0; }
bignum multiply (bignum x, bignum y) { bignum z, zero; int len = x.len + y.len; zero.len = 1; zero.num = calloc(len, sizeof(int)); zero.num[0] = 0; z.len = 1; z.num = calloc(len, sizeof(int)); z.num[0] = 0; while (greater(y, zero)) { if (mod_int(y, 2) == 1) z = plus(z, x); x = mul_int(x, 2); y = div_int(y, 2); } free(zero.num); if (z.len == len) return z; else { bignum m; m.len = z.len; m.num = calloc(m.len, sizeof(int)); memcpy(m.num, z.num, m.len * sizeof(int)); free(z.num); return m; } }
void wrapCurrentVoxID(int& gridSize) { if(bMainDirection.x) { voxID = glm::ivec3(voxID.x, mod_int(voxID.y,gridSize), mod_int(voxID.z,gridSize)); } else if(bMainDirection.y) { voxID = glm::ivec3(mod_int(voxID.x,gridSize), voxID.y, mod_int(voxID.z,gridSize)); } else { voxID = glm::ivec3(mod_int(voxID.x,gridSize), mod_int(voxID.y,gridSize), voxID.z); } }