proj home

Files   Classes   Functions   Hierarchy  

mathfunc.h

Go to the documentation of this file.
00001 #ifndef MATHFUNC_H
00002 #define MATHFUNC_H
00003 
00004 
00005 #include <cmath>
00006 #include <complex>
00007 using namespace std;
00008 
00009 #include <rpn.h>
00010 
00011 
00012 
00013 
00014 
00015 
00016 class rpnfcos: public rpnfunction
00017 {
00018 public:
00019 
00020   string const name() const
00021     { return string("cos"); }
00022 
00023   void visit(deque<rpnbase*>& ds,rpnreal& n) 
00024     { n.num = cos(n.num); }
00025   void visit(deque<rpnbase*>& ds,rpncomplex& n)
00026     { n.num = cos(n.num); }
00027 
00028   rpnfcos() {}
00029   rpnfcos(deque<rpnbase*>& ds, bool const evaluate=true)
00030     {  
00031       if (evaluate)
00032         eval(ds);
00033       else
00034         ds.push_front(this);
00035     }
00036   ~rpnfcos() {} 
00037   rpnbase* copy() const 
00038     { return new rpnfcos(); } 
00039 
00040 };
00041 
00042 
00043 class rpnfsin: public rpnfunction
00044 {
00045 public:
00046 
00047   string const name() const
00048     { return string("sin"); }
00049 
00050   void visit(deque<rpnbase*>& ds,rpnreal& n) 
00051     { n.num = sin(n.num); }
00052   void visit(deque<rpnbase*>& ds,rpncomplex& n)
00053     { n.num = sin(n.num); }
00054 
00055   rpnfsin() {}
00056   rpnfsin(deque<rpnbase*>& ds, bool const evaluate=true)
00057     {  
00058       if (evaluate)
00059         eval(ds);
00060       else
00061         ds.push_front(this);
00062     }
00063   ~rpnfsin() {} 
00064   rpnbase* copy() const 
00065     { return new rpnfsin(); } 
00066 
00067 };
00068 
00069 
00070 
00071 class rpnftan: public rpnfunction
00072 {
00073 public:
00074 
00075   string const name() const
00076     { return string("tan"); }
00077 
00078   void visit(deque<rpnbase*>& ds,rpnreal& n) 
00079     { n.num = tan(n.num); }
00080   void visit(deque<rpnbase*>& ds,rpncomplex& n)
00081     { n.num = tan(n.num); }
00082 
00083   rpnftan() {}
00084   rpnftan(deque<rpnbase*>& ds, bool const evaluate=true)
00085     {  
00086       if (evaluate)
00087         eval(ds);
00088       else
00089         ds.push_front(this);
00090     }
00091   ~rpnftan() {} 
00092   rpnbase* copy() const 
00093     { return new rpnftan(); } 
00094 
00095 };
00096 
00097 
00098 
00099 
00100 class rpnflog: public rpnfunction
00101 {
00102 public:
00103 
00104   string const name() const
00105     { return string("log"); }
00106 
00107   void visit(deque<rpnbase*>& ds,rpnreal& n) 
00108     { n.num = log(n.num); }
00109   void visit(deque<rpnbase*>& ds,rpncomplex& n)
00110     { n.num = log(n.num); }
00111 
00112   rpnflog() {}
00113   rpnflog(deque<rpnbase*>& ds, bool const evaluate=true)
00114     {  
00115       if (evaluate)
00116         eval(ds);
00117       else
00118         ds.push_front(this);
00119     }
00120   ~rpnflog() {} 
00121   rpnbase* copy() const 
00122     { return new rpnflog(); } 
00123 
00124 };
00125 
00126 
00127 class rpnflog10: public rpnfunction
00128 {
00129 public:
00130 
00131   string const name() const
00132     { return string("log10"); }
00133 
00134   void visit(deque<rpnbase*>& ds,rpnreal& n) 
00135     { n.num = log10(n.num); }
00136   void visit(deque<rpnbase*>& ds,rpncomplex& n)
00137     { n.num = log10(n.num); }
00138 
00139   rpnflog10() {}
00140   rpnflog10(deque<rpnbase*>& ds, bool const evaluate=true)
00141     {  
00142       if (evaluate)
00143         eval(ds);
00144       else
00145         ds.push_front(this);
00146     }
00147   ~rpnflog10() {} 
00148   rpnbase* copy() const 
00149     { return new rpnflog10(); } 
00150 
00151 };
00152 
00153 class rpnfexp: public rpnfunction
00154 {
00155 public:
00156 
00157   string const name() const
00158     { return string("exp"); }
00159 
00160   void visit(deque<rpnbase*>& ds,rpnreal& n) 
00161     { n.num = exp(n.num); }
00162   void visit(deque<rpnbase*>& ds,rpncomplex& n)
00163     { n.num = exp(n.num); }
00164 
00165   rpnfexp() {}
00166   rpnfexp(deque<rpnbase*>& ds, bool const evaluate=true)
00167     {  
00168       if (evaluate)
00169         eval(ds);
00170       else
00171         ds.push_front(this);
00172     }
00173   ~rpnfexp() {} 
00174   rpnbase* copy() const 
00175     { return new rpnfexp(); } 
00176 
00177 };
00178 
00179 class rpnfsqrt: public rpnfunction
00180 {
00181 public:
00182 
00183   string const name() const
00184     { return string("sqrt"); }
00185 
00186   void visit(deque<rpnbase*>& ds,rpninteger& n); 
00187   void visit(deque<rpnbase*>& ds,rpnreal& n) 
00188     { n.num = sqrt(n.num); }
00189   void visit(deque<rpnbase*>& ds,rpncomplex& n)
00190     { n.num = sqrt(n.num); }
00191 
00192   rpnfsqrt() {}
00193   rpnfsqrt(deque<rpnbase*>& ds, bool const evaluate=true)
00194     {  
00195       if (evaluate)
00196         eval(ds);
00197       else
00198         ds.push_front(this);
00199     }
00200   ~rpnfsqrt() {} 
00201   rpnbase* copy() const 
00202     { return new rpnfsqrt(); } 
00203 
00204 };
00205 
00206 class rpnfsinh: public rpnfunction
00207 {
00208 public:
00209 
00210   string const name() const
00211     { return string("sinh"); }
00212 
00213   void visit(deque<rpnbase*>& ds,rpnreal& n) 
00214     { n.num = sinh(n.num); }
00215   void visit(deque<rpnbase*>& ds,rpncomplex& n)
00216     { n.num = sinh(n.num); }
00217 
00218   rpnfsinh() {}
00219   rpnfsinh(deque<rpnbase*>& ds, bool const evaluate=true)
00220     {  
00221       if (evaluate)
00222         eval(ds);
00223       else
00224         ds.push_front(this);
00225     }
00226   ~rpnfsinh() {} 
00227   rpnbase* copy() const 
00228     { return new rpnfsinh(); } 
00229 
00230 };
00231 
00232 class rpnfcosh: public rpnfunction
00233 {
00234 public:
00235 
00236   string const name() const
00237     { return string("cosh"); }
00238 
00239   void visit(deque<rpnbase*>& ds,rpnreal& n) 
00240     { n.num = cosh(n.num); }
00241   void visit(deque<rpnbase*>& ds,rpncomplex& n)
00242     { n.num = cosh(n.num); }
00243 
00244   rpnfcosh() {}
00245   rpnfcosh(deque<rpnbase*>& ds, bool const evaluate=true)
00246     {  
00247       if (evaluate)
00248         eval(ds);
00249       else
00250         ds.push_front(this);
00251     }
00252   ~rpnfcosh() {} 
00253   rpnbase* copy() const 
00254     { return new rpnfcosh(); } 
00255 
00256 };
00257 
00258 class rpnftanh: public rpnfunction
00259 {
00260 public:
00261 
00262   string const name() const
00263     { return string("tanh"); }
00264 
00265   void visit(deque<rpnbase*>& ds,rpnreal& n) 
00266     { n.num = tanh(n.num); }
00267   void visit(deque<rpnbase*>& ds,rpncomplex& n)
00268     { n.num = tanh(n.num); }
00269 
00270   rpnftanh() {}
00271   rpnftanh(deque<rpnbase*>& ds, bool const evaluate=true)
00272     {  
00273       if (evaluate)
00274         eval(ds);
00275       else
00276         ds.push_front(this);
00277     }
00278   ~rpnftanh() {} 
00279   rpnbase* copy() const 
00280     { return new rpnftanh(); } 
00281 
00282 };
00283 
00284 
00285 class rpnffloor: public rpnfunction
00286 {
00287 public:
00288 
00289   string const name() const
00290     { return string("floor"); }
00291 
00292   void visit(deque<rpnbase*>& ds,rpnreal& n) 
00293     { n.num = floor(n.num); }
00294 
00295   rpnffloor() {}
00296   rpnffloor(deque<rpnbase*>& ds, bool const evaluate=true)
00297     {  
00298       if (evaluate)
00299         eval(ds);
00300       else
00301         ds.push_front(this);
00302     }
00303   ~rpnffloor() {} 
00304   rpnbase* copy() const 
00305     { return new rpnffloor(); } 
00306 };
00307 
00308 class rpnfceil: public rpnfunction
00309 {
00310 public:
00311 
00312   string const name() const
00313     { return string("ceil"); }
00314 
00315   void visit(deque<rpnbase*>& ds,rpnreal& n) 
00316     { n.num = ceil(n.num); }
00317 
00318   rpnfceil() {}
00319   rpnfceil(deque<rpnbase*>& ds, bool const evaluate=true)
00320     {  
00321       if (evaluate)
00322         eval(ds);
00323       else
00324         ds.push_front(this);
00325     }
00326   ~rpnfceil() {} 
00327   rpnbase* copy() const 
00328     { return new rpnfceil(); } 
00329 };
00330 
00331 
00332 class rpnfacos: public rpnfunction
00333 {
00334 public:
00335 
00336   string const name() const
00337     { return string("acos"); }
00338 
00339   void visit(deque<rpnbase*>& ds,rpnreal& n) 
00340     { n.num = acos(n.num); }
00341 
00342   rpnfacos() {}
00343   rpnfacos(deque<rpnbase*>& ds, bool const evaluate=true)
00344     {  
00345       if (evaluate)
00346         eval(ds);
00347       else
00348         ds.push_front(this);
00349     }
00350   ~rpnfacos() {} 
00351   rpnbase* copy() const 
00352     { return new rpnfacos(); } 
00353 };
00354 
00355 class rpnfasin: public rpnfunction
00356 {
00357 public:
00358 
00359   string const name() const
00360     { return string("asin"); }
00361 
00362   void visit(deque<rpnbase*>& ds,rpnreal& n) 
00363     { n.num = asin(n.num); }
00364 
00365   rpnfasin() {}
00366   rpnfasin(deque<rpnbase*>& ds, bool const evaluate=true)
00367     {  
00368       if (evaluate)
00369         eval(ds);
00370       else
00371         ds.push_front(this);
00372     }
00373   ~rpnfasin() {} 
00374   rpnbase* copy() const 
00375     { return new rpnfasin(); } 
00376 };
00377 
00378 class rpnfatan: public rpnfunction
00379 {
00380 public:
00381 
00382   string const name() const
00383     { return string("atan"); }
00384 
00385   void visit(deque<rpnbase*>& ds,rpnreal& n) 
00386     { n.num = atan(n.num); }
00387 
00388   rpnfatan() {}
00389   rpnfatan(deque<rpnbase*>& ds, bool const evaluate=true)
00390     {  
00391       if (evaluate)
00392         eval(ds);
00393       else
00394         ds.push_front(this);
00395     }
00396   ~rpnfatan() {} 
00397   rpnbase* copy() const 
00398     { return new rpnfatan(); } 
00399 
00400 };
00401 
00402 class rpnfabs: public rpnfunction
00403 {
00404 public:
00405 
00406   string const name() const
00407     { return string("abs"); }
00408 
00409   void visit(deque<rpnbase*>& ds,rpninteger& n) 
00410     { if(n.num<0) n.num *= -1; }
00411   void visit(deque<rpnbase*>& ds,rpnreal& n) 
00412     { if(n.num<0) n.num *= -1; }
00413   void visit(deque<rpnbase*>& ds,rpncomplex& n)
00414   {
00415     rpnbase* x0 = ds.front();
00416     ds.pop_front();
00417     new rpnreal(ds,abs(n.num)); 
00418     x0->dec();
00419   }
00420 
00421   rpnfabs() {}
00422   rpnfabs(deque<rpnbase*>& ds, bool const evaluate=true)
00423     {  
00424       if (evaluate)
00425         eval(ds);
00426       else
00427         ds.push_front(this);
00428     }
00429   ~rpnfabs() {} 
00430   rpnbase* copy() const 
00431     { return new rpnfabs(); } 
00432 };
00433 
00434 class rpnfarg: public rpnfunction
00435 {
00436 public:
00437 
00438   string const name() const
00439     { return string("arg"); }
00440 
00441   void visit(deque<rpnbase*>& ds,rpncomplex& n) 
00442   {
00443     rpnbase* x0 = ds.front();
00444     ds.pop_front();
00445     new rpnreal(ds,arg(n.num)); 
00446     x0->dec();
00447   }
00448 
00449   rpnfarg() {}
00450   rpnfarg(deque<rpnbase*>& ds, bool const evaluate=true)
00451     {  
00452       if (evaluate)
00453         eval(ds);
00454       else
00455         ds.push_front(this);
00456     }
00457   ~rpnfarg() {} 
00458   rpnbase* copy() const 
00459     { return new rpnfarg(); } 
00460 };
00461 
00462 class rpnfnorm: public rpnfunction
00463 {
00464 public:
00465 
00466   string const name() const
00467     { return string("norm"); }
00468 
00469   void visit(deque<rpnbase*>& ds,rpncomplex& n) 
00470   {
00471     rpnbase* x0 = ds.front();
00472     ds.pop_front();
00473     new rpnreal(ds,norm(n.num)); 
00474     x0->dec();
00475   }
00476 
00477   rpnfnorm() {}
00478   rpnfnorm(deque<rpnbase*>& ds, bool const evaluate=true)
00479     {  
00480       if (evaluate)
00481         eval(ds);
00482       else
00483         ds.push_front(this);
00484     }
00485   ~rpnfnorm() {} 
00486   rpnbase* copy() const 
00487     { return new rpnfnorm(); } 
00488 };
00489 
00490 class rpnfimag: public rpnfunction
00491 {
00492 public:
00493 
00494   string const name() const
00495     { return string("imag"); }
00496 
00497   void visit(deque<rpnbase*>& ds,rpncomplex& n) 
00498   {
00499     rpnbase* x0 = ds.front();
00500     ds.pop_front();
00501     new rpnreal(ds,imag(n.num)); 
00502     x0->dec();
00503   }
00504 
00505   rpnfimag() {}
00506   rpnfimag(deque<rpnbase*>& ds, bool const evaluate=true)
00507     {  
00508       if (evaluate)
00509         eval(ds);
00510       else
00511         ds.push_front(this);
00512     }
00513   ~rpnfimag() {} 
00514   rpnbase* copy() const 
00515     { return new rpnfimag(); } 
00516 };
00517 
00518 class rpnrealconvert : public rpnfunction
00519 {
00520 public:
00521 
00522   rpnrealconvert() {}
00523   rpnrealconvert(deque<rpnbase*>& ds, bool const evaluate=true);
00524   ~rpnrealconvert() {}
00525   rpnbase* copy() const;
00526 
00527   void visit(deque<rpnbase*>& ds,rpnstring& s);
00528   void visit(deque<rpnbase*>& ds,rpninteger& n);
00529   void visit(deque<rpnbase*>& ds,rpncomplex& n);
00530 
00531   string const name() const { return string("real"); }
00532 
00533   void eval( deque<rpnbase*>& ds );
00534 };
00535 
00536 class rpnfconj: public rpnfunction
00537 {
00538 public:
00539 
00540   string const name() const
00541     { return string("conj"); }
00542 
00543   void visit(deque<rpnbase*>& ds,rpncomplex& n) 
00544     { n.num = conj(n.num); }
00545 
00546   rpnfconj() {}
00547   rpnfconj(deque<rpnbase*>& ds, bool const evaluate=true)
00548     {  
00549       if (evaluate)
00550         eval(ds);
00551       else
00552         ds.push_front(this);
00553     }
00554   ~rpnfconj() {} 
00555   rpnbase* copy() const 
00556     { return new rpnfconj(); } 
00557 };
00558 
00559 
00560 class rpnpow: public rpnfunction
00561 {
00562 public:
00563 
00564   rpnpow() {}
00565   rpnpow(deque<rpnbase*>& ds, bool const evaluate=true);
00566   ~rpnpow() {}
00567   rpnbase* copy() const;
00568 
00569   void visit(deque<rpnbase*>& ds,rpninteger& n);
00570   void visit(deque<rpnbase*>& ds,rpnreal& n);
00571   void visit(deque<rpnbase*>& ds,rpncomplex& n);
00572 
00573   string const name() const { return string("^"); }
00574 
00575   void eval( deque<rpnbase*>& ds );
00576 };
00577 
00578 
00579 
00580 
00581 class rpnr_to_d: public rpnfunction
00582 {
00583 public:
00584 
00585   string const name() const
00586     { return string("r->d"); }
00587 
00588   void visit(deque<rpnbase*>& ds,rpnreal& n); 
00589 
00590   rpnr_to_d() {}
00591   rpnr_to_d(deque<rpnbase*>& ds, bool const evaluate=true)
00592     {  
00593       if (evaluate)
00594         eval(ds);
00595       else
00596         ds.push_front(this);
00597     }
00598   ~rpnr_to_d() {} 
00599   rpnbase* copy() const 
00600     { return new rpnr_to_d(); } 
00601 
00602 };
00603 
00604 
00605 class rpnd_to_r: public rpnfunction
00606 {
00607 public:
00608 
00609   string const name() const
00610     { return string("d->r"); }
00611 
00612   void visit(deque<rpnbase*>& ds,rpnreal& n); 
00613 
00614   rpnd_to_r() {}
00615   rpnd_to_r(deque<rpnbase*>& ds, bool const evaluate=true)
00616     {  
00617       if (evaluate)
00618         eval(ds);
00619       else
00620         ds.push_front(this);
00621     }
00622   ~rpnd_to_r() {} 
00623   rpnbase* copy() const 
00624     { return new rpnd_to_r(); } 
00625 
00626 };
00627 
00628 
00629 
00630 class rpnp_to_c: public rpnfunction
00631 {
00632 public:
00633 
00634   string const name() const
00635     { return string("p->c"); }
00636 
00637   void visit(deque<rpnbase*>& ds,rpnreal& n); 
00638 
00639   rpnp_to_c() {}
00640   rpnp_to_c(deque<rpnbase*>& ds, bool const evaluate=true)
00641     {  
00642       if (evaluate)
00643         eval(ds);
00644       else
00645         ds.push_front(this);
00646     }
00647   ~rpnp_to_c() {} 
00648   rpnbase* copy() const 
00649     { return new rpnp_to_c(); } 
00650 
00651   void eval( deque<rpnbase*>& ds );
00652 };
00653 
00654 
00655 
00656 class rpnr_to_c: public rpnfunction
00657 {
00658 public:
00659 
00660   string const name() const
00661     { return string("complex"); }
00662 
00663   void visit(deque<rpnbase*>& ds,rpninteger& n); 
00664   void visit(deque<rpnbase*>& ds,rpnreal& n); 
00665 
00666   rpnr_to_c() {}
00667   rpnr_to_c(deque<rpnbase*>& ds, bool const evaluate=true)
00668     {  
00669       if (evaluate)
00670         eval(ds);
00671       else
00672         ds.push_front(this);
00673     }
00674   ~rpnr_to_c() {} 
00675   rpnbase* copy() const 
00676     { return new rpnr_to_c(); } 
00677 
00678   void eval( deque<rpnbase*>& ds );
00679 };
00680 
00681 
00682 
00683 
00684 class mathconstants
00685 {
00686 public:
00687 
00688   static long double pi;
00689   static long double r_to_d;
00690   static long double d_to_r;
00691 };
00692 
00693 
00694 #endif
00695 
00696 

Generated on Fri Mar 4 00:49:30 2011 for Chelton Evans Source by  doxygen 1.5.8