home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus Special 6 / Sonderheft_6-96.iso / pd / libraries / bignum / developpers / doc / bignum.doc next >
Text File  |  1996-11-03  |  7KB  |  275 lines

  1.                     ----------------------------------
  2.                     ----------------------------------
  3.  
  4.                BigNum library is a Ringard' Production 1996
  5.                              ©Allenbrand Brice
  6.  
  7.                     ----------------------------------
  8.                     ----------------------------------
  9.  
  10. ----------------------------------------------------------------------
  11.  
  12. BigNum.library v37.1
  13.  
  14. THE Multiprecision integer library !
  15.  
  16. This library is shareware. If you use it, please send : 10$ to
  17.  
  18. Allenbrand Brice
  19. 5, rue du Manège
  20. 68100 Mulhouse
  21. FRANCE
  22.  
  23. If you have suggestions I'd be happy to answer them.
  24.  
  25. I'm looking for a multiplication FFT based algorithm.
  26.  
  27. ----------------------------------------------------------------------
  28.  
  29. This package contains the library and the protos for C programming.
  30. YOU MUST HAVE AT LEAST A 68020 PROCESSOR OR THE LIBRARY WON'T OPEN !!
  31.  
  32. ----------------------------------------------------------------------
  33.  
  34. *)BigNum.library has been written using SAS/6.56 and do NOT need any ixemul
  35.   or some f...ing library. It takes advantage of the Amiga system for
  36.   maximum efficiency.
  37.  
  38. *)Today a BigNum is limited to 4500 digits and the library will need 200Kb RAM
  39.  
  40. *)The library will manage 50 BigNums at a time. All the allocations are made
  41.   during the opening of the library for speed-up efficiency.
  42.  
  43. *)All overflows or division by 0 are managed by the library. (Hope so...)
  44.  
  45. *)It is easy to Use (yes yes)
  46.  
  47. *)No Enforcer hits (sure)
  48.  
  49. ----------------------------------------------------------------------
  50.  
  51. USAGE :
  52.  
  53. 1) #include <proto/BigNum.h>
  54.  
  55. 2) struct Library *BigNumBase;
  56.  
  57. 3) At first, open the library with the common way.
  58.  
  59. 4) Then declare your BigNum : PtrBigNum x,y,z,u,i,op......
  60.  
  61. 5) Then INITIALIZE THEM : x=BigNumInit();y=BigNumInit()....
  62.  
  63. 6) Make your computations......
  64.    .....
  65.      ......
  66.          .....
  67. 7) After using, FREE THEM or you'll have warning message when you close
  68.    the library. If you forget it, this won't crash the machine or lose
  69.    memory, but it is an efficient way to know what if what you've done is
  70.    right
  71.    e.g if you Init 5 BigNums then call BigNumFree(5);
  72.  
  73. 8) Close the library or you'll lose 200Kb of memory.
  74.  
  75. ----------------------------------------------------------------------
  76.  
  77. Commands :
  78.  
  79. BigNumSetNul(x)            x=0
  80. BigNumSize(x)            returns the greater n where 32768^(n-1)<x
  81. BigNumIsEven(x)            if x is even returns 1; 0 otherwise
  82. BigNumAbsBigNum(x,y)        x=abs(x)
  83. BigNumIsNul(x)            if x==0 returns 1; 0 otherwise
  84. BigNumIsPositive(x)        if x>=0 returns 1; 0 otherwise
  85. BigNumNegative(x)        x=-x
  86.  
  87.                     ----------------------------------
  88.                               /* Addition */
  89.                     ----------------------------------
  90.  
  91. void BigNumAdd(PtrBigNum x,PtrBigNum y,PtrBigNum z);
  92.  
  93.     z=x+y
  94.  
  95. void BigNumDigitAdd(PtrBigNum x,int y);
  96.  
  97.     x=x+y
  98.  
  99.                     ----------------------------------
  100.                               /* Division */
  101.                     ----------------------------------
  102.  
  103. void BigNumDiv(PtrBigNum x,PtrBigNum y,PtrBigNum z);
  104.  
  105.     z=x/y
  106.  
  107. void BigNumDigitDiv(PtrBigNum x,int y,PtrBigNum z);
  108.  
  109.     z=x/y
  110.  
  111. void BigNumRightShift(PtrBigNum x,PtrBigNum z);
  112.  
  113.     z=x/2
  114.  
  115. void BigNumModulo(PtrBigNum x,PtrBigNum y,PtrBigNum z);
  116.  
  117.     z=x mod y
  118.  
  119. void BigNumEDiv(PtrBigNum x,PtrBigNum y,PtrBigNum z,PtrBigNum Rest);
  120.  
  121.     z=x/y and rest=x mod y
  122.  
  123.                     ----------------------------------
  124.                            /* Multiplication */
  125.                     ----------------------------------
  126.  
  127. void BigNumMul(PtrBigNum x,PtrBigNum y,PtrBigNum z);
  128.  
  129.     z=x*y
  130.  
  131. void BigNumDigitMul(PtrBigNum x,int y);
  132.  
  133.     x=x*y
  134.  
  135. void BigNumLeftShift(PtrBigNum x);
  136.  
  137.     x=x*2
  138.  
  139.                     ----------------------------------
  140.                             /* Substraction */
  141.                     ----------------------------------
  142.  
  143. void BigNumSub(PtrBigNum x,PtrBigNum y,PtrBigNum z);
  144.  
  145.     z=x-y
  146.  
  147. void BigNumDigitSub(PtrBigNum x,int y);
  148.  
  149.     x=x-y
  150.  
  151.                     ----------------------------------
  152.                              /* Displaying */
  153.                     ----------------------------------
  154.  
  155. void BigNumDisplay(PtrBigNum z);
  156.  
  157.     for debugging. Do not use.
  158.  
  159. void BigNumPrint(PtrBigNum x);
  160.  
  161.     print(x) !!!!
  162.  
  163.                     ----------------------------------
  164.                              /* Conversion */
  165.                     ----------------------------------
  166.  
  167. void BigNumStrToBigNum(PtrBigNum x,char *S);
  168.  
  169.     convert an ASCII string to a BigNum
  170.  
  171. void BigNumToStr(PtrBigNum x,char *y);
  172.  
  173.     convert a BigNum to an ASCII string
  174.  
  175. void BigNumIntToBigNum(PtrBigNum z,int x);
  176.  
  177.     convert an integer to a BigNum
  178.  
  179. int BigNumToInt(PtrBigNum z);
  180.  
  181.     convert a BigNum to an integer
  182.  
  183.                     ----------------------------------
  184.                              /* Comparison */
  185.                     ----------------------------------
  186.  
  187. int BigNumCompare(PtrBigNum x,PtrBigNum y);
  188.  
  189.     return 1 if x>y
  190.     return -1 if x<y
  191.     return 0 if x==y
  192.  
  193. int BigNumFastCompare(PtrBigNum x,PtrBigNum y);
  194.  
  195.     Same as Compare but do not take look at the sign
  196.  
  197.                     ----------------------------------
  198.                              /* Prime tests */
  199.                     ----------------------------------
  200.  
  201. int BigNumDiffCarre(PtrBigNum n,PtrBigNum res,int lim);
  202.  
  203.     lim must be <31. The higher it is, the precise will be the result
  204.     Take care, because the computation can be very long !!
  205.     If a factor of n was found, it is returned in res
  206.  
  207.     The function returns     -1    if n is surelyprime
  208.                 1    if n is surely not prime
  209.                 0    if n is probably prime
  210.  
  211. int BigNumRho(PtrBigNum n,PtrBigNum res,int lim);
  212.  
  213.     lim must be <31. The higher it is, the precise will be the result
  214.     Take care, because the computation can be very long !!
  215.     If a factor of n was found, it is returned in res
  216.  
  217.     The function returns     1    if n is probably prime
  218.                 0    if n is not prime
  219.  
  220. int BigNumBrutePrime(PtrBigNum i,int aff);
  221.  
  222.     Take care, because the computation can be very long !!
  223.     If a factor of n was found, it is printed if aff=1 otherwise
  224.     the function returns 1.
  225.  
  226.     The function returns     1    if a factor was found
  227.                 0    otherwise
  228.  
  229.                     ----------------------------------
  230.                                 /* Div. */
  231.                     ----------------------------------
  232.  
  233. void BigNumRnd(int n,PtrBigNum z);
  234.  
  235.     z will be a random number between 1 and 32768^(n-1)
  236.  
  237. void BigNumPgcd(PtrBigNum x,PtrBigNum y,PtrBigNum z);
  238.  
  239.     z=pgcd(x,y)
  240.  
  241. void BigNumPuiModulo(PtrBigNum x,PtrBigNum y,PtrBigNum z,PtrBigNum t);
  242.  
  243.     t=x^y modulo z
  244.  
  245. int BigNumSqrt(PtrBigNum x,PtrBigNum y);
  246.  
  247.     y=sqrt(x)
  248.     The function returns 1 if y*y=x (perfect square), otherwise 0
  249.  
  250. void BigNumSwap(PtrBigNum x,PtrBigNum y);
  251.  
  252.     swap x and y
  253.  
  254. void BigNumAssign(PtrBigNum x,PtrBigNum y);
  255.  
  256.     x=y
  257.  
  258.                     ----------------------------------
  259.                              /* Alloc/Free */
  260.                     ----------------------------------
  261.  
  262. PtrBigNum BigNumInit(void);
  263.  
  264.     Init a declared BigNum. DON'T FORGET IT !!
  265.  
  266. void BigNumFree(int i);
  267.  
  268.     Free the last 'i' BigNum(s).
  269.  
  270.  
  271.  
  272.  
  273.  
  274.  
  275.             More will be done in the next version.......SURE !!!!