fastNumber.cpp

Go to the documentation of this file.
00001 
00002 /*
00003 #ifdef INTEL
00004 
00005 #include "fastNumber.h
00006 
00007 
00008 
00009 
00010 template <int CHAR,class TScalar> 
00011 const number_eps0<CHAR,TScalar> number_eps0<CHAR,TScalar>::Zero(0);
00012 
00013 template <int CHAR,class TScalar> 
00014 const number_eps0<CHAR,TScalar> number_eps0<CHAR,TScalar>::One(1);
00015 
00016 template <int CHAR,class TScalar> 
00017 const int number_eps0<CHAR,TScalar>::bitsize(needbits<CHAR>::value);
00018 
00019 template <int CHAR>
00020 const number_eps1<CHAR> number_eps1<CHAR>::Zero=number_eps1<CHAR>(0);
00021 
00022 template <int CHAR>
00023 const number_eps1<CHAR> number_eps1<CHAR>::One=number_eps1<CHAR>(1);
00024 */
00025 
00026 
00027 
00028 
00029 
00030 
00031 
00032 //-----------------------------------------------------number_eps1-----------------------------------
00033 
00034 
00035         template <int CHAR, typename TScalar, typename TScalarPair>
00036         const number_eps1<CHAR, TScalar, TScalarPair>
00037         number_eps1<CHAR, TScalar, TScalarPair>::Zero = number_eps1<CHAR, TScalar, TScalarPair>(0);
00038         
00039         template <int CHAR, typename TScalar, typename TScalarPair>
00040         const number_eps1<CHAR, TScalar, TScalarPair> 
00041         number_eps1<CHAR, TScalar, TScalarPair>::One = number_eps1<CHAR, TScalar, TScalarPair>(1);
00042 
00043 
00044 
00045 
00046 //------------------------------------------ Constructors -------------------------------
00047 
00048 
00049         template <int CHAR, typename TScalar, typename TScalarPair>
00050         inline number_eps1<CHAR, TScalar, TScalarPair>::number_eps1() : epsx(0) {       };
00051 
00052 
00053 
00061         template <int CHAR, typename TScalar, typename TScalarPair>
00062         inline number_eps1<CHAR, TScalar, TScalarPair>::
00063 	number_eps1(int epsPrec, std::string dummy)            :       epsx(0)
00064         {
00065 
00066                 if (epsPrec!=1)
00067                 {
00068                         std::cerr << " allowed epsPrecision is {  1 }" << std::endl;
00069                         throw(" allowed epsPrecision is   {  1 }");
00070                         //assert(epsPrec==1);
00071                 }
00072         }
00073 
00076         template <int CHAR, typename TScalar, typename TScalarPair>
00077          inline number_eps1<CHAR, TScalar, TScalarPair>::number_eps1 (TScalar x) :      epsx(x)
00078          {
00079                 #ifdef SAFE
00080                         //cerr << " <CHAR> "<<  CHAR << endl;
00081                         //cerr << "needbits<CHAR>::doubledvalue="<< needbits<CHAR>::doubledvalue << endl;
00082                         //cerr << "sizeof(TScalarPair)*8="<< sizeof(TScalarPair)*8 << endl;
00083                          assert (needbits<CHAR>::doubledvalue<sizeof(TScalarPair)*8);
00084                 #endif
00085          };
00086         
00091         template <int CHAR, typename TScalar, typename TScalarPair>
00092         inline number_eps1<CHAR, TScalar, TScalarPair>::
00093 	number_eps1 (const  number_eps1<CHAR, TScalar, TScalarPair> & z_x) :   epsx( z_x.epsx )
00094          {
00095                 #ifdef SAFE
00096                          assert (needbits<CHAR>::doubledvalue<sizeof(TScalarPair)*8);
00097                 #endif
00098          };
00099          
00101         template <int CHAR, typename TScalar, typename TScalarPair>
00102         inline number_eps1<CHAR, TScalar, TScalarPair>::
00103 	number_eps1 (TScalar x, TScalar eps):  epsx((eps << bitsize)|x)//:epsx(s),eps(t)
00104          {
00105                 #ifdef SAFE
00106                   // todo: sollte bereits waehrend des Compilevorgangs geprft werden
00107                          assert(fullbitsize<sizeof(TScalarPair)*8);
00108                 #endif
00109          };
00110 
00111         template <int CHAR, typename TScalar, typename TScalarPair>
00112         inline  short   number_eps1<CHAR, TScalar, TScalarPair>::getEpsDegree() const
00113                 {
00114                         if ( getEps()!=0 )
00115                                 return 1;
00116                         else if ( getX() !=0 ) 
00117                                 return 0;
00118                         else return -1;
00119                 }
00120 
00121 //------------------------------------------ Safety-------------------------------
00122 
00123 
00124         template <int CHAR, typename TScalar, typename TScalarPair>
00125         inline bool number_eps1<CHAR, TScalar, TScalarPair>::wellDefined(unsigned int characteristic)
00126                 {
00127 
00128                         std::cerr << "wellDefined: characteristic" << characteristic << std::endl;
00129                 return wellDefined();
00130         }
00131                 
00133         template         <int CHAR, typename TScalar, typename TScalarPair>
00134          inline bool number_eps1<CHAR, TScalar, TScalarPair>::wellDefined()
00135         {
00136                 assert(sizeof(long long)>sizeof(TScalar));      //otherwise the following test does not work
00137 
00139                 long long       test  = pow( 2, sizeof(TScalar)*8 )-1;
00140                 TScalar test2 = test;
00141                 test = test2;
00142 
00143                 if (test<0)
00144                 {
00145                         std::cerr << "TScalar is signed!" << std::endl;
00146                         assert( sizeof(TScalar)*8-1>=bitsize);
00147                 }
00148                 else
00149                 {
00150                         std::cerr << "TScalar is unsigned!" << std::endl;
00151                         assert( sizeof(TScalar)*8>=bitsize);
00152                 }
00153 
00154                 assert(sizeof(long long)>sizeof(TScalarPair));  //otherwise the following test does not work
00155 
00156                         test  = pow( 2, sizeof(TScalar)*8 )-1;
00157                         test2 = test;
00158                 test = test2;
00159 
00160                 if (test<0)
00161                 {
00162                         std::cerr << "TScalarPair is signed!" << std::endl;
00163                         assert( sizeof(TScalarPair)*8-1>=fullbitsize);
00164                         assert (needbits<CHAR>::doubledvalue<sizeof(TScalarPair)*8);
00165                 }
00166                 else
00167                 {
00168                         std::cerr << "TScalarPair is unsigned!" << std::endl;
00169                         assert( sizeof(TScalarPair)*8>=fullbitsize);
00170                         assert (needbits<CHAR>::doubledvalue<=sizeof(TScalarPair)*8);
00171                 }
00172                 return true;                    
00173         }
00174 
00175 //------------------------------------------ Data Access-------------------------------
00176 
00178         template <int CHAR, typename TScalar, typename TScalarPair>
00179 
00180         inline TScalar number_eps1<CHAR, TScalar, TScalarPair>::getX() const 
00181         {
00182                 return ( maskx&epsx );
00183         }
00184 
00186         template <int CHAR, typename TScalar, typename TScalarPair>
00187         inline TScalar          number_eps1<CHAR, TScalar, TScalarPair>::getEps() const
00188         {
00189                 #ifdef COUNT
00190                         bitwiseShift+=1;
00191                 #endif  
00192                 return ( epsx >> needbits<CHAR>::value );
00193         }
00194 
00195         
00197         template <int CHAR, typename TScalar, typename TScalarPair>
00198         inline void     number_eps1<CHAR, TScalar, TScalarPair>::setX(TScalar x)  
00199         {
00200                 #ifdef COUNT
00201                         bitwiseOR+=1;
00202                         bitwiseAND++;
00203                 #endif  
00204 
00205                 epsx = ( epsx & maskeps ) | x ; 
00206         }
00207 
00209         template <int CHAR, typename TScalar, typename TScalarPair>
00210         inline void     number_eps1<CHAR, TScalar, TScalarPair>::setEps(TScalar eps) 
00211         {
00212                 #ifdef COUNT
00213                         bitwiseOR+=1;
00214                         bitwiseShift+=1;
00215                         bitwiseAND++;
00216                 #endif  
00217                 epsx = (epsx & maskx) | (TScalarPair) (eps << needbits<CHAR>::value ); 
00218         }
00219  
00220         
00228         template <int CHAR, typename TScalar, typename TScalarPair>
00229         inline void     
00230         number_eps1<CHAR, TScalar, TScalarPair>::
00231 	setValue(  unsigned short _epsPrecision, TScalar val)
00232         {
00233                 if (_epsPrecision==0)
00234                         setX(val);
00235                 else if (_epsPrecision==1)
00236                         setEps(val);
00237                 else if ( val!=0 )
00238                         assert(true==false);
00239 
00240                         
00241         }
00242 
00243 //------------------------------------------ Operators-------------------------------
00244         
00245         template <int CHAR, typename TScalar, typename TScalarPair>
00246         inline  bool    number_eps1<CHAR, TScalar, TScalarPair>::isZero() const 
00247         {       
00248                 return (epsx==0);       
00249         };
00250         
00251         template <int CHAR, typename TScalar, typename TScalarPair>
00252         inline  bool    number_eps1<CHAR, TScalar, TScalarPair>::isNotZero() const      
00253         {
00254                 return (epsx!=0);       
00255         };
00256         
00257         template <int CHAR, typename TScalar, typename TScalarPair>
00258         inline bool 
00259         number_eps1<CHAR, TScalar, TScalarPair>::
00260 	nearlyEqual(const number_eps1<CHAR, TScalar, TScalarPair> & z) const
00261           {
00262                   return  ( getX()==z.getX() );
00263           };
00264 
00265         
00266         template <int CHAR, typename TScalar, typename TScalarPair>
00267         inline int  
00268         number_eps1<CHAR, TScalar, TScalarPair>::
00269 	operator==(const  number_eps1<CHAR, TScalar, TScalarPair> & z) const
00270         {
00271                 return epsx == z.epsx;
00272         }
00273         
00274         template <int CHAR, typename TScalar, typename TScalarPair>
00275         inline int  
00276         number_eps1<CHAR, TScalar, TScalarPair>::
00277 	operator!=(const  number_eps1<CHAR, TScalar, TScalarPair> & z) const
00278         {
00279                 return epsx != z.epsx;
00280         }
00281 
00282 
00283 
00284 //------------------------------------------ Index computing -------------------------------
00285 
00286         
00287         
00288         template <int CHAR, typename TScalar, typename TScalarPair>
00289         // inline size_t number_eps1<CHAR, TScalar, TScalarPair>::
00290         //getSingleIndex(const number_eps1<CHAR, TScalar, TScalarPair> b)
00291         inline size_t    
00292         number_eps1<CHAR, TScalar, TScalarPair>::getSingleIndex(const number_eps1<CHAR, TScalar, TScalarPair> b)
00293         {
00294                 #ifdef COUNT
00295                         bitwiseShift    += 1;
00296                         bitwiseOR       += 1;
00297                 #endif  
00298                 // warum mal zwei? -> weil epsx den eos0 und eps1-Anteil speichert!
00299                 return( (size_t) b.epsx);
00300         
00301         }
00302 
00303         
00304         template <int CHAR, typename TScalar, typename TScalarPair>
00305         inline size_t 
00306         number_eps1<CHAR, TScalar, TScalarPair>::getSingleIndexByRef(
00307                                                                         const number_eps1<CHAR, TScalar, TScalarPair> & b )
00308         {
00309                 #ifdef COUNT
00310                         bitwiseShift    += 1;
00311                         bitwiseOR       += 1;
00312                 #endif  
00313                 //  mal zwei weil epsx den eos0 und eps1-Anteil speichert!
00314                 return( (size_t) b.epsx);
00315         }
00316         
00317 
00318         template <int CHAR, typename TScalar, typename TScalarPair>
00319         inline size_t
00320         number_eps1<CHAR, TScalar, TScalarPair>::getPairIndex(
00321                                                                 const number_eps1<CHAR, TScalar, TScalarPair> a,
00322                                                                 const number_eps1<CHAR, TScalar, TScalarPair> b)
00323         {
00324                 #ifdef COUNT
00325                         bitwiseShift    += 1;
00326                         bitwiseOR       += 1;
00327                 #endif  
00328                 //  mal zwei, weil epsx den eps0 und eps1-Anteil speichert!
00329                 return( ((size_t)a.epsx<< (needbits<CHAR>::doubledvalue)) | (size_t)b.epsx );
00330         }
00331         
00332         
00333         template <int CHAR, typename TScalar, typename TScalarPair>
00334         inline size_t 
00335         number_eps1<CHAR, TScalar, TScalarPair>::getPairIndexByRef(
00336                                                                         const number_eps1<CHAR, TScalar, TScalarPair>& a,
00337                                                                         const number_eps1<CHAR, TScalar, TScalarPair>& b)
00338         {
00339                 #ifdef COUNT
00340                         bitwiseShift    += 1;
00341                         bitwiseOR       += 1;
00342                 #endif  
00343                 //  mal zwei, weil epsx den eps0 und eps1-Anteil speichert!
00344                 return( ((size_t)a.epsx<< (needbits<CHAR>::doubledvalue)) | (size_t) b.epsx );
00345         }
00346 
00347 
00348         template <int CHAR, typename TScalar, typename TScalarPair>
00349         inline size_t 
00350         number_eps1<CHAR, TScalar, TScalarPair>::
00351 	getSingleIndex(const number_eps1<CHAR, TScalar, TScalarPair> b,
00352                                                                                         const TScalar characteristic)
00353         {
00354 
00355                 #ifdef SAFE
00356                         assert(characteristic==CHAR);
00357                 #endif 
00358                 return number_eps1<CHAR, TScalar, TScalarPair>::getSingleIndex(b);
00359         }
00360 
00361 
00362         template <int CHAR, typename TScalar, typename TScalarPair>
00363         inline size_t 
00364         number_eps1<CHAR, TScalar, TScalarPair>::
00365 	getSingleIndexByRef(           const number_eps1<CHAR, TScalar, TScalarPair>& b,
00366                                                 const TScalar & characteristic)
00367         {
00368 
00369                 #ifdef SAFE
00370                         assert(characteristic==CHAR);
00371                 #endif 
00372                 return number_eps1<CHAR, TScalar, TScalarPair>::getSingleIndexByRef(b);
00373         }
00374 
00375 
00376         template <int CHAR, typename TScalar, typename TScalarPair>
00377         inline size_t 
00378         number_eps1<CHAR, TScalar, TScalarPair>::
00379 	getPairIndex(                  const number_eps1<CHAR, TScalar, TScalarPair> a, 
00380                                                 const number_eps1<CHAR, TScalar, TScalarPair> b, 
00381                                                 const TScalar                                   characteristic  )
00382         {
00383                 #ifdef SAFE
00384                         assert(characteristic==CHAR);
00385                 #endif 
00386                 return number_eps1<CHAR, TScalar, TScalarPair>::getPairIndex(a,b);
00387         }
00388 
00389 
00390         template <int CHAR, typename TScalar, typename TScalarPair>
00391         inline size_t 
00392         number_eps1<CHAR, TScalar, TScalarPair>::
00393 	getPairIndexByRef(const number_eps1<CHAR, TScalar, TScalarPair>        & a,
00394                                 const number_eps1<CHAR, TScalar, TScalarPair>   & b, 
00395                                 const TScalar                                           & characteristic        )
00396         {
00397                 #ifdef SAFE
00398                         assert(characteristic==CHAR);
00399                 #endif 
00400                 return number_eps1<CHAR, TScalar, TScalarPair>::getPairIndexByRef(a, b);
00401         }
00402 
00403 
00404 
00405 
00406         template <int CHAR, typename TScalar, typename TScalarPair>
00407         inline size_t   
00408         number_eps1<CHAR, TScalar, TScalarPair>::
00409 	getMaxSingleIndex(const TScalar characteristic)
00410         {
00411                 //#ifdef SAFE
00412                         assert(characteristic==CHAR);
00413                 //#endif 
00414 
00415                 number_eps1<CHAR, TScalar, TScalarPair> num (characteristic-1,characteristic-1);
00416 
00417                 return number_eps1<CHAR, TScalar, TScalarPair>::getSingleIndex(num);
00418                 //return nextpow2num<CHAR>::value*nextpow2num<CHAR>::value;
00419         }
00420 
00421         
00422         template <int CHAR, typename TScalar, typename TScalarPair>
00423         inline size_t   
00424         number_eps1<CHAR, TScalar, TScalarPair>::
00425 	getMaxPairIndex  (const TScalar characteristic)
00426         {
00427                 //#ifdef SAFE
00428                 if (characteristic!=CHAR)
00429                 {
00430                         std::cerr << "characteristic" << characteristic <<  std::endl;
00431                         std::cerr << "CHAR" << CHAR << std::endl;
00432                 }
00433                         assert(characteristic==CHAR);
00434                 //#endif 
00435                 number_eps1<CHAR, TScalar, TScalarPair> num1 (characteristic-1, characteristic-1);
00436                 number_eps1<CHAR, TScalar, TScalarPair> num2 (characteristic-1, characteristic-1);
00437         
00438                 return number_eps1<CHAR, TScalar, TScalarPair>::getPairIndex(num1, num2);
00439                 //return nextpow2num<CHAR>::value*nextpow2num<CHAR>::value*nextpow2num<CHAR>::value*nextpow2num<CHAR>::value;
00440         }
00441         
00442 //------------------------------------------ IO -------------------------------
00443 
00444         
00445         template <int CHAR, typename TScalar, typename TScalarPair>
00446         std::ostream &  
00447         operator<<(std::ostream & out, const number_eps1<CHAR, TScalar, TScalarPair>& z)
00448         {  
00449         
00450                 out << (int)z.getX() ;
00451                 if (z.getEps()!=0)
00452                 {
00453                         out << " +  ";
00454                         out << (int)z.getEps()  << "*eps " ;
00455                 }
00456                 return out;
00457         } ;
00458 
00459 
00460 
00461 
00462 
00463 
00464 
00465 
00466 
00467 
00468 
00469 
00470 
00471 
00472 
00473 
00474 
00475 
00476 
00477 
00478 
00479 
00480 
00481 
00482 
00483 
00484  //-----------------------------(number_eps0)--------------------------------------------
00485 
00486 
00487 
00488         template <int CHAR, class TScalar> 
00489         const number_eps0<CHAR, TScalar> 
00490         number_eps0<CHAR, TScalar>::Zero(0);
00491         
00492         
00493         template <int CHAR, class TScalar> 
00494         const number_eps0<CHAR, TScalar> 
00495         number_eps0<CHAR, TScalar>::One(1);
00496 
00497 
00498 
00499 
00500 //-----------------------------------Constructors-----------------------------------------------------
00501 
00502 
00503         template <int CHAR, class TScalar> 
00504         inline 
00505         number_eps0< CHAR, TScalar >::number_eps0() :x(0)
00506         {
00507                 //x=0;
00508         };
00509         
00514         template <int CHAR, class TScalar>  
00515         inline number_eps0< CHAR, TScalar >::number_eps0 (TScalar _x) :x(_x)
00516         {
00517         };
00518         
00519         
00520                 
00522         template <int CHAR, class TScalar> 
00523         inline 
00524         number_eps0< CHAR, TScalar >::number_eps0 (TScalar _x, TScalar eps):  x(_x)
00525         { 
00526         };
00527         
00528         
00536         template <int CHAR, class TScalar> 
00537         inline  
00538         number_eps0< CHAR, TScalar >::number_eps0(int epsPrec, std::string dummy):x(0)
00539         {
00540                 if (epsPrec!=0)
00541                 {
00542                         std::cerr << " allowed epsPrecision is { 0 }" << std::endl;
00543                         throw(" allowed epsPrecision is { 0 }");
00544                 }
00545                 //assert(epsPrec==0);
00546         }
00547 //--------------------------------------Safety-----------------------------------------------------
00548         
00549         
00550         template <int CHAR, class TScalar> 
00551         inline bool 
00552         number_eps0< CHAR, TScalar >::wellDefined()
00553         {
00554                 assert(sizeof(long long)>sizeof(TScalar));      //otherwise the following test does not work
00555         
00556                 long    test  = pow( 2, sizeof(TScalar)*8 )-1;
00557                 TScalar test2 = test;
00558                 test = test2;
00559         
00560                 if (test<0)
00561                 {
00562                         std::cerr << "TScalar is signed!" << std::endl;
00563                         assert( sizeof(TScalar)*8-1>=bitsize);
00564                 }
00565                 else
00566                 {
00567                         std::cerr << "TScalar is unsigned!" << std::endl;
00568                         assert( sizeof(TScalar)*8>=bitsize);
00569                 }
00570                 return true;
00571         }
00572         
00573         
00574         template <int CHAR, class TScalar> 
00575         inline  short   
00576         number_eps0< CHAR, TScalar >::getEpsDegree() const
00577         {
00578                 if ( getX() !=0 ) 
00579                         return 0;
00580                 else return -1;
00581         }
00582 
00583 //--------------------------------------Data Access------------------------------------------------------
00584         
00585         template <int CHAR, class TScalar> 
00586         inline TScalar  
00587         number_eps0< CHAR, TScalar >::getX()    const 
00588         {
00589                 return (x);     
00590         };
00591 
00592         template <int CHAR, class TScalar> 
00593         inline void 
00594         number_eps0< CHAR, TScalar >::setX(const TScalar _x)    
00595         {
00596                 x = _x; 
00597         };
00598 
00600         template <int CHAR, class TScalar> 
00601         inline TScalar  
00602         number_eps0< CHAR, TScalar >::getEps()  const 
00603         {       
00604                   return 0; 
00605         }       
00606 
00607 
00608         template <int CHAR, class TScalar> 
00609         inline void     
00610         number_eps0< CHAR, TScalar >::setEps(const TScalar eps)         const 
00611         {
00612                  if (eps!=0)    
00613                         assert(true==false);    
00614         };
00615 
00616 
00617         template <int CHAR, class TScalar> 
00618         inline int              
00619         number_eps0< CHAR, TScalar >::getValue( unsigned short _epsExp) const
00620         {
00621                 if(_epsExp==0) 
00622                         return x; 
00623                 return 0;       
00624         };
00625 
00626 
00635         template <int CHAR, class TScalar> 
00636         inline void number_eps0< CHAR, TScalar >::setValue( unsigned short _epsExponent, TScalar coeff)
00637         {
00638                 if (_epsExponent==0)
00639                         x = coeff;
00640                 else  if ( coeff!=0 )
00641                         assert(true==false);
00642         }
00643         
00644 
00645 
00646 //------------------------------------ Index Computation ---------------------------------------------------
00647         
00648         template <int CHAR, class TScalar> 
00649         inline size_t   
00650         number_eps0< CHAR, TScalar >::getSingleIndex(const number_eps0< CHAR, TScalar >  b)  
00651         {
00652                 return( (size_t)b.x );
00653         }
00654         
00655         
00656         template <int CHAR, class TScalar> 
00657         inline  size_t  
00658         number_eps0< CHAR, TScalar >::getSingleIndexByRef(const number_eps0< CHAR, TScalar > & b)  
00659         {
00660                 return( (size_t)b.x );
00661         }
00662         
00663         template <int CHAR, class TScalar> 
00664         inline  size_t  
00665         number_eps0< CHAR, TScalar >::getPairIndex(const number_eps0< CHAR, TScalar >  a, 
00666                                                                                         const number_eps0< CHAR, TScalar > b)  
00667         {
00668                 #ifdef SAFE
00669                         size_t res = a.x;
00670                         res = ( (res<<bitsize) | b.x );
00671                         assert( res==( ((size_t)a.x<< bitsize) | b.x) );
00672                 #endif
00673                 return( ((size_t)a.x<< needbits<CHAR>::value) | (size_t)b.x );
00674         }
00675         
00676         
00677         template <int CHAR,class TScalar> 
00678         inline  size_t  
00679         number_eps0< CHAR, TScalar >::getPairIndexByRef(const number_eps0< CHAR, TScalar > & a, 
00680                                                                         const number_eps0< CHAR, TScalar > & b)  
00681         {
00682                 #ifdef SAFE
00683                         size_t res = a.x;
00684                         res = ( (res<<bitsize) | b.x );
00685                         assert( res==( ((size_t)a.x<<bitsize) | b.x ) );
00686                 #endif
00687                 return( ( (size_t)a.x<< needbits<CHAR>::value ) | (size_t)b.x );
00688         }
00689         
00690         
00691         template <int CHAR,class TScalar> 
00692         inline size_t 
00693         number_eps0< CHAR, TScalar >::getSingleIndex    (const number_eps0< CHAR, TScalar > b,
00694                                                                         const TScalar                   characteristic)
00695         {
00696                 return getSingleIndex(b);
00697         }
00698         
00699         
00700         template <int CHAR,class TScalar> 
00701         inline size_t   
00702         number_eps0< CHAR, TScalar >::getSingleIndexByRef(const number_eps0< CHAR, TScalar > & b, 
00703                                                                         const TScalar                   & characteristic)
00704         {
00705                 return getSingleIndexByRef(b);
00706         }
00707         
00708         
00709         template <int CHAR, class TScalar> 
00710         inline size_t 
00711         number_eps0< CHAR, TScalar >::getPairIndex(const number_eps0< CHAR, TScalar > a, 
00712                                                                 const number_eps0< CHAR, TScalar > b, 
00713                                                                 const TScalar           characteristic)
00714         {
00715                 return getPairIndex(a,b);
00716         }
00717         
00718         
00719         template <int CHAR, class TScalar> 
00720         inline size_t   
00721         number_eps0< CHAR, TScalar >::getPairIndexByRef( const number_eps0< CHAR, TScalar > & a,
00722                                                                         const number_eps0< CHAR, TScalar > & b, 
00723                                                                         const TScalar                           & characteristic)
00724         {
00725                 return getPairIndexByRef(a,b);
00726         }
00727         
00728         
00729         template <int CHAR, class TScalar> 
00730         inline size_t   
00731         number_eps0< CHAR, TScalar >::getMaxSingleIndex(const TScalar characteristic)
00732         {
00733                 return( (size_t)(characteristic-1) );
00734         }
00735         
00736         
00737         template <int CHAR, class TScalar> 
00738         inline size_t   
00739         number_eps0< CHAR, TScalar >::getMaxPairIndex  (const TScalar characteristic)
00740         {
00741                 return  ( ( (size_t)(characteristic-1)<<bitsize) | (size_t)(characteristic-1) );
00742         }
00743 
00744 //----------------------- Operators ---------------------------------------------------
00745 
00746         template <int CHAR, class TScalar> 
00747         inline  bool    
00748         number_eps0< CHAR, TScalar >::isZero()    const         
00749         {
00750                 return ( x==0 );     
00751         };
00752 
00753                 
00754         template <int CHAR, class TScalar> 
00755         inline  bool    
00756         number_eps0< CHAR, TScalar >::isNotZero() const                 
00757         {
00758                 return ( x!=0 );     
00759         };
00760 
00762         template <int CHAR, class TScalar> 
00763         inline bool 
00764         number_eps0< CHAR, TScalar >::nearlyEqual(const number_eps0 z)  const 
00765         {
00766                 return ( x == z.x );    
00767         };
00768 
00769 
00770         template <int CHAR, class TScalar> 
00771         inline int      
00772         number_eps0< CHAR, TScalar >::operator==(const  number_eps0 & z)        const   
00773         {       
00774                 return ( x == z.x );    
00775         }
00776 
00777 
00778         template <int CHAR, class TScalar> 
00779         inline int      
00780         number_eps0< CHAR, TScalar >::operator!=(const  number_eps0 & z)        const   
00781         {
00782                 return ( x != z.x );    
00783         }
00784 
00785 //----------------------- IO (number_eps0) ---------------------------------------------------
00786 
00787 
00788         template <int CHAR,class TScalar> 
00789         std::ostream &  
00790         operator<<(std::ostream & out, const number_eps0<CHAR, TScalar>& z)
00791         {  
00792         
00793                 out << (int)z.getX() ;
00794                 if (z.getEps()!=0)
00795                 {
00796                         out << " +  ";
00797                         out << (int)z.getEps()  << "*eps " ;
00798                 }
00799                 return out;
00800         } ;
00801 
00802 
00803 
00804 
00805 /*
00806 
00807 #endif // ifdef INTEL
00808 
00809 */
Generated on Tue Nov 23 13:10:51 2010 for centerfocus by  doxygen 1.6.3