⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 a00109.html

📁 This library defines basic operation on polynomials, and contains also 3 different roots (zeroes)-fi
💻 HTML
📖 第 1 页 / 共 4 页
字号:
<a name="l01098"></a>01098         <span class="keywordflow">if</span> (x == U(0)) {<a name="l01099"></a>01099             ppx = U(p[1]);<a name="l01100"></a>01100             <span class="keywordflow">return</span> U(p[0]);<a name="l01101"></a>01101         }<a name="l01102"></a>01102         <span class="keywordflow">else</span> {<a name="l01103"></a>01103             <span class="keywordtype">int</span> m = p.degree();<a name="l01104"></a>01104             U px = p[m];<a name="l01105"></a>01105             ppx = U(0);<a name="l01106"></a>01106             <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = m - 1; i &gt;= 0; --i) {<a name="l01107"></a>01107                 ppx = (ppx * x) + px;<a name="l01108"></a>01108                 px = (px * x) + p[i];<a name="l01109"></a>01109                 <span class="comment">//ppx *= x; </span><a name="l01110"></a>01110                 <span class="comment">//ppx += px;</span><a name="l01111"></a>01111                 <span class="comment">//px *= x; </span><a name="l01112"></a>01112                 <span class="comment">//px += p[i];</span><a name="l01113"></a>01113             }<a name="l01114"></a>01114             <span class="keywordflow">return</span> px;<a name="l01115"></a>01115         }<a name="l01116"></a>01116     }<a name="l01117"></a>01117     <span class="keywordflow">else</span> {<a name="l01118"></a>01118         ppx = U(0);<a name="l01119"></a>01119         <span class="keywordflow">return</span> p[0];<a name="l01120"></a>01120     }<a name="l01121"></a>01121 }<a name="l01122"></a>01122 <a name="l01140"></a>01140 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> U&gt;<a name="l01141"></a><a class="code" href="a00101.html#gcc297191b953d7df4ecad642e13e7911">01141</a> U <a class="code" href="a00090.html#3035df8b06fcc5015efb56762fc68f93">evalAndDerive</a>(<span class="keyword">const</span> Polynomial&lt;T&gt;&amp; p, <span class="keyword">const</span> U&amp; x, U&amp; ppx, U&amp; pppx) {<a name="l01142"></a>01142     <span class="keywordtype">int</span> m = p.<a class="code" href="a00090.html#b433e0edb11b32a205a9d07b89aefa8f">degree</a>();<a name="l01143"></a>01143     <span class="keywordflow">if</span> (m &gt;= 2) {<a name="l01144"></a>01144         <span class="keywordflow">if</span> (x == U(0)) {<a name="l01145"></a>01145             ppx = U(p[1]);<a name="l01146"></a>01146             pppx = U(p[2] + p[2]);<a name="l01147"></a>01147             <span class="keywordflow">return</span> U(p[0]);<a name="l01148"></a>01148         }<a name="l01149"></a>01149         <span class="keywordflow">else</span> {<a name="l01150"></a>01150             <span class="keywordtype">int</span> m = p.<a class="code" href="a00090.html#b433e0edb11b32a205a9d07b89aefa8f">degree</a>();<a name="l01151"></a>01151             U px = p[m];<a name="l01152"></a>01152             ppx = U(0);<a name="l01153"></a>01153             pppx = U(0);<a name="l01154"></a>01154             <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = m - 1; i &gt;= 0; --i) {<a name="l01155"></a>01155                 pppx *= x; <a name="l01156"></a>01156                 pppx += ppx;<a name="l01157"></a>01157                 ppx *= x; <a name="l01158"></a>01158                 ppx += px;<a name="l01159"></a>01159                 px *= x; <a name="l01160"></a>01160                 px += p[i];<a name="l01161"></a>01161             }<a name="l01162"></a>01162             pppx += pppx;<a name="l01163"></a>01163             <span class="keywordflow">return</span> px;<a name="l01164"></a>01164         }<a name="l01165"></a>01165     }<a name="l01166"></a>01166     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (m == 1) {<a name="l01167"></a>01167         ppx = U(p[1]);<a name="l01168"></a>01168         pppx = U(0);<a name="l01169"></a>01169         <span class="keywordflow">return</span> (p[1] * x) + p[0];<a name="l01170"></a>01170     }<a name="l01171"></a>01171     <span class="keywordflow">else</span> {<a name="l01172"></a>01172         ppx = U(0);<a name="l01173"></a>01173         pppx = U(0);<a name="l01174"></a>01174         <span class="keywordflow">return</span> p[0];<a name="l01175"></a>01175     }<a name="l01176"></a>01176 }<a name="l01177"></a>01177 <a name="l01196"></a>01196 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> U&gt;<a name="l01197"></a><a class="code" href="a00101.html#g055ddecc1576e178f623b4b8e868cc23">01197</a> U <a class="code" href="a00101.html#g055ddecc1576e178f623b4b8e868cc23">evalDeriveAndDeflate</a>(<span class="keyword">const</span> Polynomial&lt;T&gt;&amp; p, <span class="keyword">const</span> U&amp; x, U&amp; ppx, U&amp; pppx, Polynomial&lt;U&gt;&amp; q) {<a name="l01198"></a>01198     <span class="keywordtype">int</span> m = p.<a class="code" href="a00090.html#b433e0edb11b32a205a9d07b89aefa8f">degree</a>();<a name="l01199"></a>01199     <span class="keywordflow">if</span> (m &gt;= 2) {<a name="l01200"></a>01200         <span class="keywordflow">if</span> (x == U(0)) {<a name="l01201"></a>01201             q.resize(m);<a name="l01202"></a>01202             std::copy(&amp;p[1], &amp;p[m + 1], &amp;q[0]);<a name="l01203"></a>01203             ppx = U(p[1]);<a name="l01204"></a>01204             pppx = U(p[2] + p[2]);<a name="l01205"></a>01205             <span class="keywordflow">return</span> U(p[0]);<a name="l01206"></a>01206         }<a name="l01207"></a>01207         <span class="keywordflow">else</span> {<a name="l01208"></a>01208             q.resize(m);<a name="l01209"></a>01209             U px = p[m];<a name="l01210"></a>01210             ppx = U(0);<a name="l01211"></a>01211             pppx = U(0);<a name="l01212"></a>01212             <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = m - 1; i &gt;= 0; --i) {<a name="l01213"></a>01213                 pppx *= x; <a name="l01214"></a>01214                 pppx += ppx;<a name="l01215"></a>01215                 ppx *= x; <a name="l01216"></a>01216                 ppx += px;<a name="l01217"></a>01217                 q[i] = px;<a name="l01218"></a>01218                 px *= x; <a name="l01219"></a>01219                 px += p[i];<a name="l01220"></a>01220             }<a name="l01221"></a>01221             pppx += pppx;<a name="l01222"></a>01222             <span class="keywordflow">return</span> px;<a name="l01223"></a>01223         }<a name="l01224"></a>01224     }<a name="l01225"></a>01225     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (m == 1) {<a name="l01226"></a>01226         q.resize(1);<a name="l01227"></a>01227         ppx = U(p[1]);<a name="l01228"></a>01228         pppx = U(0);<a name="l01229"></a>01229         q[0] = T(0);<a name="l01230"></a>01230         <span class="keywordflow">return</span> (p[1] * x) + p[0];<a name="l01231"></a>01231     }<a name="l01232"></a>01232     <span class="keywordflow">else</span> {<a name="l01233"></a>01233         q.resize(1);<a name="l01234"></a>01234         q[0] = U(0);<a name="l01235"></a>01235         ppx = U(0);<a name="l01236"></a>01236         pppx = U(0);<a name="l01237"></a>01237         <span class="keywordflow">return</span> p[0];<a name="l01238"></a>01238     }<a name="l01239"></a>01239 }<a name="l01240"></a>01240 <a name="l01252"></a>01252 <span class="keyword">template</span>&lt;<span class="keyword">class</span> T&gt;<a name="l01253"></a><a class="code" href="a00100.html#g13f5d5cbb65e25ebe6bfa5a1b0129f3e">01253</a> T <a class="code" href="a00100.html#g13f5d5cbb65e25ebe6bfa5a1b0129f3e">getOptimalScale</a>(<span class="keyword">const</span> Polynomial&lt;T&gt;&amp; p) {<a name="l01254"></a>01254     <span class="keyword">static</span> FloatSpecs&lt;T&gt; fpSpecs;<a name="l01255"></a>01255     T hi = sqrt(fpSpecs.<a class="code" href="a00089.html#7fce7d8806caf8595e993e7f1258e57d">INFINY</a>);<a name="l01256"></a>01256     T lo = fpSpecs.<a class="code" href="a00089.html#ce3bf7fb1752f8ff96a483091285536d">SMALNO</a> / fpSpecs.<a class="code" href="a00089.html#5e567bf650640c58e9455ad2eb4b05bc">ETA</a>;<a name="l01257"></a>01257     T mx = 0;<a name="l01258"></a>01258     T mn = fpSpecs.<a class="code" href="a00089.html#7fce7d8806caf8595e993e7f1258e57d">INFINY</a>;<a name="l01259"></a>01259     T x;<a name="l01260"></a>01260     <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 1; i &lt; p.size(); ++i) {<a name="l01261"></a>01261         <span class="keywordflow">if</span> (p[i] &gt; mx) mx = p[i];<a name="l01262"></a>01262         <span class="keywordflow">if</span> (p[i] != 0 &amp;&amp; p[i] &lt; mn) mn = p[i];<a name="l01263"></a>01263     }<a name="l01264"></a>01264 <a name="l01265"></a>01265     <span class="keywordflow">if</span> (mn &gt;= lo &amp;&amp; mx &lt;= hi)<a name="l01266"></a>01266         <span class="keywordflow">return</span> T(1);<a name="l01267"></a>01267 <a name="l01268"></a>01268     x = lo / mn;<a name="l01269"></a>01269     <span class="keywordflow">if</span> (x &lt;= T(1))<a name="l01270"></a>01270         x = 1 / (sqrt(mx) * sqrt(mn));<a name="l01271"></a>01271     <span class="keywordflow">else</span><a name="l01272"></a>01272         <span class="keywordflow">if</span> (fpSpecs.<a class="code" href="a00089.html#7fce7d8806caf8595e993e7f1258e57d">INFINY</a> / x &gt; mx)<a name="l01273"></a>01273             x = T(1);<a name="l01274"></a>01274 <a name="l01275"></a>01275     <span class="keywordflow">return</span> pow(fpSpecs.<a class="code" href="a00089.html#e7b1a5c82772e0e055096008cb9883ef">BASE</a>, floor(T(.5) + (log(x) / fpSpecs.<a class="code" href="a00089.html#21fb6e241507492d75c488a9c65d12fe">LOG_BASE</a>)));<a name="l01276"></a>01276 }<a name="l01277"></a>01277 <a name="l01292"></a>01292 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> U&gt;<a name="l01293"></a><a class="code" href="a00100.html#g663581aef6853ed86df03a35505c9ebd">01293</a> U <a class="code" href="a00100.html#g663581aef6853ed86df03a35505c9ebd">scalePoly</a>(Polynomial&lt;T&gt;&amp; p, <span class="keyword">const</span> Polynomial&lt;U&gt;&amp; q) {<a name="l01294"></a>01294     U scale = <a class="code" href="a00100.html#g13f5d5cbb65e25ebe6bfa5a1b0129f3e">getOptimalScale</a>(q);<a name="l01295"></a>01295     p *= scale;<a name="l01296"></a>01296     <span class="keywordflow">return</span> scale;<a name="l01297"></a>01297 }<a name="l01298"></a>01298 <a name="l01314"></a>01314 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> U&gt;<a name="l01315"></a><a class="code" href="a00100.html#g1ca5c1a34fcdcadb083a25ecf0e1a995">01315</a> <span class="keywordtype">void</span> <a class="code" href="a00100.html#g1ca5c1a34fcdcadb083a25ecf0e1a995">modulus</a>(<span class="keyword">const</span> Polynomial&lt;T&gt;&amp; p, Polynomial&lt;U&gt;&amp; q) {<a name="l01316"></a>01316     <span class="keywordtype">int</span> m = p.<a class="code" href="a00090.html#b433e0edb11b32a205a9d07b89aefa8f">degree</a>();<a name="l01317"></a>01317     q.resize(m + 1);<a name="l01318"></a>01318     <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i = 0; i &lt;= m; ++i) <a name="l01319"></a>01319         q[i] = abs(p[i]);<a name="l01320"></a>01320 }<a name="l01321"></a>01321 <a name="l01323"></a>01323 <span class="preprocessor">#endif //POLYNOMIAL_H</span></pre></div><hr size="1"><address style="align: right;"><small>Generated on Mon Aug 21 20:06:32 2006 for The Polynomials Templates Library by&nbsp;<a href="http://www.doxygen.org/index.html"><img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.5 </small></address></body></html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -