Example #1
0
void test02(void) {
  int m[7];
  ObjRef n[7];
  int i, j;
  int res;

  m[0] = 0;
  bigFromInt(m[0]);
  n[0] = bip.res;
  printf("n[0] = %d\n", m[0]);

  m[1] = 100;
  bigFromInt(m[1]);
  n[1] = bip.res;
  printf("n[1] = %d\n", m[1]);

  m[2] = -100;
  bigFromInt(m[2]);
  n[2] = bip.res;
  printf("n[2] = %d\n", m[2]);

  m[3] = 101;
  bigFromInt(m[3]);
  n[3] = bip.res;
  printf("n[3] = %d\n", m[3]);

  m[4] = -101;
  bigFromInt(m[4]);
  n[4] = bip.res;
  printf("n[4] = %d\n", m[4]);

  m[5] = 12345678;
  bigFromInt(m[5]);
  n[5] = bip.res;
  printf("n[5] = %d\n", m[5]);

  m[6] = -12345678;
  bigFromInt(m[6]);
  n[6] = bip.res;
  printf("n[6] = %d\n", m[6]);

  for (i = 0; i < 7; i++) {
    for (j = 0; j < 7; j++) {
      printf("%12d ", m[i]);
      bip.op1 = n[i];
      bip.op2 = n[j];
      res = bigCmp();
      if (res < 0) {
        printf("<");
      } else
      if (res > 0) {
        printf(">");
      } else {
        printf("=");
      }
      printf(" %12d", m[j]);
      printf("\n");
    }
  }
}
Example #2
0
void test14(void) {
  int n, m;
  ObjRef dividend;
  ObjRef divisor;
  int ok;

  printf("divisor");
  for (m = 0; m < 256; m++) {
    if (m % 8 == 0) {
      printf("\n%3d to %3d:   ", m, m + 7);
    }
    if (m == 0) {
      printf(" ");
      fflush(stdout);
      continue;
    }
    bigFromInt(m);
    divisor = bip.res;
    ok = 1;
    for (n = 0; n < (1 << 18); n++) {
      bigFromInt(n);
      dividend = bip.res;
      bip.op1 = dividend;
      bip.op2 = divisor;
      bigDiv();
      bip.op1 = bip.res;
      bigMul();
      free(bip.op1);
      bip.op1 = bip.res;
      bip.op2 = bip.rem;
      bigAdd();
      free(bip.op1);
      free(bip.op2);
      bip.op1 = bip.res;
      bip.op2 = dividend;
      if (bigCmp() != 0) {
        ok = 0;
      }
      free(bip.op1);
      free(dividend);
    }
    free(divisor);
    printf("%c", ok ? '.' : '?');
    fflush(stdout);
  }
  printf("\n");
}
Example #3
0
bignum *bigmod(const bignum *n1, const bignum *n2,bignum *result)
{
  ABORT_NABN(n1);
  ABORT_NABN(n2);

  int i=0,k=0,t=0,k2=0;
  bignum *divisor;
  bignum *divident;
  bignum *remainder;
  char *zeros;

  divisor =(bignum *)malloc(sizeof(bignum));
  divident   =(bignum *)malloc(sizeof(bignum));
  zeros=(char *)malloc(1000*sizeof(char));

  for(i=0;i<1000;i++)
  *(zeros+i)='0';
  *(zeros+i)=0;

  *divident=*n1;
  *result=BIGZERO;

  k=strlen(divident->number)-strlen(divisor->number);
  if(k<0)
  return result;

  i=0;

    while((k--)>=0){
        t=0;
        *divisor=*n2;
        strncat(divisor->number,zeros,k+1);

            while(bigCmp(divident,divisor)>0)
            bigabssub(divident,divisor,divident);
    }

  *result=*divident;

  ABORT_NABN(result);

  free(divisor);
  free(divident);
  free(zeros);

return result;
}
Example #4
0
bignum *bigdiv(const bignum *n1, const bignum *n2,bignum *result)
{
  ABORT_NABN(n1);
  ABORT_NABN(n2);

  int i=0,k=0,t=0,k2=0;
  bignum *divisor;
  bignum *divident;
  char *zeros;

  divisor =(bignum *)malloc(sizeof(bignum));
  divident=(bignum *)malloc(sizeof(bignum));
  zeros=(char *)malloc(1000*sizeof(char));

  for(i=0;i<1000;i++)
  *(zeros+i)='0';
  *(zeros+i)=0;

  *divident=*n1;
  *divisor=*n2;
  *result=BIGZERO;

  k=strlen(divident->number)-strlen(divisor->number);
  if(k<0)
  return result;

  i=0;

    while(k--){
        t=0;
        *divisor=*n2;
        strncat(divisor->number,zeros,k);

            while(bigCmp(divident,divisor)>=0){
                t++;
            bigabssub(divident,divisor,divident);
            }

            result->number[i++]=t%10+'0';
            putbignum(result);
            putbignum(divident);
            putbignum(divisor);
             ABORT_NABN(result);
              ABORT_NABN(divisor);
               ABORT_NABN(divident);
    }

    result->number[i]=0;



  ABORT_NABN(result);

  free(divisor);
  free(divident);
  free(zeros);

  if(n1->sign!=n2->sign)
  result->sign='n';

return result;
}
Example #5
0
int isequalbig  (bignum *n1,bignum *n2)
{
   if(!bigCmp(n1,n2))
   return 1;
   return 0;
}