Files Classes Functions Hierarchy
#include <mathfunc.h>
Public Member Functions | |
| rpnpow () | |
| rpnpow (deque< rpnbase * > &ds, bool const evaluate=true) | |
| ~rpnpow () | |
| rpnbase * | copy () const |
| void | visit (deque< rpnbase * > &ds, rpninteger &n) |
| void | visit (deque< rpnbase * > &ds, rpnreal &n) |
| void | visit (deque< rpnbase * > &ds, rpncomplex &n) |
| string const | name () const |
| void | eval (deque< rpnbase * > &ds) |
Definition at line 560 of file mathfunc.h.
| rpnpow::rpnpow | ( | ) | [inline] |
Definition at line 95 of file mathfunc.cpp.
References eval().
00096 { 00097 if (evaluate) 00098 eval(ds); 00099 else 00100 ds.push_front(this); 00101 }
| rpnpow::~rpnpow | ( | ) | [inline] |
| rpnbase * rpnpow::copy | ( | ) | const [virtual] |
Reimplemented from rpnfunction.
Definition at line 103 of file mathfunc.cpp.
References rpnpow().
00104 { 00105 return new rpnpow(); 00106 }
| void rpnpow::eval | ( | deque< rpnbase * > & | ds | ) | [virtual] |
Reimplemented from rpnfunction.
Definition at line 108 of file mathfunc.cpp.
References rpnbase::accept(), and rpnbase::dec().
Referenced by rpnpow().
| string const rpnpow::name | ( | ) | const [inline, virtual] |
| void rpnpow::visit | ( | deque< rpnbase * > & | ds, | |
| rpncomplex & | n | |||
| ) | [virtual] |
Reimplemented from rpnfunction.
Definition at line 190 of file mathfunc.cpp.
References rpnbase::dec(), rpnbase::iscomplex(), rpnbase::isinteger(), rpnbase::isreal(), and rpncomplex::num.
00191 { 00192 rpnbase* x0 = ds.front(); 00193 ds.pop_front(); 00194 rpnbase* x1 =ds.front(); 00195 if (x1->iscomplex()) 00196 { 00197 ((rpncomplex*)x1)->num = pow( ((rpncomplex*)x1)->num,n.num ); 00198 x0->dec(); 00199 return; 00200 } 00201 else 00202 if (x1->isreal()) 00203 { 00204 ds.pop_front(); 00205 ds.push_front(x0); 00206 complex< long double > n2( ((rpnreal*)x1)->num, 0.0); 00207 n.num = pow(n2,n.num); 00208 x1->dec(); 00209 return; 00210 } 00211 else 00212 if (x1->isinteger()) 00213 { 00214 ds.pop_front(); 00215 ds.push_front(x0); 00216 complex< long double > n2( ((rpninteger*)x1)->num, 0.0); 00217 n.num = pow(n2,n.num); 00218 x1->dec(); 00219 return; 00220 } 00221 00222 // Restore the stack. 00223 ds.push_front(x0); 00224 }
Reimplemented from rpnfunction.
Definition at line 116 of file mathfunc.cpp.
References rpnbase::dec(), rpnbase::iscomplex(), rpnbase::isinteger(), rpnbase::isreal(), and rpnreal::num.
00117 { 00118 rpnbase* x0 = ds.front(); 00119 ds.pop_front(); 00120 rpnbase* x1 =ds.front(); 00121 00122 if (x1->isreal()) 00123 { 00124 long double y(n.num); 00125 long double & x(((rpnreal*)x1)->num); 00126 if (x==0.0) 00127 x=0.0; 00128 else 00129 x = pow(x,y); 00130 00131 // ((rpnreal*)x1)->num = pow( ((rpnreal*)x1)->num, n.num ); 00132 x0->dec(); 00133 return; 00134 } 00135 else 00136 if (x1->iscomplex()) 00137 { 00138 ((rpncomplex*)x1)->num = pow( ((rpncomplex*)x1)->num, n.num ); 00139 x0->dec(); 00140 return; 00141 } 00142 else 00143 if (x1->isinteger()) 00144 { 00145 ds.pop_front(); 00146 ds.push_front(x0); 00147 n.num = pow( ((rpninteger*)x1)->num, n.num ); 00148 x1->dec(); 00149 return; 00150 } 00151 00152 // Restore the stack. 00153 ds.push_front(x0); 00154 }
| void rpnpow::visit | ( | deque< rpnbase * > & | ds, | |
| rpninteger & | n | |||
| ) | [virtual] |
Reimplemented from rpnfunction.
Definition at line 156 of file mathfunc.cpp.
References rpnbase::dec(), rpnbase::iscomplex(), rpnbase::isinteger(), rpnbase::isreal(), and rpninteger::num.
00157 { 00158 rpnbase* x0 = ds.front(); 00159 ds.pop_front(); 00160 rpnbase* x1 =ds.front(); 00161 00162 if (x1->isinteger()) 00163 { 00164 long double const a(((rpninteger*)x1)->num); 00165 long double const b(n.num); 00166 00167 ((rpninteger*)x1)->num = (long int) pow(a,b); 00168 x0->dec(); 00169 return; 00170 } 00171 else 00172 if (x1->isreal()) 00173 { 00174 long double const b(n.num); 00175 ((rpnreal*)x1)->num = pow( ((rpnreal*)x1)->num,b ); 00176 x0->dec(); 00177 return; 00178 } 00179 if (x1->iscomplex()) 00180 { 00181 ((rpncomplex*)x1)->num = pow( ((rpncomplex*)x1)->num,n.num ); 00182 x0->dec(); 00183 return; 00184 } 00185 00186 // Restore the stack. 00187 ds.push_front(x0); 00188 }
1.5.8