|
|
1.1 ! root 1: /* ! 2: * Definitions of all user multi-precision types, macros and ! 3: * non-int returning functions. ! 4: */ ! 5: ! 6: ! 7: /* ! 8: * Multi-precision integer type. ! 9: */ ! 10: ! 11: typedef struct { ! 12: unsigned len; ! 13: char *val; ! 14: } mint; ! 15: ! 16: ! 17: /* ! 18: * Minit initializes a mint so that it may be used by the other ! 19: * multi-precision routines. This simply consists of setting the ! 20: * val field to NULL so that mpfree will know that there is nothing ! 21: * to free. Note that the mint so initialized has no value and ! 22: * should not be used as an operand, but may be used as the result ! 23: * of any of the multi-precision routines. ! 24: */ ! 25: ! 26: #define minit(mp) (mp)->val = NULL ! 27: ! 28: ! 29: /* ! 30: * Mvfree frees the value associated to a pointer to a mint. ! 31: * Note that it does not re-initialize the mint. ! 32: */ ! 33: ! 34: #define mvfree(mp) mpfree((mp)->val) ! 35: ! 36: ! 37: /* ! 38: * Functions returning non-ints. ! 39: */ ! 40: ! 41: void gcd(), /* greatest common divisor of 2 mints */ ! 42: madd(), /* add 2 mints */ ! 43: mcopy(), /* copy mint */ ! 44: mdiv(), /* divide 2 mints */ ! 45: min(), /* read in mint from stdin */ ! 46: mintfr(), /* free all space used by a mint */ ! 47: mitom(), /* set a mint to the value of an int */ ! 48: mneg(), /* negate a mint */ ! 49: mout(), /* write out mint onto stdout */ ! 50: mperr(), /* print error on stdout and exit */ ! 51: mpfree(), /* free space allocated by mpalc */ ! 52: msqrt(), /* square root of mint */ ! 53: msub(), /* subtract 2 mints */ ! 54: mult(), /* multiply 2 mints */ ! 55: pow(), /* raise mint to a mint power mod a mint */ ! 56: rpow(), /* raise mint to a mint power */ ! 57: sdiv(), /* divide a mint by a char */ ! 58: smult(), /* multiply a mint by a char */ ! 59: spow(), /* raise mint to an unsigned power */ ! 60: xgcd(); /* extended greatest common divisor */ ! 61: char *mpalc(), /* allocate space */ ! 62: *mtos(); /* convert mint to string */ ! 63: mint *itom(); /* allocate space for mint initialized to int */ ! 64: ! 65: ! 66: /* external variables */ ! 67: ! 68: extern mint *mzero, /* a mint which has a value of zero */ ! 69: *mone, /* a mint which has a value of one */ ! 70: *mminint, /* min value that fits in an int */ ! 71: *mmaxint; /* max value that fits in an int */ ! 72: extern int ibase, /* input base (2 <= ibase <= 16 assumed) */ ! 73: obase; /* output base (2 <= obase <= 16 assumed) */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.