Esempio n. 1
0
bigInt multiplyBigInt(bigInt a, bigInt b){
	bigInt product("0");
	bigInt greater("0");
	bigInt lesser("0");

	if (b.num.size() > a.num.size()){						// Find vector with most elements
		greater = b;
		lesser = a;
	}
	else{
		greater = a;
		lesser = b;
	}
	product.num.resize(a.num.size() + b.num.size());		// Get the magnitude of the product 
	product.bigIntInit();
	int k = 0;
	for (unsigned long i = 0; i < lesser.num.size(); i++){					// By hand style multiplacation
		for (unsigned long j = 0; j < greater.num.size(); j++){
			product.num[j + k] += greater.num[j] * lesser.num[i];
		}
		k++;
	}
	product.cleanCarries();
	if (a.isNegative != b.isNegative){
		product.isNegative = 1;
	}
	return product;
}
Esempio n. 2
0
static mrb_value
sym_cmp(mrb_state *mrb, mrb_value s1)
{
  mrb_value s2;
  mrb_sym sym1, sym2;

  mrb_get_args(mrb, "o", &s2);
  if (mrb_type(s2) != MRB_TT_SYMBOL) return mrb_nil_value();
  sym1 = mrb_symbol(s1);
  sym2 = mrb_symbol(s2);
  if (sym1 == sym2) return mrb_fixnum_value(0);
  else {
    const char *p1, *p2;
    int retval;
    mrb_int len, len1, len2;

    p1 = mrb_sym2name_len(mrb, sym1, &len1);
    p2 = mrb_sym2name_len(mrb, sym2, &len2);
    len = lesser(len1, len2);
    retval = memcmp(p1, p2, len);
    if (retval == 0) {
      if (len1 == len2) return mrb_fixnum_value(0);
      if (len1 > len2)  return mrb_fixnum_value(1);
      return mrb_fixnum_value(-1);
    }
    if (retval > 0) return mrb_fixnum_value(1);
    return mrb_fixnum_value(-1);
  }
}
Esempio n. 3
0
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;
}
Esempio n. 4
0
int equal(bignum x, bignum y) {
  return !lesser(x, y) && !lesser(y, x);
}
Esempio n. 5
0
int greater (bignum x, bignum y) {
  return lesser(y, x);
}