rational Class Reference

#include <rational.hpp>

List of all members.

Public Member Functions

Friends


Detailed Description

Definition at line 36 of file rational.hpp.


Constructor & Destructor Documentation

rational (  )  [inline]

Definition at line 44 of file rational.hpp.

00044 : rep (new rational_rep ()) {}

rational ( const format< rational > &  fm  )  [inline]

Definition at line 45 of file rational.hpp.

00045                                               : rep (new rational_rep ()) {
00046     (void) fm; }

rational ( signed int  i  )  [inline]

Definition at line 47 of file rational.hpp.

00047                                 : rep (new rational_rep ()) {
00048     mpq_set_si (rep->x, i, 1); }

rational ( unsigned int  i  )  [inline]

Definition at line 49 of file rational.hpp.

00049                                   :
00050     rep (new rational_rep ()) { mpq_set_ui (rep->x, i, 1); }
  inline rational (signed short int i):

rational ( signed short int  i  )  [inline]

Definition at line 51 of file rational.hpp.

00051                                       :
00052     rep (new rational_rep ()) { mpq_set_si (rep->x, i, 1); }
  inline rational (unsigned short int i):

rational ( unsigned short int  i  )  [inline]

Definition at line 53 of file rational.hpp.

00053                                         :
00054     rep (new rational_rep ()) { mpq_set_ui (rep->x, i, 1); }
  inline rational (signed long int i):

rational ( signed long int  i  )  [inline]

Definition at line 55 of file rational.hpp.

00055                                      :
00056     rep (new rational_rep ()) { mpq_set_si (rep->x, i, 1); }
  inline rational (unsigned long int i):

rational ( unsigned long int  i  )  [inline]

Definition at line 57 of file rational.hpp.

00057                                        :
00058     rep (new rational_rep ()) { mpq_set_ui (rep->x, i, 1); }
  inline rational (const integer& i):

rational ( const integer i  )  [inline]

Definition at line 59 of file rational.hpp.

00059                                     :
00060     rep (new rational_rep ()) { mpq_set_z (rep->x, *i); }
  inline rational (const double& d):

rational ( const double &  d  )  [inline]

Definition at line 61 of file rational.hpp.

00061                                    :
00062     rep (new rational_rep ()) { mpq_set_d (rep->x, d); }

rational ( char *const &  c  )  [inline]

Definition at line 64 of file rational.hpp.

00064                                     :
00065     rep (new rational_rep ()) { mpq_set_str (rep->x, c, 10); }


Friends And Related Function Documentation

rational abs ( const rational x1  )  [friend]

Definition at line 102 of file rational.hpp.

00102                                                   {
00103     rational r; mpq_abs (*r, *x1); return r; }

void add ( rational r,
const rational x1,
const rational x2 
) [friend]

Definition at line 127 of file rational.hpp.

00127                                                             {
00128     r.secure (); mpq_add (*r, *x1, *x2); }

double as_double ( const rational q  )  [friend]

Definition at line 217 of file rational.hpp.

00217 {return mpq_get_d(*q);}

floating<V> as_floating ( const rational x  )  [friend]
rational ceil ( const rational x1  )  [friend]

Definition at line 165 of file rational.hpp.

00165                                                    {
00166     return quo (numerator (x1) + denominator (x1) - 1, denominator (x1)); }

rational copy ( const rational x1  )  [friend]

Definition at line 76 of file rational.hpp.

00076                                                    {
00077     rational r; mpq_set (*r, *x1); return r; }

integer denominator ( const rational x1  )  [friend]

Definition at line 70 of file rational.hpp.

00070                                                          {
00071     integer r; mpq_get_den (*r, *x1); return r; }

void div ( rational r,
const rational x1,
const rational x2 
) [friend]

Definition at line 136 of file rational.hpp.

00136                                                             {
00137     ASSERT (mpq_sgn (*x2) != 0, "division by zero");
00138     r.secure (); mpq_div (*r, *x1, *x2); }

bool divides ( const rational x1,
const rational x2 
) [friend]

Definition at line 91 of file rational.hpp.

00091                                                                       {
00092     (void) x2;
00093     return mpq_sgn (*x1) != 0; }

friend class floating [friend]

Definition at line 215 of file rational.hpp.

rational floor ( const rational x1  )  [friend]

Definition at line 161 of file rational.hpp.

00161                                                     {
00162     return quo (numerator (x1), denominator (x1)); }

nat hash ( const rational x  )  [friend]

Definition at line 205 of file rational.hpp.

00205                                              {
00206     const __mpq_struct &rep= (*x)[0];
00207     if (rep._mp_num._mp_size == 0) return 0;
00208     return
00209       ((nat) (rep._mp_num._mp_d[0])) ^
00210       ((nat) (rep._mp_num._mp_size << 3)) ^
00211       ((nat) (rep._mp_den._mp_d[0] << 7)) ^
00212       ((nat) (rep._mp_den._mp_size << 11));
00213   }

rational invert ( const rational x  )  [friend]

Definition at line 96 of file rational.hpp.

00096                                                     {
00097     return rational (1) / x; }

bool is_integer ( const rational x  )  [friend]

Definition at line 72 of file rational.hpp.

00072                                                     {
00073     return mpz_cmp_ui (mpq_denref (*x), 1) == 0; }

bool is_invertible ( const rational x  )  [friend]

Definition at line 94 of file rational.hpp.

00094                                                        {
00095     return x != 0; }

bool is_square ( const rational a  )  [friend]

Definition at line 171 of file rational.hpp.

00171                                                    {
00172     return mpz_perfect_square_p (mpq_numref (*a)) &&
00173            mpz_perfect_square_p (mpq_denref (*a)); }

rational max ( const rational x1,
const rational x2 
) [friend]

Definition at line 157 of file rational.hpp.

00157                                                                       {
00158     return x1 >= x2? x1: x2; }

rational min ( const rational x1,
const rational x2 
) [friend]

Definition at line 155 of file rational.hpp.

00155                                                                       {
00156     return x1 <= x2? x1: x2; }

void mul ( rational r,
const rational x1,
const rational x2 
) [friend]

Definition at line 133 of file rational.hpp.

00133                                                             {
00134     r.secure (); mpq_mul (*r, *x1, *x2); }

void neg ( rational r,
const rational x1 
) [friend]

Definition at line 124 of file rational.hpp.

00124                                         {
00125     r.secure (); mpq_neg (*r, *x1); }

void neg ( rational r  )  [friend]

Definition at line 121 of file rational.hpp.

00121                     {
00122     r.secure (); mpq_neg (*r, *r); }

integer numerator ( const rational x1  )  [friend]

Definition at line 68 of file rational.hpp.

00068                                                        {
00069     integer r; mpq_get_num (*r, *x1); return r; }

bool operator!= ( const rational x1,
const rational x2 
) [friend]

Definition at line 143 of file rational.hpp.

00143                                                                           {
00144     return mpq_cmp (*x1, *x2) != 0; }

rational operator* ( const rational x1,
const rational x2 
) [friend]

Definition at line 84 of file rational.hpp.

00084                                                                              {
00085     rational r; mpq_mul (*r, *x1, *x2); return r; }

rational& operator*= ( rational x1,
const rational x2 
) [friend]

Definition at line 110 of file rational.hpp.

00110                                                                          {
00111     x1.secure (); mpq_mul (*x1, *x1, *x2); return x1; }

rational operator+ ( const rational x1,
const rational x2 
) [friend]

Definition at line 80 of file rational.hpp.

00080                                                                              {
00081     rational r; mpq_add (*r, *x1, *x2); return r; }

rational& operator+= ( rational x1,
const rational x2 
) [friend]

Definition at line 106 of file rational.hpp.

00106                                                                          {
00107     x1.secure (); mpq_add (*x1, *x1, *x2); return x1; }

rational operator- ( const rational x1,
const rational x2 
) [friend]

Definition at line 82 of file rational.hpp.

00082                                                                              {
00083     rational r; mpq_sub (*r, *x1, *x2); return r; }

rational operator- ( const rational x1  )  [friend]

Definition at line 78 of file rational.hpp.

00078                                                          {
00079     rational r; mpq_neg (*r, *x1); return r; }

rational& operator-= ( rational x1,
const rational x2 
) [friend]

Definition at line 108 of file rational.hpp.

00108                                                                          {
00109     x1.secure (); mpq_sub (*x1, *x1, *x2); return x1; }

rational operator/ ( const rational x1,
const rational x2 
) [friend]

Definition at line 88 of file rational.hpp.

00088                                                                              {
00089     ASSERT (mpq_sgn (*x2) != 0, "division by zero");
00090     rational r; mpq_div (*r, *x1, *x2); return r; }

rational& operator/= ( rational x1,
const rational x2 
) [friend]

Definition at line 112 of file rational.hpp.

00112                                                                          {
00113     ASSERT (mpq_sgn (*x2) != 0, "division by zero");
00114     x1.secure (); mpq_div (*x1, *x1, *x2); return x1; }

bool operator< ( const rational x1,
const rational x2 
) [friend]

Definition at line 145 of file rational.hpp.

00145                                                                          {
00146     return mpq_cmp (*x1, *x2) < 0; }

rational operator<< ( const rational x1,
const xint shift 
) [friend]

Definition at line 98 of file rational.hpp.

00098                                                                              {
00099     rational r; mpq_mul_2si (*r, *x1, shift); return r; }

rational& operator<<= ( rational x1,
const xint shift 
) [friend]

Definition at line 115 of file rational.hpp.

00115                                                                          {
00116     x1.secure (); mpq_mul_2si (*x1, *x1, shift); return x1; }

bool operator<= ( const rational x1,
const rational x2 
) [friend]

Definition at line 149 of file rational.hpp.

00149                                                                           {
00150     return mpq_cmp (*x1, *x2) <= 0; }

bool operator== ( const rational x1,
const rational x2 
) [friend]

Definition at line 141 of file rational.hpp.

00141                                                                           {
00142     return mpq_cmp (*x1, *x2) == 0; }

bool operator> ( const rational x1,
const rational x2 
) [friend]

Definition at line 147 of file rational.hpp.

00147                                                                          {
00148     return mpq_cmp (*x1, *x2) > 0; }

bool operator>= ( const rational x1,
const rational x2 
) [friend]

Definition at line 151 of file rational.hpp.

00151                                                                           {
00152     return mpq_cmp (*x1, *x2) >= 0; }

rational operator>> ( const rational x1,
const xint shift 
) [friend]

Definition at line 100 of file rational.hpp.

00100                                                                              {
00101     rational r; mpq_mul_2si (*r, *x1, -shift); return r; }

rational& operator>>= ( rational x1,
const xint shift 
) [friend]

Definition at line 117 of file rational.hpp.

00117                                                                          {
00118     x1.secure (); mpq_mul_2si (*x1, *x1, -shift); return x1; }

rational pow ( const rational a,
const integer i 
) [friend]

Definition at line 199 of file rational.hpp.

00199                                                                    {
00200     ASSERT (is_int (i) || a == rational (0) ||
00201             a == rational (1) || a == rational (-1), "power too large");
00202     return pow (a, as_int (i)); }

rational pow ( const rational a,
const int &  i 
) [friend]

Definition at line 180 of file rational.hpp.

00180                                                                {
00181     /*
00182     rational r;
00183     if (i >= 0) {
00184       mpz_pow_ui (mpq_numref (*r), mpq_numref (*a), i);
00185       mpz_pow_ui (mpq_denref (*r), mpq_denref (*a), i);
00186     }
00187     else {
00188       ASSERT (mpq_sgn (*a) != 0, "division by zero");
00189       mpz_pow_ui (mpq_denref (*r), mpq_numref (*a), -i);
00190       mpz_pow_ui (mpq_numref (*r), mpq_denref (*a), -i);
00191     }
00192     return r;
00193     */
00194     if (i >= 0)
00195       return rational (pow (numerator (a), i)) / pow (denominator (a), i);
00196     else
00197       return rational (pow (denominator (a), -i)) / pow (numerator (a), -i);
00198   }

rational round ( const rational x1  )  [friend]

Definition at line 167 of file rational.hpp.

00167                                                     {
00168     return quo (numerator (x1) + (denominator (x1) >> 1), denominator (x1)); }

int sign ( const rational x1  )  [friend]

Definition at line 153 of file rational.hpp.

00153                                               {
00154     int r= mpq_sgn (*x1); return (r<0? -1: (r==0? 0: 1)); }

rational sqrt ( const rational a  )  [friend]

Definition at line 174 of file rational.hpp.

00174                                                   {
00175     VERIFY (is_square (a), "not a perfect square");
00176     rational r;
00177     mpz_sqrt (mpq_numref (*r), mpq_numref (*a));
00178     mpz_sqrt (mpq_denref (*r), mpq_denref (*a));
00179     return r; }

rational square ( const rational x1  )  [friend]

Definition at line 86 of file rational.hpp.

00086                                                      {
00087     rational r; mpq_mul (*r, *x1, *x1); return r; }

void sub ( rational r,
const rational x1,
const rational x2 
) [friend]

Definition at line 130 of file rational.hpp.

00130                                                             {
00131     r.secure (); mpq_sub (*r, *x1, *x2); }

rational trunc ( const rational x1  )  [friend]

Definition at line 163 of file rational.hpp.

00163                                                     {
00164     return sign (x1) * quo (abs (numerator (x1)), denominator (x1)); }


The documentation for this class was generated from the following file:

Generated on 6 Dec 2012 for numerix by  doxygen 1.6.1