C-XSC - A C++ Class Library for Extended Scientific Computing  2.5.4
lx_real.hpp
00001 /*
00002 **  CXSC is a C++ library for eXtended Scientific Computing (V 2.5.4)
00003 **
00004 **  Copyright (C) 1990-2000 Institut fuer Angewandte Mathematik,
00005 **                          Universitaet Karlsruhe, Germany
00006 **            (C) 2000-2014 Wiss. Rechnen/Softwaretechnologie
00007 **                          Universitaet Wuppertal, Germany   
00008 **
00009 **  This library is free software; you can redistribute it and/or
00010 **  modify it under the terms of the GNU Library General Public
00011 **  License as published by the Free Software Foundation; either
00012 **  version 2 of the License, or (at your option) any later version.
00013 **
00014 **  This library is distributed in the hope that it will be useful,
00015 **  but WITHOUT ANY WARRANTY; without even the implied warranty of
00016 **  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00017 **  Library General Public License for more details.
00018 **
00019 **  You should have received a copy of the GNU Library General Public
00020 **  License along with this library; if not, write to the Free
00021 **  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00022 */
00023 
00024 /* CVS $Id: lx_real.hpp,v 1.10 2014/01/30 17:23:47 cxsc Exp $ */
00025 
00026 
00027 /*
00028 **  F. Blomquist, University of Wuppertal, 19.09.2007;
00029 */
00030 
00031 /*
00032 **  Implementation of the classes
00033 **
00034 **  lx_real      with all tools and elementary functions for real
00035 **               point and interval aruments
00036 **
00037 */
00038 
00039 #ifndef _CXSC_LX_REAL_HPP_INCLUDED
00040 #define _CXSC_LX_REAL_HPP_INCLUDED
00041 
00042 #include <l_imath.hpp>
00043 #include <sstream>
00044 #include <cmath>
00045 #include <iostream>
00046 
00047 namespace cxsc {
00048 
00049         const real Max_Int_R =  9007199254740991.0; // = 2^(53) - 1
00050         const real Max_Int_N = -9007199254738891.0; // = -Max_Int_R+2100
00051 
00053         inline bool Is_Integer(const real& x);
00054     // returns 1 if x is an integer value and 
00055     //           if |x| <= 2^53 - 1 = 9007199254740991.0;
00056     // otherwise 0 is returnd
00057 
00058         class lx_real
00059         {
00060 
00061                 private:
00062     // ------------- Datenelemente -------------------------------------------
00063                         real ex;
00064                         l_real lr;
00065 
00066                 public:
00067     // ------------- Constructors --------------------------------------------
00068 
00070                         lx_real(void)  throw() {}
00072                         lx_real(const real& n, const l_real &a) throw() 
00073                         { 
00074                                 if ( !(Is_Integer(n)) ) 
00075                                         cxscthrow(REAL_NOT_ALLOWED("lx_real(const real&, const l_real&)"));
00076                                 else
00077                                 {
00078                                         ex = n; lr = a;
00079                                 }
00080                         }
00081 
00083                         lx_real(const real& n, const real &a) throw() 
00084                         { 
00085                                 if ( !(Is_Integer(n)) ) 
00086                                         cxscthrow(REAL_NOT_ALLOWED("lx_real(const real&, const real&)"));
00087                                 else
00088                                 {
00089                                         ex = n; lr = a;
00090                                 }
00091                         }
00092 
00094                         explicit lx_real(const l_real &a) throw() : ex(0), lr(a) { }
00096                         explicit lx_real(const real &a)   throw() : ex(0), lr(a) { }
00098                         lx_real(const real&, const string&) throw();
00099 
00100 
00101     // ------------- Assignments ---------------------------------------------
00102          
00104                         inline lx_real & operator = (const lx_real &) throw();
00106                         inline lx_real & operator = (const l_real &)  throw();
00108                         inline lx_real & operator = (const real &)    throw();
00109 
00110     // ------------- Functions -----------------------------------------------
00111 
00113                         friend inline int StagPrec(const lx_real&) throw(); 
00115                         friend inline real expo(const lx_real&) throw();
00117                         friend inline int sign(const lx_real&) throw();
00119                         friend inline l_real lr_part(const lx_real&) throw();
00121                         friend inline lx_real abs(const lx_real&) throw();
00123                         friend void scale_up  (lx_real &) throw();
00125                         friend void scale_down(lx_real &) throw();
00127                         friend inline lx_real adjust(const lx_real &) throw();
00128 
00130                         friend inline bool eq_zero (const lx_real &a) throw(); // a = 0;
00132                         friend inline bool gr_zero (const lx_real &a) throw(); // a > 0;
00134                         friend inline bool ge_zero (const lx_real &a) throw(); // a >=0;
00136                         friend inline bool sm_zero (const lx_real &a) throw(); // a < 0;
00138                         friend inline bool se_zero (const lx_real &a) throw(); // a <=0;
00139          
00141                         friend inline void times2pown(lx_real &, const real &) throw();
00143                         friend inline void times2pown_neg(lx_real& a, const real& n) throw();
00145                         friend inline bool operator ! (const lx_real &) throw();
00147                         friend inline lx_real operator -(const lx_real &) throw();
00148 
00149 
00150 // ----------------------- Output --------------------------------------------
00151 
00152 //friend inline std::ostream& operator << (std::ostream& s, const lx_real& a) 
00153 //    throw(); // A value a of type lx_real is written to the output channel.
00154 // The above operator is declared and defined in
00155 // lx_interval.hpp (outside the class lx_interval) , lx_interval.inl;
00157 friend std::string & operator << (std::string &s, const lx_real& a) 
00158                                         throw();
00159 // The value of a variable a of type lx_real is copied to a string s.
00160 // s has the form:  {2**(ex)*li};  ex is the exponent to base 2.
00161 
00162 }; // end of class lx_real
00163 
00164 // -------------------------------------------------------------
00165 // ------- friend functions declared in class lx_real: ---------
00166 // -------------------------------------------------------------
00167 
00168 inline int StagPrec(const lx_real&) throw();
00169 inline real expo(const lx_real&) throw();
00170 inline int sign(const lx_real&) throw();
00171 inline l_real lr_part(const lx_real&) throw();
00172 inline lx_real abs(const lx_real&) throw();
00173 inline lx_real adjust(const lx_real &) throw();
00174 inline void times2pown_neg(lx_real&, const real&) throw();
00175 
00176        void scale_up  (lx_real&)   throw();
00177                  void scale_down(lx_real &a) throw();
00178 
00179                  inline bool eq_zero (const lx_real &a) throw(); // a = 0;
00180                  inline bool gr_zero (const lx_real &a) throw(); // a > 0;
00181                  inline bool ge_zero (const lx_real &a) throw(); // a >=0;
00182                  inline bool sm_zero (const lx_real &a) throw(); // a < 0;
00183                  inline bool se_zero (const lx_real &a) throw(); // a <=0;
00184 
00185                  inline void times2pown(lx_real &, const real &) throw();
00186                  inline bool operator ! (const lx_real &) throw();
00187 
00188                  inline lx_real operator -(const lx_real &) throw();
00189 
00190 // -------------------------- Input ------------------------------------
00191 
00193                  string & operator >> (string &s, lx_real &a) throw();
00195                  void operator >> (const string &s, lx_real &a) throw();
00197                  void operator >> (const char *s, lx_real&) throw();
00199                  std::istream & operator >> (std::istream &s, lx_real &a) throw();
00200 
00201 // -------------------------- Output ------------------------------------
00202 
00203    std::string & operator << (std::string &s, const lx_real& a) 
00204                                         throw();
00205 //inline std::ostream& operator << (std::ostream& s, const lx_real& a) 
00206 //    throw(); // A value a of type lx_real is written to the output channel.
00208                  inline std::string & operator << (std::string &s, const lx_real& a) 
00209                                  throw();
00210 // The value of a variable a of type lx_real is copied to a string s.
00211 // s has the form:  {2**(ex),lr}
00212 
00213 // ---- function declarations outside the class lx_real ----
00214 
00216                  inline real add_real(const real &a, const real &b) throw();
00217 
00219                  inline real sub_real(const real &a, const real &b) throw();
00220 
00222                  lx_real upper_bnd(const lx_real& x) throw();
00223 
00225                  lx_real lower_bnd(const lx_real& x) throw();
00227                  inline lx_real operator +(const lx_real &) throw();
00228 
00230                  lx_real operator + (const lx_real &, const lx_real &) throw();
00232                  inline lx_real operator + (const lx_real&, const l_real &) throw();
00234                  inline lx_real operator + (const l_real&, const lx_real &) throw();
00236                  inline lx_real operator + (const lx_real&, const real &) throw();
00238                  inline lx_real operator + (const real&, const lx_real &) throw();
00239 
00241                  inline lx_real & operator +=(lx_real &, const lx_real &) throw();
00243                  inline lx_real & operator +=(lx_real &, const l_real &) throw();
00245                  inline lx_real & operator +=(lx_real &, const real &) throw();
00246 
00248                  inline lx_real operator - (const lx_real &, const lx_real &) throw();
00250                  inline lx_real operator - (const lx_real &, const l_real &) throw();
00252                  inline lx_real operator - (const l_real &, const lx_real &) throw();
00254                  inline lx_real operator - (const lx_real &, const real &) throw();
00256                  inline lx_real operator - (const real &, const lx_real &) throw();
00257 
00259                  inline lx_real & operator -=(lx_real &, const lx_real &) throw();
00261                  inline lx_real & operator -=(lx_real &, const l_real &) throw();
00263                  inline lx_real & operator -=(lx_real &, const real &) throw();
00264 
00266                  lx_real operator * (const lx_real &, const lx_real &) throw();
00268                  inline lx_real operator * (const lx_real&, const l_real &) throw();
00270                  inline lx_real operator * (const l_real&, const lx_real &) throw();
00272                  inline lx_real operator * (const lx_real&, const real &) throw();
00274                  inline lx_real operator * (const real&, const lx_real &) throw();
00275 
00277                  inline lx_real & operator *=(lx_real &, const lx_real &) throw();
00279                  inline lx_real & operator *=(lx_real &, const l_real &) throw();
00281                  inline lx_real & operator *=(lx_real &, const real &) throw();
00282 
00284                  lx_real operator / (const lx_real &, const lx_real &) throw(DIV_BY_ZERO);
00286                  inline lx_real operator / (const lx_real&, const l_real &) throw();
00288                  inline lx_real operator / (const l_real&, const lx_real &) throw();
00290                  inline lx_real operator / (const lx_real&, const real &) throw();
00292                  inline lx_real operator / (const real&, const lx_real &) throw();
00293 
00295                  inline lx_real & operator /=(lx_real &, const lx_real &) throw();
00297                  inline lx_real & operator /=(lx_real &, const l_real &) throw();
00299                  inline lx_real & operator /=(lx_real &, const real &) throw();
00300 
00302                  bool operator == (const lx_real &, const lx_real &) throw();
00304                  inline bool operator == (const lx_real &, const l_real &) throw();
00306                  inline bool operator == (const l_real &, const lx_real &) throw();
00308                  inline bool operator == (const lx_real &, const real &)   throw();
00310                  inline bool operator == (const real &,   const lx_real &) throw();
00311 
00313                  inline bool operator != (const lx_real &, const lx_real &) throw();
00315                  inline bool operator != (const lx_real &, const l_real &) throw();
00317                  inline bool operator != (const l_real &, const lx_real &) throw();
00319                  inline bool operator != (const lx_real &, const real &)   throw();
00321                  inline bool operator != (const real &,   const lx_real &) throw();
00322 
00324                  bool operator > (const lx_real &, const lx_real &) throw();
00325 
00327                  inline bool operator <= (const lx_real &, const lx_real &) throw();
00329                  inline bool operator <  (const lx_real &, const lx_real &) throw();
00331                  inline bool operator >= (const lx_real &, const lx_real &) throw();
00332 
00334                  inline bool operator >  (const real &, const lx_real &) throw();
00336                  inline bool operator <= (const real &, const lx_real &) throw();
00338                  inline bool operator <  (const real &, const lx_real &) throw();
00340                  inline bool operator >= (const real &, const lx_real &) throw();
00341 
00343                  inline bool operator >  (const lx_real &, const real &) throw();
00345                  inline bool operator <= (const lx_real &, const real &) throw();
00347                  inline bool operator <  (const lx_real &, const real &) throw();
00349                  inline bool operator >= (const lx_real &, const real &) throw();
00350 
00352                  inline bool operator >  (const l_real &, const lx_real &) throw();
00354                  inline bool operator <= (const l_real &, const lx_real &) throw();
00356                  inline bool operator <  (const l_real &, const lx_real &) throw();
00358                  inline bool operator >= (const l_real &, const lx_real &) throw();
00359 
00361                  inline bool operator >  (const lx_real &, const l_real &) throw();
00363                  inline bool operator <= (const lx_real &, const l_real &) throw();
00365                  inline bool operator <  (const lx_real &, const l_real &) throw();
00367                  inline bool operator >= (const lx_real &, const l_real &) throw();
00368 
00370                  inline lx_real max(const lx_real&, const lx_real&);
00372                  inline lx_real min(const lx_real&, const lx_real&);
00373 
00375                  inline real cutint(const real& x) throw();
00376 
00377 // ------------------- lx_real Constants ------------------------------------
00378 
00380                  lx_real Pi_lx_real() throw(); // pi
00382                  lx_real Pip2_lx_real() throw(); // pi^2
00384                  lx_real Pi2_lx_real() throw(); // 2*pi
00386                  lx_real Pid4_lx_real() throw(); // Pi/4
00388                  lx_real Pid2_lx_real() throw(); // Pi/2
00390                  lx_real Ln2_lx_real() throw();
00392                  lx_real Ln10_lx_real() throw();
00394                  lx_real Ln10r_lx_real() throw();
00396                  lx_real Pir_lx_real() throw();
00398                  lx_real Pi2r_lx_real() throw();  // 1/(2*pi)
00400                  lx_real SqrtPi_lx_real() throw();
00402                  lx_real Sqrt2Pi_lx_real() throw();
00404                  lx_real Sqrt2_lx_real() throw();
00406                  lx_real Sqrt2r_lx_real() throw();
00408                  lx_real Sqrt3_lx_real() throw();
00410                  lx_real Sqrt3r_lx_real() throw();
00412                  lx_real Sqrt3d2_lx_real() throw();
00414                  lx_real Ln2r_lx_real() throw();
00416                  lx_real Pid3_lx_real() throw();
00418                  lx_real SqrtPir_lx_real() throw();
00420                  lx_real Sqrt2Pir_lx_real() throw();
00422                  lx_real LnPi_lx_real() throw();
00424                  lx_real Ln2Pi_lx_real() throw();
00426                  lx_real E_lx_real() throw();
00428                  lx_real Ep2_lx_real() throw();
00430                  lx_real Ep2r_lx_real() throw();
00432                  lx_real Er_lx_real() throw();
00434                  lx_real EpPi_lx_real() throw();
00436                  lx_real EpPid2_lx_real() throw();
00438                  lx_real EpPid4_lx_real() throw();
00440                  lx_real Ep2Pi_lx_real() throw();
00442                  lx_real EulerGamma_lx_real() throw();
00444                  lx_real Catalan_lx_real() throw();
00446                  lx_real sqrt5_lx_real() throw();
00448                  lx_real sqrt7_lx_real() throw();
00450                  lx_real One_m_lx_real() throw();
00452                  lx_real One_p_lx_real() throw();
00453 
00454 // **********************************************************************
00455 // **********************************************************************
00456 
00457 
00458 
00459 // ------------------- Array of constants ----------------------
00460 
00461 // const real ln_N[180];
00462 // ln_N[0] = ln(2); ln_N[1] = ln(3); ... ln_N[179] = ln(181);
00463 
00464 const real ln_N[180] =
00465 {6243314768165359.0 / 9007199254740992.0,
00466    4947709893870347.0 / 4503599627370496.0,
00467         6243314768165359.0 / 4503599627370496.0,
00468    7248263982714163.0 / 4503599627370496.0,
00469         8069367277953026.0 / 4503599627370496.0,
00470    8763600222181975.0 / 4503599627370496.0,
00471         4682486076124019.0 / 2251799813685248.0,
00472    4947709893870347.0 / 2251799813685248.0,
00473         5184960683398422.0 / 2251799813685248.0,
00474    5399580128524108.0 / 2251799813685248.0,
00475    5595512331017853.0 / 2251799813685248.0,
00476    5775752485243985.0 / 2251799813685248.0,
00477    5942628803132327.0 / 2251799813685248.0,
00478    6097986938292255.0 / 2251799813685248.0,
00479    6243314768165359.0 / 2251799813685248.0,
00480    6379829280276346.0 / 2251799813685248.0,
00481    6508538585911686.0 / 2251799813685248.0,
00482    6630287144694572.0 / 2251799813685248.0,
00483    6745789375439761.0 / 2251799813685248.0,
00484    6855655058026161.0 / 2251799813685248.0,
00485    6960408820565448.0 / 2251799813685248.0,
00486    7060505291240432.0 / 2251799813685248.0,
00487    7156341023059193.0 / 2251799813685248.0,
00488    7248263982714163.0 / 2251799813685248.0,
00489    7336581177285325.0 / 2251799813685248.0,
00490    7421564840805520.0 / 2251799813685248.0,
00491    7503457495173667.0 / 2251799813685248.0,
00492    7582476122586655.0 / 2251799813685248.0,
00493    7658815630333595.0 / 2251799813685248.0,
00494    7732651747257178.0 / 2251799813685248.0,
00495    7804143460206699.0 / 2251799813685248.0,
00496    7873435075459281.0 / 2251799813685248.0,
00497    7940657972317686.0 / 2251799813685248.0,
00498    8005932102448069.0 / 2251799813685248.0,
00499    8069367277953026.0 / 2251799813685248.0,
00500    8131064282924989.0 / 2251799813685248.0,
00501    8191115836735912.0 / 2251799813685248.0,
00502    8249607432179158.0 / 2251799813685248.0,
00503    8306618067481101.0 / 2251799813685248.0,
00504    8362220887911502.0 / 2251799813685248.0,
00505    8416483750067501.0 / 2251799813685248.0,
00506    8469469719751697.0 / 2251799813685248.0,
00507    8521237512606787.0 / 2251799813685248.0,
00508    8571841885227428.0 / 2251799813685248.0,
00509    8621333983281772.0 / 2251799813685248.0,
00510    8669761652191414.0 / 2251799813685248.0,
00511    8717169715100533.0 / 2251799813685248.0,
00512    8763600222181975.0 / 2251799813685248.0,
00513    8809092674755503.0 / 2251799813685248.0,
00514    8853684227211519.0 / 2251799813685248.0,
00515    8897409869326665.0 / 2251799813685248.0,
00516    8940302591212715.0 / 2251799813685248.0,
00517    8982393532846860.0 / 2251799813685248.0,
00518    4511856059940595.0 / 1125899906842624.0,
00519         4532143093607504.0 / 1125899906842624.0,
00520    4552071045814873.0 / 1125899906842624.0,
00521         4571652407313997.0 / 1125899906842624.0,
00522  4590899028240761.0 / 1125899906842624.0,
00523  4609822161187467.0 / 1125899906842624.0,
00524  4628432500714509.0 / 1125899906842624.0,
00525  4646740219649259.0 / 1125899906842624.0,
00526  4664755002480667.0 / 1125899906842624.0,
00527  4682486076124019.0 / 1125899906842624.0,
00528  4699942238300533.0 / 1125899906842624.0,
00529  4717131883750310.0 / 1125899906842624.0,
00530  4734063028474157.0 / 1125899906842624.0,
00531  4750743332179513.0 / 1125899906842624.0,
00532  4767180119087803.0 / 1125899906842624.0,
00533  4783380397244705.0 / 1125899906842624.0,
00534  4799350876460745.0 / 1125899906842624.0,
00535  4815097984997183.0 / 1125899906842624.0,
00536  4830627885101030.0 / 1125899906842624.0,
00537  4845946487483165.0 / 1125899906842624.0,
00538  4861059464824668.0 / 1125899906842624.0,
00539  4875972264388626.0 / 1125899906842624.0,
00540  4890690119807548.0 / 1125899906842624.0,
00541  4905218062110249.0 / 1125899906842624.0,
00542  4919560930046323.0 / 1125899906842624.0,
00543  4933723379761220.0 / 1125899906842624.0,
00544  4947709893870347.0 / 1125899906842624.0,
00545  4961524789976421.0 / 1125899906842624.0,
00546  4975172228670594.0 / 1125899906842624.0,
00547  4988656221054420.0 / 1125899906842624.0,
00548  5001980635816714.0 / 1125899906842624.0,
00549  5015149205896518.0 / 1125899906842624.0,
00550  5028165534760914.0 / 1125899906842624.0,
00551  5041033102324064.0 / 1125899906842624.0,
00552  5053755270531830.0 / 1125899906842624.0,
00553  5066335288634384.0 / 1125899906842624.0,
00554  5078776298167486.0 / 1125899906842624.0,
00555  5091081337661556.0 / 1125899906842624.0,
00556  5103253347096176.0 / 1125899906842624.0,
00557  5115295172116377.0 / 1125899906842624.0,
00558  5127209568025827.0 / 1125899906842624.0,
00559  5138999203570936.0 / 1125899906842624.0,
00560  5150666664528888.0 / 1125899906842624.0,
00561  5162214457111658.0 / 1125899906842624.0,
00562  5173645011197227.0 / 1125899906842624.0,
00563  5184960683398422.0 / 1125899906842624.0,
00564  5196163759979057.0 / 1125899906842624.0,
00565  5207256459626429.0 / 1125899906842624.0,
00566  5218240936088556.0 / 1125899906842624.0,
00567  5229119280684002.0 / 1125899906842624.0,
00568  5239893524691621.0 / 1125899906842624.0,
00569  5250565641627027.0 / 1125899906842624.0,
00570  5261137549412187.0 / 1125899906842624.0,
00571  5271611112444100.0 / 1125899906842624.0,
00572  5281988143568134.0 / 1125899906842624.0,
00573  5292270405961265.0 / 1125899906842624.0,
00574  5302459614930081.0 / 1125899906842624.0,
00575  5312557439628173.0 / 1125899906842624.0,
00576  5322565504697180.0 / 1125899906842624.0,
00577  5332485391835543.0 / 1125899906842624.0,
00578  5342318641298757.0 / 1125899906842624.0,
00579  5352066753334667.0 / 1125899906842624.0,
00580  5361731189557166.0 / 1125899906842624.0,
00581  5371313374261431.0 / 1125899906842624.0,
00582  5380814695683667.0 / 1125899906842624.0,
00583  5390236507208137.0 / 1125899906842624.0,
00584  5399580128524108.0 / 1125899906842624.0,
00585  5408846846735179.0 / 1125899906842624.0,
00586  5418037917423337.0 / 1125899906842624.0,
00587  5427154565669929.0 / 1125899906842624.0,
00588  5436197987035623.0 / 1125899906842624.0,
00589  5445169348501337.0 / 1125899906842624.0,
00590  5454069789371970.0 / 1125899906842624.0,
00591  5462900422144689.0 / 1125899906842624.0,
00592  5471662333343435.0 / 1125899906842624.0,
00593  5480356584321203.0 / 1125899906842624.0,
00594  5488984212031586.0 / 1125899906842624.0,
00595  5497546229770980.0 / 1125899906842624.0,
00596  5506043627892780.0 / 1125899906842624.0,
00597  5514477374494827.0 / 1125899906842624.0,
00598  5522848416081301.0 / 1125899906842624.0,
00599  5531157678200183.0 / 1125899906842624.0,
00600  5539406066057373.0 / 1125899906842624.0,
00601  5547594465108473.0 / 1125899906842624.0,
00602  5555723741629202.0 / 1125899906842624.0,
00603  5563794743265374.0 / 1125899906842624.0,
00604  5571808299563294.0 / 1125899906842624.0,
00605  5579765222481415.0 / 1125899906842624.0,
00606  5587666306884046.0 / 1125899906842624.0,
00607  5595512331017853.0 / 1125899906842624.0,
00608  5603304056971868.0 / 1125899906842624.0,
00609  5611042231121700.0 / 1125899906842624.0,
00610  5618727584558574.0 / 1125899906842624.0,
00611  5626360833503834.0 / 1125899906842624.0,
00612  5633942679709485.0 / 1125899906842624.0,
00613  5641473810845338.0 / 1125899906842624.0,
00614  5648954900873299.0 / 1125899906842624.0,
00615  5656386610409296.0 / 1125899906842624.0,
00616  5663769587073346.0 / 1125899906842624.0,
00617  5671104465828218.0 / 1125899906842624.0,
00618  5678391869307130.0 / 1125899906842624.0,
00619  5685632408130919.0 / 1125899906842624.0,
00620  5692826681215068.0 / 1125899906842624.0,
00621  5699975276066993.0 / 1125899906842624.0,
00622  5707078769073944.0 / 1125899906842624.0,
00623  5714137725781890.0 / 1125899906842624.0,
00624  5721152701165710.0 / 1125899906842624.0,
00625  5728124239891016.0 / 1125899906842624.0,
00626  5735052876567931.0 / 1125899906842624.0,
00627  5741939135997091.0 / 1125899906842624.0,
00628  5748783533408181.0 / 1125899906842624.0,
00629  5755586574691264.0 / 1125899906842624.0,
00630  5762348756621151.0 / 1125899906842624.0,
00631  5769070567075090.0 / 1125899906842624.0,
00632  5775752485243985.0 / 1125899906842624.0,
00633  5782394981837384.0 / 1125899906842624.0,
00634  5788998519282460.0 / 1125899906842624.0,
00635  5795563551917188.0 / 1125899906842624.0,
00636  5802090526177927.0 / 1125899906842624.0,
00637  5808579880781584.0 / 1125899906842624.0,
00638  5815032046902576.0 / 1125899906842624.0,
00639  5821447448344733.0 / 1125899906842624.0,
00640  5827826501708347.0 / 1125899906842624.0,
00641  5834169616552500.0 / 1125899906842624.0,
00642  5840477195552856.0 / 1125899906842624.0,
00643  5846749634655054.0 / 1125899906842624.0,
00644  5852987323223851.0 / 1125899906842624.0};
00645 
00646 // ------------------------------------------------------------------------
00647 // --------------- lx_real elementary functions ---------------------------
00648 // ------------------------------------------------------------------------
00649 
00651  lx_real sqrt(const lx_real&) throw();
00653  lx_real sqr(const lx_real&) throw();
00655  lx_real ln(const lx_real &) throw();
00657  lx_real log2(const lx_real &) throw();
00659  lx_real log10(const lx_real &) throw();
00661  lx_real lnp1(const lx_real &) throw();
00663  lx_real exp(const lx_real &) throw();
00665  lx_real exp2(const lx_real &) throw(); // 2^x
00667  lx_real exp10(const lx_real &) throw(); // 10^x
00669  lx_real expm1(const lx_real &x) throw(); 
00671  lx_real power(const lx_real &, const real &) throw();
00673  lx_real pow(const lx_real &, const lx_real &) throw();
00675  lx_real xp1_pow_y(const lx_real &, const lx_real &) throw(); 
00677  lx_real sin(const lx_real &)throw();
00679  lx_real sin_n(const lx_real &x, const real& n) throw();
00681  lx_real cos(const lx_real &) throw();
00683  lx_real cos_n(const lx_real &x, const real& n) throw();
00685  lx_real tan(const lx_real &) throw();
00687  lx_real cot(const lx_real &) throw();
00689  lx_real sqrt1px2(const lx_real &) throw();
00691  lx_real atan(const lx_real &) throw();
00693  lx_real sqrt1mx2(const lx_real &) throw();
00695  lx_real sqrtx2m1(const lx_real &) throw();
00697  lx_real asin(const lx_real & ) throw();
00699  lx_real acos(const lx_real &) throw();
00701  lx_real acot(const lx_real &) throw();
00703  lx_real sinh(const lx_real &) throw();
00705  lx_real cosh(const lx_real &) throw();
00707  lx_real tanh(const lx_real &) throw();
00709  lx_real coth(const lx_real &) throw();
00711  lx_real sqrtp1m1(const lx_real &) throw();
00713  lx_real asinh(const lx_real &) throw();
00715  lx_real acosh(const lx_real &) throw();
00717  lx_real acoshp1(const lx_real &) throw();
00719  lx_real atanh(const lx_real &) throw();
00721  lx_real atanh1m(const lx_real &) throw();
00723  lx_real atanhm1p(const lx_real &) throw();
00725  lx_real acoth(const lx_real &) throw();
00727  lx_real acothp1(const lx_real &) throw();
00729  lx_real acothm1m(const lx_real &) throw();
00731  lx_real sqrtx2y2(const lx_real &, const lx_real &) throw();
00733  lx_real ln_sqrtx2y2(const lx_real &, const lx_real &) throw();
00735  lx_real sqrt(const lx_real &, int) throw();
00736 
00737 } // end namespace cxsc
00738 
00739 #include "lx_real.inl"
00740 
00741 #endif // _CXSC_LX_REAL_HPP_INCLUDED