File: Rat.h

package info (click to toggle)
palp 2.1-5
 `1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253` ``````#ifndef __Rat__ #define __Rat__ typedef struct {Long N; Long D;} Rat; /* = N/D */ Long Fgcd(Long a, Long b); /* Fast greatest common divisor */ Long NNgcd(Long a, Long b); /* NonNegative gcd handling zero */ Long Egcd(Long, Long, Long*,Long*); /* extended gcd(a,b) */ Long REgcd(Long *vec_in, int *d, Long *vec_out);/* extended gcd(a_1,...a_d) */ Rat rI(Long a); /* conversion Long -> Rat */ Rat rR(Long a, Long b); /* conversion a/b -> Rat */ Rat irP(Long a, Rat b); /* a b integer * Rat */ Rat rS(Rat a, Rat b); /* a + b rational Sum */ Rat rD(Rat a, Rat b); /* a - b rational Difference */ Rat rP(Rat a, Rat b); /* a * b rational Product */ Rat rQ(Rat a, Rat b); /* a / b rational Quotient */ int rC(Rat a, Rat b); /* Compare = [1 / 0 / -1] if a [gt/eq/lt] b */ void Rpr(Rat c); /* write "c.N/c.D" to outFN */ #endif typedef struct {LLong N; LLong D;} LRat; /* = N/D */ LLong LFgcd(LLong a, LLong b); /* Fast greatest common divisor */ LLong LNNgcd(LLong a, LLong b); /* NonNegative gcd handling zero */ LLong LEgcd(LLong, LLong, LLong*,LLong*); /* extended gcd(a,b) */ LLong LREgcd(LLong *vec_in, int *d, LLong *vec_out); /* extended gcd(a_1,...a_d) */ LRat LrI(LLong a); /* conversion LLong -> LRat */ LRat LrR(LLong a, LLong b); /* conversion a/b -> LRat */ LRat LirP(LLong a, LRat b); /* a b integer * LRat */ LRat LrS(LRat a, LRat b); /* a + b LRational Sum */ LRat LrD(LRat a, LRat b); /* a - b LRational Difference */ LRat LrP(LRat a, LRat b); /* a * b LRational Product */ LRat LrQ(LRat a, LRat b); /* a / b LRational Quotient */ int LrC(LRat a, LRat b); /* Compare = [1 / 0 / -1] if a [gt/eq/lt] b */ void LRpr(LRat c); /* write "c.N/c.D" to outFN */ /* Map Permutations: Do "ArgFun" for all permutations pi of *d elements */ #ifdef __cplusplus #define ARG_FUN void (*ArgFun)(int *d,int *pi,int *pinv,void *info) #else #define ARG_FUN void ( ArgFun() ) #endif void Map_Permut(int *d,int *pi,int *pinv,ARG_FUN,void *AuxPtr); Long W_to_GLZ(Long *W, int *d, Long **GLZ); /* "triangluar" form of GLZ */ Long PW_to_GLZ(Long *W, int *d, Long **GLZ); /* improved by permutations */ ``````