home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus Special 6 / Sonderheft_6-96.iso / pd / libraries / bignum / developpers / clib / bignum_protos.h
C/C++ Source or Header  |  1996-11-03  |  3KB  |  111 lines

  1. #ifndef CLIB_BIGNUM_PROTOS_H
  2. #define CLIB_BIGNUM_PROTOS_H
  3.  
  4. /*
  5.  *    clib/BigNum_protos.fd
  6.  *
  7.  *    © Allenbrand Brice, Ringard'Production 1996
  8. */
  9.  
  10. /********************/
  11. /* Do NOT change !! */
  12. /********************/
  13. #define TMAX 1000
  14.  
  15. typedef struct
  16. {
  17.  int signe;
  18.  int nc;
  19.  int chiffres[TMAX];
  20. } BigNum,*PtrBigNum;
  21. /********************/
  22. /* Do NOT change !! */
  23. /********************/
  24.  
  25. #define BigNumSetNul(x) {(x)->chiffres[(x)->nc=0]=0;(x)->signe=1;}
  26. #define BigNumSize(x) ((x)->nc+1)
  27. #define BigNumIsEven(x) (!((x)->chiffres[0]&1))
  28. #define BigNumAbsBigNum(x,y) {BigNumAssign(x,y);x->signe=1;}
  29. #define BigNumIsNul(x) (((!(x)->nc)&&(!(x)->chiffres[0]))?1:0)
  30. #define BigNumIsPositive(x) ((x)->signe)
  31. #define BigNumNegative(x) ((x)->signe=!((x)->signe))
  32.  
  33. /* Addition */
  34.  
  35. void BigNumAdd(PtrBigNum x,PtrBigNum y,PtrBigNum z);
  36. void BigNumDigitAdd(PtrBigNum x,int y);
  37.  
  38. /* Division */
  39.  
  40. void BigNumDiv(PtrBigNum x,PtrBigNum y,PtrBigNum z);
  41. void BigNumDigitDiv(PtrBigNum x,int y,PtrBigNum z);
  42. void BigNumRightShift(PtrBigNum x,PtrBigNum z);
  43. void BigNumModulo(PtrBigNum x,PtrBigNum y,PtrBigNum z);
  44. void BigNumEDiv(PtrBigNum x,PtrBigNum y,PtrBigNum z,PtrBigNum Rest);
  45.  
  46. /* Multiplication */
  47.  
  48. void BigNumMul(PtrBigNum x,PtrBigNum y,PtrBigNum z);
  49. void BigNumDigitMul(PtrBigNum x,int y);
  50. void BigNumLeftShift(PtrBigNum x);
  51.  
  52. /* Substraction */
  53.  
  54. void BigNumSub(PtrBigNum x,PtrBigNum y,PtrBigNum z);
  55. void BigNumDigitSub(PtrBigNum x,int y);
  56.  
  57. /* Displaying */
  58.  
  59. void BigNumDisplay(PtrBigNum z);
  60. void BigNumPrint(PtrBigNum x);
  61.  
  62. /* Conversion */
  63.  
  64. void BigNumStrToBigNum(PtrBigNum x,char *S);
  65. void BigNumToStr(PtrBigNum x,char *y);
  66. void BigNumIntToBigNum(PtrBigNum z,int x);
  67. int BigNumToInt(PtrBigNum z);
  68.  
  69. /* Comparison */
  70.  
  71. int BigNumCompare(PtrBigNum x,PtrBigNum y);
  72. int BigNumFastCompare(PtrBigNum x,PtrBigNum y);
  73.  
  74. /* Prime test */
  75.  
  76. int BigNumDiffCarre(PtrBigNum n,PtrBigNum res,int lim);
  77. int BigNumRho(PtrBigNum n,PtrBigNum res,int lim);
  78. int BigNumBrutePrime(PtrBigNum i,int aff);
  79.  
  80. /* Div. */
  81.  
  82. void BigNumRnd(int n,PtrBigNum z);
  83. void BigNumPgcd(PtrBigNum x,PtrBigNum y,PtrBigNum z);
  84. void BigNumPuiModulo(PtrBigNum x,PtrBigNum y,PtrBigNum z,PtrBigNum t);
  85. int BigNumSqrt(PtrBigNum x,PtrBigNum y);
  86. void BigNumSwap(PtrBigNum x,PtrBigNum y);
  87. void BigNumAssign(PtrBigNum x,PtrBigNum y);
  88.  
  89. /* Alloc/Free */
  90.  
  91. PtrBigNum BigNumInit(void);
  92. void BigNumFree(int i);
  93.  
  94. /* Error codes */
  95.  
  96. #define DIVIDE_ZERO        1
  97. #define NO_MEMORY         2
  98. #define TOO_MUCH_BIGNUM     4
  99. #define TOO_MUCH_FREE_BIGNUM    8
  100. #define INVALID_DOS        16
  101. #define INVALID_GRAPHICS    32
  102. #define INVALID_CPU        64
  103. #define BIGNUM_SIZE_TOO_HIGH    128
  104. #define NEGATIVE_SQRT        256
  105. #define PARTIAL_BIGNUM_TO_INT    512
  106. #define NEGATIVE_PGCD        1024
  107.  
  108. #define ERROR_TEXT "Warning ! An error %ld occured\n"
  109.  
  110. #endif /* CLIB_BIGNUM_PROTOS_H */
  111.