summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/latex/polexpr/polexpr.html
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/doc/latex/polexpr/polexpr.html')
-rw-r--r--Master/texmf-dist/doc/latex/polexpr/polexpr.html1271
1 files changed, 859 insertions, 412 deletions
diff --git a/Master/texmf-dist/doc/latex/polexpr/polexpr.html b/Master/texmf-dist/doc/latex/polexpr/polexpr.html
index 5408f16b65e..71e7ef3d019 100644
--- a/Master/texmf-dist/doc/latex/polexpr/polexpr.html
+++ b/Master/texmf-dist/doc/latex/polexpr/polexpr.html
@@ -362,137 +362,160 @@ ul.auto-toc {
<body>
<div class="document" id="package-polexpr-documentation">
<h1 class="title">Package polexpr documentation</h1>
-<h2 class="subtitle" id="id1">0.6 (2018/11/20)</h2>
+<h2 class="subtitle" id="id1">0.7 (2018/12/08)</h2>
<!-- comment: -*- fill-column: 72; mode: rst; -*- -->
<div class="contents topic" id="contents">
<p class="topic-title first">Contents</p>
<ul class="simple">
-<li><a class="reference internal" href="#basic-examples" id="id36">Basic Examples</a></li>
-<li><a class="reference internal" href="#examples-of-localization-of-roots" id="id37">Examples of localization of roots</a><ul>
-<li><a class="reference internal" href="#a-typical-example" id="id38">A typical example</a></li>
-<li><a class="reference internal" href="#a-degree-four-polynomial-with-nearby-roots" id="id39">A degree four polynomial with nearby roots</a></li>
-<li><a class="reference internal" href="#the-degree-nine-polynomial-with-0-99-0-999-0-9999-as-triple-roots" id="id40">The degree nine polynomial with 0.99, 0.999, 0.9999 as triple roots</a></li>
-<li><a class="reference internal" href="#a-mignotte-type-polynomial" id="id41">A Mignotte type polynomial</a></li>
-<li><a class="reference internal" href="#the-degree-41-polynomial-with-2-1-9-1-8-0-0-1-1-9-2-as-roots" id="id42">The degree 41 polynomial with -2, -1.9, -1.8, ..., 0, 0.1, ..., 1.9, 2 as roots</a></li>
-<li><a class="reference internal" href="#roots-of-chebyshev-polynomials" id="id43">Roots of Chebyshev polynomials</a></li>
+<li><a class="reference internal" href="#basic-syntax" id="id38">Basic syntax</a></li>
+<li><a class="reference internal" href="#examples-of-localization-of-roots" id="id39">Examples of localization of roots</a><ul>
+<li><a class="reference internal" href="#a-typical-example" id="id40">A typical example</a></li>
+<li><a class="reference internal" href="#a-degree-four-polynomial-with-nearby-roots" id="id41">A degree four polynomial with nearby roots</a></li>
+<li><a class="reference internal" href="#the-degree-nine-polynomial-with-0-99-0-999-0-9999-as-triple-roots" id="id42">The degree nine polynomial with 0.99, 0.999, 0.9999 as triple roots</a></li>
+<li><a class="reference internal" href="#a-degree-five-polynomial-with-three-rational-roots" id="id43">A degree five polynomial with three rational roots</a></li>
+<li><a class="reference internal" href="#a-mignotte-type-polynomial" id="id44">A Mignotte type polynomial</a></li>
+<li><a class="reference internal" href="#the-wilkinson-polynomial" id="id45">The Wilkinson polynomial</a></li>
+<li><a class="reference internal" href="#the-degree-41-polynomial-with-2-1-9-1-8-0-0-1-1-9-2-as-roots" id="id46">The degree 41 polynomial with -2, -1.9, -1.8, ..., 0, 0.1, ..., 1.9, 2 as roots</a></li>
+<li><a class="reference internal" href="#roots-of-chebyshev-polynomials" id="id47">Roots of Chebyshev polynomials</a></li>
</ul>
</li>
-<li><a class="reference internal" href="#non-expandable-macros" id="id44">Non-expandable macros</a><ul>
-<li><a class="reference internal" href="#poldef-polname-letter-expression-in-letter" id="id45"><tt class="docutils literal">\poldef <span class="pre">polname(letter):=</span> expression in letter;</tt></a></li>
-<li><a class="reference internal" href="#poldef-letter-polname-expression-in-letter" id="id46"><tt class="docutils literal"><span class="pre">\PolDef[letter]{polname}{expression</span> in letter}</tt></a></li>
-<li><a class="reference internal" href="#polgenfloatvariant-polname" id="id47"><tt class="docutils literal">\PolGenFloatVariant{polname}</tt></a></li>
-<li><a class="reference internal" href="#pollet-polname-2-polname-1" id="id48"><tt class="docutils literal"><span class="pre">\PolLet{polname_2}={polname_1}</span></tt></a></li>
-<li><a class="reference internal" href="#polgloballet-polname-2-polname-1" id="id49"><tt class="docutils literal"><span class="pre">\PolGlobalLet{polname_2}={polname_1}</span></tt></a></li>
-<li><a class="reference internal" href="#polassign-polname-toarray-macro" id="id50"><tt class="docutils literal"><span class="pre">\PolAssign{polname}\toarray\macro</span></tt></a></li>
-<li><a class="reference internal" href="#polget-polname-fromarray-macro" id="id51"><tt class="docutils literal"><span class="pre">\PolGet{polname}\fromarray\macro</span></tt></a></li>
-<li><a class="reference internal" href="#polfromcsv-polname-csv" id="id52"><tt class="docutils literal"><span class="pre">\PolFromCSV{polname}{&lt;csv&gt;}</span></tt></a></li>
-<li><a class="reference internal" href="#poltypeset-polname" id="id53"><tt class="docutils literal">\PolTypeset{polname}</tt></a><ul>
-<li><a class="reference internal" href="#poltypesetcmd-raw-coeff" id="id54"><tt class="docutils literal">\PolTypesetCmd{raw_coeff}</tt></a></li>
-<li><a class="reference internal" href="#poltypesetone-raw-coeff" id="id55"><tt class="docutils literal">\PolTypesetOne{raw_coeff}</tt></a></li>
-<li><a class="reference internal" href="#id6" id="id56"><tt class="docutils literal">\PolTypesetMonomialCmd</tt></a></li>
-<li><a class="reference internal" href="#poltypesetcmdprefix-raw-coeff" id="id57"><tt class="docutils literal">\PolTypesetCmdPrefix{raw_coeff}</tt></a></li>
+<li><a class="reference internal" href="#non-expandable-macros" id="id48">Non-expandable macros</a><ul>
+<li><a class="reference internal" href="#poldef-polname-letter-expression-in-letter" id="id49"><tt class="docutils literal">\poldef <span class="pre">polname(letter):=</span> expression in letter;</tt></a></li>
+<li><a class="reference internal" href="#poldef-letter-polname-expression-in-letter" id="id50"><tt class="docutils literal"><span class="pre">\PolDef[letter]{polname}{expression</span> in letter}</tt></a></li>
+<li><a class="reference internal" href="#polgenfloatvariant-polname" id="id51"><tt class="docutils literal">\PolGenFloatVariant{polname}</tt></a></li>
+<li><a class="reference internal" href="#pollet-polname-2-polname-1" id="id52"><tt class="docutils literal"><span class="pre">\PolLet{polname_2}={polname_1}</span></tt></a></li>
+<li><a class="reference internal" href="#polgloballet-polname-2-polname-1" id="id53"><tt class="docutils literal"><span class="pre">\PolGlobalLet{polname_2}={polname_1}</span></tt></a></li>
+<li><a class="reference internal" href="#polassign-polname-toarray-macro" id="id54"><tt class="docutils literal"><span class="pre">\PolAssign{polname}\toarray\macro</span></tt></a></li>
+<li><a class="reference internal" href="#polget-polname-fromarray-macro" id="id55"><tt class="docutils literal"><span class="pre">\PolGet{polname}\fromarray\macro</span></tt></a></li>
+<li><a class="reference internal" href="#polfromcsv-polname-csv" id="id56"><tt class="docutils literal"><span class="pre">\PolFromCSV{polname}{&lt;csv&gt;}</span></tt></a></li>
+<li><a class="reference internal" href="#poltypeset-polname" id="id57"><tt class="docutils literal">\PolTypeset{polname}</tt></a><ul>
+<li><a class="reference internal" href="#poltypesetcmd-raw-coeff" id="id58"><tt class="docutils literal">\PolTypesetCmd{raw_coeff}</tt></a></li>
+<li><a class="reference internal" href="#poltypesetone-raw-coeff" id="id59"><tt class="docutils literal">\PolTypesetOne{raw_coeff}</tt></a></li>
+<li><a class="reference internal" href="#id6" id="id60"><tt class="docutils literal">\PolTypesetMonomialCmd</tt></a></li>
+<li><a class="reference internal" href="#poltypesetcmdprefix-raw-coeff" id="id61"><tt class="docutils literal">\PolTypesetCmdPrefix{raw_coeff}</tt></a></li>
</ul>
</li>
-<li><a class="reference internal" href="#id8" id="id58"><tt class="docutils literal"><span class="pre">\PolTypeset*{polname}</span></tt></a></li>
-<li><a class="reference internal" href="#poldiff-polname-1-polname-2" id="id59"><tt class="docutils literal"><span class="pre">\PolDiff{polname_1}{polname_2}</span></tt></a></li>
-<li><a class="reference internal" href="#poldiff-n-polname-1-polname-2" id="id60"><tt class="docutils literal"><span class="pre">\PolDiff[N]{polname_1}{polname_2}</span></tt></a></li>
-<li><a class="reference internal" href="#polantidiff-polname-1-polname-2" id="id61"><tt class="docutils literal"><span class="pre">\PolAntiDiff{polname_1}{polname_2}</span></tt></a></li>
-<li><a class="reference internal" href="#polantidiff-n-polname-1-polname-2" id="id62"><tt class="docutils literal"><span class="pre">\PolAntiDiff[N]{polname_1}{polname_2}</span></tt></a></li>
-<li><a class="reference internal" href="#poldivide-polname-1-polname-2-polname-q-polname-r" id="id63"><tt class="docutils literal"><span class="pre">\PolDivide{polname_1}{polname_2}{polname_Q}{polname_R}</span></tt></a></li>
-<li><a class="reference internal" href="#polquo-polname-1-polname-2-polname-q" id="id64"><tt class="docutils literal"><span class="pre">\PolQuo{polname_1}{polname_2}{polname_Q}</span></tt></a></li>
-<li><a class="reference internal" href="#polrem-polname-1-polname-2-polname-r" id="id65"><tt class="docutils literal"><span class="pre">\PolRem{polname_1}{polname_2}{polname_R}</span></tt></a></li>
-<li><a class="reference internal" href="#polgcd-polname-1-polname-2-polname-gcd" id="id66"><tt class="docutils literal"><span class="pre">\PolGCD{polname_1}{polname_2}{polname_GCD}</span></tt></a></li>
-<li><a class="reference internal" href="#poltosturm-polname-sturmname" id="id67"><tt class="docutils literal"><span class="pre">\PolToSturm{polname}{sturmname}</span></tt></a></li>
-<li><a class="reference internal" href="#id10" id="id68"><tt class="docutils literal"><span class="pre">\PolToSturm*{polname}{sturmname}</span></tt></a></li>
-<li><a class="reference internal" href="#polsettosturmchainsignchangesat-macro-sturmname-fraction" id="id69"><tt class="docutils literal"><span class="pre">\PolSetToSturmChainSignChangesAt{\macro}{sturmname}{fraction}</span></tt></a></li>
-<li><a class="reference internal" href="#polsettonbofzeroswithin-macro-sturmname-value-a-value-b" id="id70"><tt class="docutils literal"><span class="pre">\PolSetToNbOfZerosWithin{\macro}{sturmname}{value_a}{value_b}</span></tt></a></li>
-<li><a class="reference internal" href="#polsturmisolatezeros-sturmname" id="id71"><tt class="docutils literal">\PolSturmIsolateZeros{sturmname}</tt></a></li>
-<li><a class="reference internal" href="#id12" id="id72"><tt class="docutils literal"><span class="pre">\PolSturmIsolateZeros*{sturmname}</span></tt></a></li>
-<li><a class="reference internal" href="#polsturmisolatezerosandgetmultiplicities-sturmname" id="id73"><tt class="docutils literal">\PolSturmIsolateZerosAndGetMultiplicities{sturmname}</tt></a></li>
-<li><a class="reference internal" href="#polrefineinterval-sturmname-index" id="id74"><tt class="docutils literal"><span class="pre">\PolRefineInterval*{sturmname}{index}</span></tt></a></li>
-<li><a class="reference internal" href="#polrefineinterval-n-sturmname-index" id="id75"><tt class="docutils literal"><span class="pre">\PolRefineInterval[N]{sturmname}{index}</span></tt></a></li>
-<li><a class="reference internal" href="#polensureintervallength-sturmname-index-e" id="id76"><tt class="docutils literal"><span class="pre">\PolEnsureIntervalLength{sturmname}{index}{E}</span></tt></a></li>
-<li><a class="reference internal" href="#polensureintervallengths-sturmname-e" id="id77"><tt class="docutils literal"><span class="pre">\PolEnsureIntervalLengths{sturmname}{E}</span></tt></a></li>
-<li><a class="reference internal" href="#polprintintervals-varname-sturmname" id="id78"><tt class="docutils literal"><span class="pre">\PolPrintIntervals[varname]{sturmname}</span></tt></a><ul>
-<li><a class="reference internal" href="#id13" id="id79"><tt class="docutils literal">\PolPrintIntervalsPrintExactZero</tt></a></li>
-<li><a class="reference internal" href="#id14" id="id80"><tt class="docutils literal">\PolPrintIntervalsPrintLeftEndPoint</tt></a></li>
-<li><a class="reference internal" href="#id15" id="id81"><tt class="docutils literal">\PolPrintIntervalsPrintRightEndPoint</tt></a></li>
+<li><a class="reference internal" href="#id8" id="id62"><tt class="docutils literal"><span class="pre">\PolTypeset*{polname}</span></tt></a></li>
+<li><a class="reference internal" href="#poldiff-polname-1-polname-2" id="id63"><tt class="docutils literal"><span class="pre">\PolDiff{polname_1}{polname_2}</span></tt></a></li>
+<li><a class="reference internal" href="#poldiff-n-polname-1-polname-2" id="id64"><tt class="docutils literal"><span class="pre">\PolDiff[N]{polname_1}{polname_2}</span></tt></a></li>
+<li><a class="reference internal" href="#polantidiff-polname-1-polname-2" id="id65"><tt class="docutils literal"><span class="pre">\PolAntiDiff{polname_1}{polname_2}</span></tt></a></li>
+<li><a class="reference internal" href="#polantidiff-n-polname-1-polname-2" id="id66"><tt class="docutils literal"><span class="pre">\PolAntiDiff[N]{polname_1}{polname_2}</span></tt></a></li>
+<li><a class="reference internal" href="#poldivide-polname-1-polname-2-polname-q-polname-r" id="id67"><tt class="docutils literal"><span class="pre">\PolDivide{polname_1}{polname_2}{polname_Q}{polname_R}</span></tt></a></li>
+<li><a class="reference internal" href="#polquo-polname-1-polname-2-polname-q" id="id68"><tt class="docutils literal"><span class="pre">\PolQuo{polname_1}{polname_2}{polname_Q}</span></tt></a></li>
+<li><a class="reference internal" href="#polrem-polname-1-polname-2-polname-r" id="id69"><tt class="docutils literal"><span class="pre">\PolRem{polname_1}{polname_2}{polname_R}</span></tt></a></li>
+<li><a class="reference internal" href="#polgcd-polname-1-polname-2-polname-gcd" id="id70"><tt class="docutils literal"><span class="pre">\PolGCD{polname_1}{polname_2}{polname_GCD}</span></tt></a></li>
+<li><a class="reference internal" href="#poltosturm-polname-sturmname" id="id71"><tt class="docutils literal"><span class="pre">\PolToSturm{polname}{sturmname}</span></tt></a></li>
+<li><a class="reference internal" href="#id10" id="id72"><tt class="docutils literal"><span class="pre">\PolToSturm*{polname}{sturmname}</span></tt></a></li>
+<li><a class="reference internal" href="#polsettosturmchainsignchangesat-macro-sturmname-fraction" id="id73"><tt class="docutils literal"><span class="pre">\PolSetToSturmChainSignChangesAt{\macro}{sturmname}{fraction}</span></tt></a></li>
+<li><a class="reference internal" href="#polsettonbofzeroswithin-macro-sturmname-value-a-value-b" id="id74"><tt class="docutils literal"><span class="pre">\PolSetToNbOfZerosWithin{\macro}{sturmname}{value_a}{value_b}</span></tt></a></li>
+<li><a class="reference internal" href="#polsturmisolatezeros-sturmname" id="id75"><tt class="docutils literal">\PolSturmIsolateZeros{sturmname}</tt></a></li>
+<li><a class="reference internal" href="#id12" id="id76"><tt class="docutils literal"><span class="pre">\PolSturmIsolateZeros*{sturmname}</span></tt></a></li>
+<li><a class="reference internal" href="#id14" id="id77"><tt class="docutils literal"><span class="pre">\PolSturmIsolateZeros**{sturmname}</span></tt></a></li>
+<li><a class="reference internal" href="#polsturmisolatezerosandgetmultiplicities-sturmname" id="id78"><tt class="docutils literal">\PolSturmIsolateZerosAndGetMultiplicities{sturmname}</tt></a></li>
+<li><a class="reference internal" href="#polsturmisolatezerosgetmultiplicitiesandrationalroots-sturmname" id="id79"><tt class="docutils literal">\PolSturmIsolateZerosGetMultiplicitiesAndRationalRoots{sturmname}</tt></a></li>
+<li><a class="reference internal" href="#polsturmisolatezerosandfindrationalroots-sturmname" id="id80"><tt class="docutils literal">\PolSturmIsolateZerosAndFindRationalRoots{sturmname}</tt></a></li>
+<li><a class="reference internal" href="#polrefineinterval-sturmname-index" id="id81"><tt class="docutils literal"><span class="pre">\PolRefineInterval*{sturmname}{index}</span></tt></a></li>
+<li><a class="reference internal" href="#polrefineinterval-n-sturmname-index" id="id82"><tt class="docutils literal"><span class="pre">\PolRefineInterval[N]{sturmname}{index}</span></tt></a></li>
+<li><a class="reference internal" href="#polensureintervallength-sturmname-index-e" id="id83"><tt class="docutils literal"><span class="pre">\PolEnsureIntervalLength{sturmname}{index}{E}</span></tt></a></li>
+<li><a class="reference internal" href="#polensureintervallengths-sturmname-e" id="id84"><tt class="docutils literal"><span class="pre">\PolEnsureIntervalLengths{sturmname}{E}</span></tt></a></li>
+<li><a class="reference internal" href="#polprintintervals-varname-sturmname" id="id85"><tt class="docutils literal"><span class="pre">\PolPrintIntervals[varname]{sturmname}</span></tt></a><ul>
+<li><a class="reference internal" href="#polprintintervalsnorealroots" id="id86"><tt class="docutils literal">\PolPrintIntervalsNoRealRoots</tt></a></li>
+<li><a class="reference internal" href="#polprintintervalsbeginenv" id="id87"><tt class="docutils literal">\PolPrintIntervalsBeginEnv</tt></a></li>
+<li><a class="reference internal" href="#polprintintervalsendenv" id="id88"><tt class="docutils literal">\PolPrintIntervalsEndEnv</tt></a></li>
+<li><a class="reference internal" href="#polprintintervalsknownroot" id="id89"><tt class="docutils literal">\PolPrintIntervalsKnownRoot</tt></a></li>
+<li><a class="reference internal" href="#polprintintervalsunknownroot" id="id90"><tt class="docutils literal">\PolPrintIntervalsUnknownRoot</tt></a></li>
+<li><a class="reference internal" href="#id15" id="id91"><tt class="docutils literal">\PolPrintIntervalsPrintExactZero</tt></a></li>
+<li><a class="reference internal" href="#id16" id="id92"><tt class="docutils literal">\PolPrintIntervalsPrintLeftEndPoint</tt></a></li>
+<li><a class="reference internal" href="#id17" id="id93"><tt class="docutils literal">\PolPrintIntervalsPrintRightEndPoint</tt></a></li>
</ul>
</li>
-<li><a class="reference internal" href="#polmapcoeffs-macro-polname" id="id82"><tt class="docutils literal"><span class="pre">\PolMapCoeffs{\macro}{polname}</span></tt></a></li>
-<li><a class="reference internal" href="#polreducecoeffs-polname" id="id83"><tt class="docutils literal">\PolReduceCoeffs{polname}</tt></a></li>
-<li><a class="reference internal" href="#id17" id="id84"><tt class="docutils literal"><span class="pre">\PolReduceCoeffs*{polname}</span></tt></a></li>
-<li><a class="reference internal" href="#polmakemonic-polname" id="id85"><tt class="docutils literal">\PolMakeMonic{polname}</tt></a></li>
-<li><a class="reference internal" href="#polmakeprimitive-polname" id="id86"><tt class="docutils literal">\PolMakePrimitive{polname}</tt></a></li>
+<li><a class="reference internal" href="#id19" id="id94"><tt class="docutils literal"><span class="pre">\PolPrintIntervals*[varname]{sturmname}</span></tt></a><ul>
+<li><a class="reference internal" href="#polprintintervalsprintmultiplicity" id="id95"><tt class="docutils literal">\PolPrintIntervalsPrintMultiplicity</tt></a></li>
</ul>
</li>
-<li><a class="reference internal" href="#expandable-macros" id="id87">Expandable macros</a><ul>
-<li><a class="reference internal" href="#poleval-polname-atexpr-numerical-expression" id="id88"><tt class="docutils literal"><span class="pre">\PolEval{polname}\AtExpr{numerical</span> expression}</tt></a></li>
-<li><a class="reference internal" href="#poleval-polname-at-fraction" id="id89"><tt class="docutils literal"><span class="pre">\PolEval{polname}\At{fraction}</span></tt></a></li>
-<li><a class="reference internal" href="#polevalreduced-polname-atexpr-numerical-expression" id="id90"><tt class="docutils literal"><span class="pre">\PolEvalReduced{polname}\AtExpr{numerical</span> expression}</tt></a></li>
-<li><a class="reference internal" href="#polevalreduced-polname-at-fraction" id="id91"><tt class="docutils literal"><span class="pre">\PolEvalReduced{polname}\At{fraction}</span></tt></a></li>
-<li><a class="reference internal" href="#polfloateval-polname-atexpr-numerical-expression" id="id92"><tt class="docutils literal"><span class="pre">\PolFloatEval{polname}\AtExpr{numerical</span> expression}</tt></a></li>
-<li><a class="reference internal" href="#polfloateval-polname-at-fraction" id="id93"><tt class="docutils literal"><span class="pre">\PolFloatEval{polname}\At{fraction}</span></tt></a></li>
-<li><a class="reference internal" href="#polifcoeffisplusorminusone-a-b" id="id94"><tt class="docutils literal"><span class="pre">\PolIfCoeffIsPlusOrMinusOne{A}{B}</span></tt></a></li>
-<li><a class="reference internal" href="#polleadingcoeff-polname" id="id95"><tt class="docutils literal">\PolLeadingCoeff{polname}</tt></a></li>
-<li><a class="reference internal" href="#polnthcoeff-polname-number" id="id96"><tt class="docutils literal"><span class="pre">\PolNthCoeff{polname}{number}</span></tt></a></li>
-<li><a class="reference internal" href="#poldegree-polname" id="id97"><tt class="docutils literal">\PolDegree{polname}</tt></a></li>
-<li><a class="reference internal" href="#policontent-polname" id="id98"><tt class="docutils literal">\PolIContent{polname}</tt></a></li>
-<li><a class="reference internal" href="#poltoexpr-polname" id="id99"><tt class="docutils literal">\PolToExpr{polname}</tt></a><ul>
-<li><a class="reference internal" href="#poltoexproneterm-raw-coeff-number" id="id100"><tt class="docutils literal"><span class="pre">\PolToExprOneTerm{raw_coeff}{number}</span></tt></a></li>
-<li><a class="reference internal" href="#poltoexpronetermstylea-raw-coeff-number" id="id101"><tt class="docutils literal"><span class="pre">\PolToExprOneTermStyleA{raw_coeff}{number}</span></tt></a></li>
-<li><a class="reference internal" href="#poltoexpronetermstyleb-raw-coeff-number" id="id102"><tt class="docutils literal"><span class="pre">\PolToExprOneTermStyleB{raw_coeff}{number}</span></tt></a></li>
-<li><a class="reference internal" href="#poltoexprcmd-raw-coeff" id="id103"><tt class="docutils literal">\PolToExprCmd{raw_coeff}</tt></a></li>
-<li><a class="reference internal" href="#poltoexprtermprefix-raw-coeff" id="id104"><tt class="docutils literal">\PolToExprTermPrefix{raw_coeff}</tt></a></li>
-<li><a class="reference internal" href="#id24" id="id105"><tt class="docutils literal">\PolToExprVar</tt></a></li>
-<li><a class="reference internal" href="#id25" id="id106"><tt class="docutils literal">\PolToExprTimes</tt></a></li>
+<li><a class="reference internal" href="#polmapcoeffs-macro-polname" id="id96"><tt class="docutils literal"><span class="pre">\PolMapCoeffs{\macro}{polname}</span></tt></a></li>
+<li><a class="reference internal" href="#polreducecoeffs-polname" id="id97"><tt class="docutils literal">\PolReduceCoeffs{polname}</tt></a></li>
+<li><a class="reference internal" href="#id21" id="id98"><tt class="docutils literal"><span class="pre">\PolReduceCoeffs*{polname}</span></tt></a></li>
+<li><a class="reference internal" href="#polmakemonic-polname" id="id99"><tt class="docutils literal">\PolMakeMonic{polname}</tt></a></li>
+<li><a class="reference internal" href="#polmakeprimitive-polname" id="id100"><tt class="docutils literal">\PolMakePrimitive{polname}</tt></a></li>
</ul>
</li>
-<li><a class="reference internal" href="#id27" id="id107"><tt class="docutils literal"><span class="pre">\PolToExpr*{polname}</span></tt></a></li>
-<li><a class="reference internal" href="#poltofloatexpr-polname" id="id108"><tt class="docutils literal">\PolToFloatExpr{polname}</tt></a><ul>
-<li><a class="reference internal" href="#poltofloatexproneterm-raw-coeff-number" id="id109"><tt class="docutils literal"><span class="pre">\PolToFloatExprOneTerm{raw_coeff}{number}</span></tt></a></li>
-<li><a class="reference internal" href="#poltofloatexprcmd-raw-coeff" id="id110"><tt class="docutils literal">\PolToFloatExprCmd{raw_coeff}</tt></a></li>
+<li><a class="reference internal" href="#expandable-macros" id="id101">Expandable macros</a><ul>
+<li><a class="reference internal" href="#poleval-polname-atexpr-numerical-expression" id="id102"><tt class="docutils literal"><span class="pre">\PolEval{polname}\AtExpr{numerical</span> expression}</tt></a></li>
+<li><a class="reference internal" href="#poleval-polname-at-fraction" id="id103"><tt class="docutils literal"><span class="pre">\PolEval{polname}\At{fraction}</span></tt></a></li>
+<li><a class="reference internal" href="#polevalreduced-polname-atexpr-numerical-expression" id="id104"><tt class="docutils literal"><span class="pre">\PolEvalReduced{polname}\AtExpr{numerical</span> expression}</tt></a></li>
+<li><a class="reference internal" href="#polevalreduced-polname-at-fraction" id="id105"><tt class="docutils literal"><span class="pre">\PolEvalReduced{polname}\At{fraction}</span></tt></a></li>
+<li><a class="reference internal" href="#polfloateval-polname-atexpr-numerical-expression" id="id106"><tt class="docutils literal"><span class="pre">\PolFloatEval{polname}\AtExpr{numerical</span> expression}</tt></a></li>
+<li><a class="reference internal" href="#polfloateval-polname-at-fraction" id="id107"><tt class="docutils literal"><span class="pre">\PolFloatEval{polname}\At{fraction}</span></tt></a></li>
+<li><a class="reference internal" href="#polifcoeffisplusorminusone-a-b" id="id108"><tt class="docutils literal"><span class="pre">\PolIfCoeffIsPlusOrMinusOne{A}{B}</span></tt></a></li>
+<li><a class="reference internal" href="#polleadingcoeff-polname" id="id109"><tt class="docutils literal">\PolLeadingCoeff{polname}</tt></a></li>
+<li><a class="reference internal" href="#polnthcoeff-polname-number" id="id110"><tt class="docutils literal"><span class="pre">\PolNthCoeff{polname}{number}</span></tt></a></li>
+<li><a class="reference internal" href="#poldegree-polname" id="id111"><tt class="docutils literal">\PolDegree{polname}</tt></a></li>
+<li><a class="reference internal" href="#policontent-polname" id="id112"><tt class="docutils literal">\PolIContent{polname}</tt></a></li>
+<li><a class="reference internal" href="#poltoexpr-polname" id="id113"><tt class="docutils literal">\PolToExpr{polname}</tt></a><ul>
+<li><a class="reference internal" href="#poltoexproneterm-raw-coeff-number" id="id114"><tt class="docutils literal"><span class="pre">\PolToExprOneTerm{raw_coeff}{number}</span></tt></a></li>
+<li><a class="reference internal" href="#poltoexpronetermstylea-raw-coeff-number" id="id115"><tt class="docutils literal"><span class="pre">\PolToExprOneTermStyleA{raw_coeff}{number}</span></tt></a></li>
+<li><a class="reference internal" href="#poltoexpronetermstyleb-raw-coeff-number" id="id116"><tt class="docutils literal"><span class="pre">\PolToExprOneTermStyleB{raw_coeff}{number}</span></tt></a></li>
+<li><a class="reference internal" href="#poltoexprcmd-raw-coeff" id="id117"><tt class="docutils literal">\PolToExprCmd{raw_coeff}</tt></a></li>
+<li><a class="reference internal" href="#poltoexprtermprefix-raw-coeff" id="id118"><tt class="docutils literal">\PolToExprTermPrefix{raw_coeff}</tt></a></li>
+<li><a class="reference internal" href="#id28" id="id119"><tt class="docutils literal">\PolToExprVar</tt></a></li>
+<li><a class="reference internal" href="#id29" id="id120"><tt class="docutils literal">\PolToExprTimes</tt></a></li>
</ul>
</li>
-<li><a class="reference internal" href="#id31" id="id111"><tt class="docutils literal"><span class="pre">\PolToFloatExpr*{polname}</span></tt></a></li>
-<li><a class="reference internal" href="#poltolist-polname" id="id112"><tt class="docutils literal">\PolToList{polname}</tt></a></li>
-<li><a class="reference internal" href="#poltocsv-polname" id="id113"><tt class="docutils literal">\PolToCSV{polname}</tt></a></li>
-<li><a class="reference internal" href="#polsturmchainlength-sturmname" id="id114"><tt class="docutils literal">\PolSturmChainLength{sturmname}</tt></a></li>
-<li><a class="reference internal" href="#polsturmifzeroexactlyknown-sturmname-index-a-b" id="id115"><tt class="docutils literal"><span class="pre">\PolSturmIfZeroExactlyKnown{sturmname}{index}{A}{B}</span></tt></a></li>
-<li><a class="reference internal" href="#polsturmisolatedzeroleft-sturmname-index" id="id116"><tt class="docutils literal"><span class="pre">\PolSturmIsolatedZeroLeft{sturmname}{index}</span></tt></a></li>
-<li><a class="reference internal" href="#polsturmisolatedzeroright-sturmname-index" id="id117"><tt class="docutils literal"><span class="pre">\PolSturmIsolatedZeroRight{sturmname}{index}</span></tt></a></li>
-<li><a class="reference internal" href="#polsturmisolatedzeromultiplicity-sturmname-index" id="id118"><tt class="docutils literal"><span class="pre">\PolSturmIsolatedZeroMultiplicity{sturmname}{index}</span></tt></a></li>
-<li><a class="reference internal" href="#polsturmnbofisolatedzeros-sturmname" id="id119"><tt class="docutils literal">\PolSturmNbOfIsolatedZeros{sturmname}</tt></a></li>
-<li><a class="reference internal" href="#polsturmnbofrootsof-sturmname-lessthanorequalto-value" id="id120"><tt class="docutils literal"><span class="pre">\PolSturmNbOfRootsOf{sturmname}\LessThanOrEqualTo{value}</span></tt></a></li>
-<li><a class="reference internal" href="#polsturmnbofrootsof-sturmname-lessthanorequaltoexpr-expression" id="id121"><tt class="docutils literal"><span class="pre">\PolSturmNbOfRootsOf{sturmname}\LessThanOrEqualToExpr{expression}</span></tt></a></li>
-<li><a class="reference internal" href="#polsturmnbwithmultofrootsof-sturmname-lessthanorequalto-value" id="id122"><tt class="docutils literal"><span class="pre">\PolSturmNbWithMultOfRootsOf{sturmname}\LessThanOrEqualTo{value}</span></tt></a></li>
-<li><a class="reference internal" href="#polsturmnbwithmultofrootsof-sturmname-lessthanorequaltoexpr-expression" id="id123"><tt class="docutils literal"><span class="pre">\PolSturmNbWithMultOfRootsOf{sturmname}\LessThanOrEqualToExpr{expression}</span></tt></a></li>
-<li><a class="reference internal" href="#polintervalwidth-sturmname-index" id="id124"><tt class="docutils literal"><span class="pre">\PolIntervalWidth{sturmname}{index}</span></tt></a></li>
-<li><a class="reference internal" href="#macros-for-use-within-execution-of-polprintintervals" id="id125">Macros for use within execution of <tt class="docutils literal">\PolPrintIntervals</tt></a><ul>
-<li><a class="reference internal" href="#id32" id="id126"><tt class="docutils literal">\PolPrintIntervalsTheEndPoint</tt></a></li>
-<li><a class="reference internal" href="#id33" id="id127"><tt class="docutils literal">\PolPrintIntervalsTheIndex</tt></a></li>
-<li><a class="reference internal" href="#polifendpointispositive-a-b" id="id128"><tt class="docutils literal"><span class="pre">\PolIfEndPointIsPositive{A}{B}</span></tt></a></li>
-<li><a class="reference internal" href="#polifendpointisnegative-a-b" id="id129"><tt class="docutils literal"><span class="pre">\PolIfEndPointIsNegative{A}{B}</span></tt></a></li>
-<li><a class="reference internal" href="#polifendpointiszero-a-b" id="id130"><tt class="docutils literal"><span class="pre">\PolIfEndPointIsZero{A}{B}</span></tt></a></li>
+<li><a class="reference internal" href="#id31" id="id121"><tt class="docutils literal"><span class="pre">\PolToExpr*{polname}</span></tt></a></li>
+<li><a class="reference internal" href="#poltofloatexpr-polname" id="id122"><tt class="docutils literal">\PolToFloatExpr{polname}</tt></a><ul>
+<li><a class="reference internal" href="#poltofloatexproneterm-raw-coeff-number" id="id123"><tt class="docutils literal"><span class="pre">\PolToFloatExprOneTerm{raw_coeff}{number}</span></tt></a></li>
+<li><a class="reference internal" href="#poltofloatexprcmd-raw-coeff" id="id124"><tt class="docutils literal">\PolToFloatExprCmd{raw_coeff}</tt></a></li>
</ul>
</li>
-<li><a class="reference internal" href="#poldectostring-decimal-number" id="id131"><tt class="docutils literal">\PolDecToString{decimal number}</tt></a></li>
+<li><a class="reference internal" href="#id35" id="id125"><tt class="docutils literal"><span class="pre">\PolToFloatExpr*{polname}</span></tt></a></li>
+<li><a class="reference internal" href="#poltolist-polname" id="id126"><tt class="docutils literal">\PolToList{polname}</tt></a></li>
+<li><a class="reference internal" href="#poltocsv-polname" id="id127"><tt class="docutils literal">\PolToCSV{polname}</tt></a></li>
+<li><a class="reference internal" href="#polsturmchainlength-sturmname" id="id128"><tt class="docutils literal">\PolSturmChainLength{sturmname}</tt></a></li>
+<li><a class="reference internal" href="#polsturmifzeroexactlyknown-sturmname-index-a-b" id="id129"><tt class="docutils literal"><span class="pre">\PolSturmIfZeroExactlyKnown{sturmname}{index}{A}{B}</span></tt></a></li>
+<li><a class="reference internal" href="#polsturmisolatedzeroleft-sturmname-index" id="id130"><tt class="docutils literal"><span class="pre">\PolSturmIsolatedZeroLeft{sturmname}{index}</span></tt></a></li>
+<li><a class="reference internal" href="#polsturmisolatedzeroright-sturmname-index" id="id131"><tt class="docutils literal"><span class="pre">\PolSturmIsolatedZeroRight{sturmname}{index}</span></tt></a></li>
+<li><a class="reference internal" href="#polsturmisolatedzeromultiplicity-sturmname-index" id="id132"><tt class="docutils literal"><span class="pre">\PolSturmIsolatedZeroMultiplicity{sturmname}{index}</span></tt></a></li>
+<li><a class="reference internal" href="#polsturmnbofisolatedzeros-sturmname" id="id133"><tt class="docutils literal">\PolSturmNbOfIsolatedZeros{sturmname}</tt></a><ul>
+<li><a class="reference internal" href="#polsturmnbofrootsof-sturmname-lessthanorequalto-value" id="id134"><tt class="docutils literal"><span class="pre">\PolSturmNbOfRootsOf{sturmname}\LessThanOrEqualTo{value}</span></tt></a></li>
+<li><a class="reference internal" href="#polsturmnbofrootsof-sturmname-lessthanorequaltoexpr-expression" id="id135"><tt class="docutils literal"><span class="pre">\PolSturmNbOfRootsOf{sturmname}\LessThanOrEqualToExpr{expression}</span></tt></a></li>
+<li><a class="reference internal" href="#polsturmnbwithmultofrootsof-sturmname-lessthanorequalto-value" id="id136"><tt class="docutils literal"><span class="pre">\PolSturmNbWithMultOfRootsOf{sturmname}\LessThanOrEqualTo{value}</span></tt></a></li>
+<li><a class="reference internal" href="#polsturmnbwithmultofrootsof-sturmname-lessthanorequaltoexpr-expression" id="id137"><tt class="docutils literal"><span class="pre">\PolSturmNbWithMultOfRootsOf{sturmname}\LessThanOrEqualToExpr{expression}</span></tt></a></li>
</ul>
</li>
-<li><a class="reference internal" href="#booleans-with-default-setting-as-indicated" id="id132">Booleans (with default setting as indicated)</a><ul>
-<li><a class="reference internal" href="#xintverbosefalse" id="id133"><tt class="docutils literal">\xintverbosefalse</tt></a></li>
-<li><a class="reference internal" href="#poltypesetallfalse" id="id134"><tt class="docutils literal">\poltypesetallfalse</tt></a></li>
-<li><a class="reference internal" href="#poltoexprallfalse" id="id135"><tt class="docutils literal">\poltoexprallfalse</tt></a></li>
+<li><a class="reference internal" href="#polsturmnbofrationalroots-sturmname" id="id138"><tt class="docutils literal">\PolSturmNbOfRationalRoots{sturmname}</tt></a></li>
+<li><a class="reference internal" href="#polsturmnbofrationalrootswithmultiplicities-sturmname" id="id139"><tt class="docutils literal">\PolSturmNbOfRationalRootsWithMultiplicities{sturmname}</tt></a></li>
+<li><a class="reference internal" href="#polsturmrationalroot-sturmname-k" id="id140"><tt class="docutils literal"><span class="pre">\PolSturmRationalRoot{sturmname}{k}</span></tt></a></li>
+<li><a class="reference internal" href="#polsturmrationalrootindex-sturmname-k" id="id141"><tt class="docutils literal"><span class="pre">\PolSturmRationalRootIndex{sturmname}{k}</span></tt></a></li>
+<li><a class="reference internal" href="#polsturmrationalrootmultiplicity-sturmname-k" id="id142"><tt class="docutils literal"><span class="pre">\PolSturmRationalRootMultiplicity{sturmname}{k}</span></tt></a></li>
+<li><a class="reference internal" href="#polintervalwidth-sturmname-index" id="id143"><tt class="docutils literal"><span class="pre">\PolIntervalWidth{sturmname}{index}</span></tt></a></li>
+<li><a class="reference internal" href="#expandable-macros-for-use-within-execution-of-polprintintervals" id="id144">Expandable macros for use within execution of <tt class="docutils literal">\PolPrintIntervals</tt></a><ul>
+<li><a class="reference internal" href="#polprintintervalsthevar" id="id145"><tt class="docutils literal">\PolPrintIntervalsTheVar</tt></a></li>
+<li><a class="reference internal" href="#polprintintervalstheindex" id="id146"><tt class="docutils literal">\PolPrintIntervalsTheIndex</tt></a></li>
+<li><a class="reference internal" href="#polprintintervalsthesturmname" id="id147"><tt class="docutils literal">\PolPrintIntervalsTheSturmName</tt></a></li>
+<li><a class="reference internal" href="#polprintintervalstheleftendpoint" id="id148"><tt class="docutils literal">\PolPrintIntervalsTheLeftEndPoint</tt></a></li>
+<li><a class="reference internal" href="#polprintintervalstherightendpoint" id="id149"><tt class="docutils literal">\PolPrintIntervalsTheRightEndPoint</tt></a></li>
+<li><a class="reference internal" href="#polprintintervalsthemultiplicity" id="id150"><tt class="docutils literal">\PolPrintIntervalsTheMultiplicity</tt></a></li>
</ul>
</li>
-<li><a class="reference internal" href="#technicalities" id="id136">Technicalities</a></li>
-<li><a class="reference internal" href="#change-log" id="id137">CHANGE LOG</a></li>
-<li><a class="reference internal" href="#acknowledgments" id="id138">Acknowledgments</a></li>
+<li><a class="reference internal" href="#poldectostring-decimal-number" id="id151"><tt class="docutils literal">\PolDecToString{decimal number}</tt></a></li>
+</ul>
+</li>
+<li><a class="reference internal" href="#booleans-with-default-setting-as-indicated" id="id152">Booleans (with default setting as indicated)</a><ul>
+<li><a class="reference internal" href="#xintverbosefalse" id="id153"><tt class="docutils literal">\xintverbosefalse</tt></a></li>
+<li><a class="reference internal" href="#poltypesetallfalse" id="id154"><tt class="docutils literal">\poltypesetallfalse</tt></a></li>
+<li><a class="reference internal" href="#poltoexprallfalse" id="id155"><tt class="docutils literal">\poltoexprallfalse</tt></a></li>
+</ul>
+</li>
+<li><a class="reference internal" href="#polexprsetup" id="id156"><tt class="docutils literal">\polexprsetup</tt></a></li>
+<li><a class="reference internal" href="#technicalities" id="id157">Technicalities</a></li>
+<li><a class="reference internal" href="#change-log" id="id158">CHANGE LOG</a></li>
+<li><a class="reference internal" href="#acknowledgments" id="id159">Acknowledgments</a></li>
</ul>
</div>
-<div class="section" id="basic-examples">
-<h1><a class="toc-backref" href="#id36">Basic Examples</a></h1>
+<div class="section" id="basic-syntax">
+<h1><a class="toc-backref" href="#id38">Basic syntax</a></h1>
<p>The syntax is:</p>
<pre class="literal-block">
\poldef polname(x):= expression in variable x;
@@ -613,7 +636,7 @@ PSTricks-compatible; the letter used in output can be
</dl>
</div>
<div class="section" id="examples-of-localization-of-roots">
-<h1><a class="toc-backref" href="#id37">Examples of localization of roots</a></h1>
+<h1><a class="toc-backref" href="#id39">Examples of localization of roots</a></h1>
<ul>
<li><p class="first">To make printed decimal numbers more enjoyable than via
<tt class="docutils literal">\xintSignedFrac</tt>:</p>
@@ -632,17 +655,12 @@ that one can also do:</p>
</li>
<li><p class="first">For extra info in log file use <tt class="docutils literal">\xintverbosetrue</tt>.</p>
</li>
-<li><p class="first">To make producing this documentation simpler, the results from execution
-of the code snippets are not included. Please try them out yourself...</p>
+<li><p class="first">Only for some of these examples is the output included here.</p>
</li>
</ul>
<div class="section" id="a-typical-example">
-<h2><a class="toc-backref" href="#id38">A typical example</a></h2>
-<p>In this example the polynomial is square-free; we can make sure of that by
-comparing the degree of the first element of the Sturm chain with the
-degree of the original polynomial. In such case the second element of
-the Sturm chain is still the polynomial first derivative, because there
-was no further reduction.</p>
+<h2><a class="toc-backref" href="#id40">A typical example</a></h2>
+<p>In this example the polynomial is square-free.</p>
<pre class="literal-block">
\poldef f(x) := x^7 - x^6 - 2x + 1;
@@ -658,11 +676,11 @@ And here is the first root with twenty digits after decimal mark:
\PolEnsureIntervalLength{f}{1}{-20}
\[\PolSturmIsolatedZeroLeft{f}{1}&lt;Z_1&lt;\PolSturmIsolatedZeroRight{f}{1}\]
The first element of the Sturm chain has degree $\PolDegree{f_0}$. As
-this same as $\PolDegree{f}$ we know that the latter was square free.
-So the derivative is up to a constant \PolTypeset{f_1} (in fact here
+this is the original degreee $\PolDegree{f}$ we know that $f$ is square free.
+Its derivative is up to a constant \PolTypeset{f_1} (in this example
it is identical with it).
\PolToSturm{f_1}{f_1}\PolSturmIsolateZeros{f_1}%
-It has \PolSturmNbOfIsolatedZeros{f_1} distinct real
+The derivative has \PolSturmNbOfIsolatedZeros{f_1} distinct real
roots:
\PolPrintIntervals[W]{f_1}
\PolEnsureIntervalLengths{f_1}{-10}%
@@ -683,7 +701,12 @@ to give the exact value for $X_2$!
</pre>
</div>
<div class="section" id="a-degree-four-polynomial-with-nearby-roots">
-<h2><a class="toc-backref" href="#id39">A degree four polynomial with nearby roots</a></h2>
+<h2><a class="toc-backref" href="#id41">A degree four polynomial with nearby roots</a></h2>
+<p>Notice that this example is a bit outdated as <tt class="docutils literal">0.7</tt> release has
+added <tt class="docutils literal"><span class="pre">\PolSturmIsolateZeros**{sturmname}</span></tt> which would find exactly
+the roots. The steps here retain their interest when one is interested
+in finding isolating intervals for example to prepare some demonstration
+of dichotomy method.</p>
<pre class="literal-block">
\PolDef{Q}{(x-1.050001)(x-1.105001)(x-1.110501)(x-1.111051)}
\PolTypeset{Q}
@@ -706,7 +729,7 @@ to give the exact value for $X_2$!
</pre>
</div>
<div class="section" id="the-degree-nine-polynomial-with-0-99-0-999-0-9999-as-triple-roots">
-<h2><a class="toc-backref" href="#id40">The degree nine polynomial with 0.99, 0.999, 0.9999 as triple roots</a></h2>
+<h2><a class="toc-backref" href="#id42">The degree nine polynomial with 0.99, 0.999, 0.9999 as triple roots</a></h2>
<pre class="literal-block">
% define a user command (xinttools is loaded automatically by polexpr)
\newcommand\showmultiplicities[1]{% #1 = &quot;sturmname&quot;
@@ -738,10 +761,10 @@ The multiplicity is 3 at the root x = 0.99
The multiplicity is 3 at the root x = 0.999
The multiplicity is 3 at the root x = 0.9999
</pre>
-<p>On first pass, these rational roots were found. But multiplicity
-computation works also with (decimal) roots not yet identified or with
-non-decimal or irrational roots.</p>
-<p>Try it out!</p>
+<p>On first pass, these rational roots were found (due to their relative
+magnitudes, using <tt class="docutils literal">\PolSturmIsolateZeros**</tt> was not needed here). But
+multiplicity computation works also with (decimal) roots not yet
+identified or with non-decimal or irrational roots.</p>
<p>It is fun to modify only a tiny bit the polynomial and see if polexpr
survives:</p>
<pre class="literal-block">
@@ -776,10 +799,49 @@ The multiplicity is 1 for the root such that 0.9899888032 &lt; x &lt; 0.98998880
The multiplicity is 1 for the root such that 0.9991447980 &lt; x &lt; 0.9991447981
The multiplicity is 1 for the root such that 0.9997663986 &lt; x &lt; 0.9997663987
</pre>
-<p>Try obtaining this with your pocket calculator! (or IEEE-7554 numerics...)</p>
+</div>
+<div class="section" id="a-degree-five-polynomial-with-three-rational-roots">
+<h2><a class="toc-backref" href="#id43">A degree five polynomial with three rational roots</a></h2>
+<pre class="literal-block">
+\poldef Q(x) := 1581755751184441 x^5
+ -14907697165025339 x^4
+ +48415668972339336 x^3
+ -63952057791306264 x^2
+ +46833913221154895 x
+ -49044360626280925;
+
+\PolToSturm{Q}{Q}
+%\begin{flushleft}
+ \renewcommand\PolTypesetCmdPrefix[1]{\allowbreak\xintiiifSgn{#1}{}{+}{+}}%
+ $Q_0(x) = \PolTypeset{Q_0}$
+%\end{flushleft}
+\PolSturmIsolateZeros**{Q}
+\PolPrintIntervals{Q}
+
+$Q_norr(x) = \PolTypeset{Q_norr}$
+</pre>
+<p>Here, all real roots are rational:</p>
+<pre class="literal-block">
+Z_1 = 833719/265381
+Z_2 = 165707065/52746197
+Z_3 = 355/113
+
+Q_norr(x) = x^2 + 1
+</pre>
+<p>And let's get their decimal expansion too:</p>
+<pre class="literal-block">
+% print decimal expansion of the found roots
+\renewcommand\PolPrintIntervalsPrintExactZero
+ {\xintTrunc{20}{\PolPrintIntervalsTheLeftEndPoint}\dots}
+\PolPrintIntervals{Q}
+
+Z_1 = 3.14159265358107777120...
+Z_2 = 3.14159265358979340254...
+Z_3 = 3.14159292035398230088...
+</pre>
</div>
<div class="section" id="a-mignotte-type-polynomial">
-<h2><a class="toc-backref" href="#id41">A Mignotte type polynomial</a></h2>
+<h2><a class="toc-backref" href="#id44">A Mignotte type polynomial</a></h2>
<pre class="literal-block">
\PolDef{P}{x^10 - (10x-1)^2}%
\PolTypeset{P} % prints it in expanded form
@@ -805,8 +867,89 @@ Finally, we display 20 digits of the second root:
0.09999900004999650028 &lt; Z_2 &lt; 0.09999900004999650029
</pre>
</div>
+<div class="section" id="the-wilkinson-polynomial">
+<h2><a class="toc-backref" href="#id45">The Wilkinson polynomial</a></h2>
+<p>See <a class="reference external" href="https://en.wikipedia.org/wiki/Wilkinson%27s_polynomial">Wilkinson polynomial</a>.</p>
+<pre class="literal-block">
+\documentclass{article}
+\usepackage{polexpr}
+\begin{document}
+%\xintverbosetrue % for the curious...
+
+\poldef f(x) := mul((x - i), i = 1..20);
+
+\renewcommand\PolTypesetCmdPrefix[1]{\allowbreak\xintiiifSgn{#1}{}{+}{+}}%
+\renewcommand\PolTypesetOne[1]{\xintDecToString{#1}}%
+
+\noindent\PolTypeset{f}
+
+\PolToSturm{f}{f}
+\PolSturmIsolateZeros{f}
+\PolPrintIntervals{f}
+
+\clearpage
+
+\poldef g(x) := f(x) - 2**{-23} x**19;
+
+% be patient!
+\PolToSturm{g}{g}
+\noindent\PolTypeset{g_0}% integer coefficient primitive polynomial
+
+\PolSturmIsolateZeros{g}
+\PolEnsureIntervalLengths{g}{-10}
+
+\renewcommand\PolPrintIntervalsPrintMultiplicity{}
+\PolPrintIntervals*{g}
+
+\end{document}
+</pre>
+<p>The first polynomial:</p>
+<pre class="literal-block">
+f(x) = x**20
+- 210 x**19
++ 20615 x**18
+- 1256850 x**17
++ 53327946 x**16
+- 1672280820 x**15
++ 40171771630 x**14
+- 756111184500 x**13
++ 11310276995381 x**12
+- 135585182899530 x**11
++ 1307535010540395 x**10
+- 10142299865511450 x**9
++ 63030812099294896 x**8
+- 311333643161390640 x**7
++ 1206647803780373360 x**6
+- 3599979517947607200 x**5
++ 8037811822645051776 x**4
+- 12870931245150988800 x**3
++ 13803759753640704000 x**2
+- 8752948036761600000 x
++ 2432902008176640000
+</pre>
+<p>is handled fast enough (a few seconds), but the modified one <tt class="docutils literal">f(x) -
+<span class="pre">2**-23</span> <span class="pre">x**19</span></tt> takes about 20x longer (the Sturm chain polynomials
+have integer coefficients with up to 321 digits, whereas (surprisingly
+perhaps) those of the Sturm chain polynomials derived from <tt class="docutils literal">f</tt> never
+have more than 21 digits ...).</p>
+<p>Once the Sturm chain is computed and the zeros isolated, obtaining their
+decimal digits is relatively faster. Here is for the ten real roots of
+<tt class="docutils literal">f(x) - <span class="pre">2**-23</span> <span class="pre">x**19</span></tt> as computed by the code above:</p>
+<pre class="literal-block">
+Z_1 = 0.9999999999...
+Z_2 = 2.0000000000...
+Z_3 = 2.9999999999...
+Z_4 = 4.0000000002...
+Z_5 = 4.9999999275...
+Z_6 = 6.0000069439...
+Z_7 = 6.9996972339...
+Z_8 = 8.0072676034...
+Z_9 = 8.9172502485...
+Z_10 = 20.8469081014...
+</pre>
+</div>
<div class="section" id="the-degree-41-polynomial-with-2-1-9-1-8-0-0-1-1-9-2-as-roots">
-<h2><a class="toc-backref" href="#id42">The degree 41 polynomial with -2, -1.9, -1.8, ..., 0, 0.1, ..., 1.9, 2 as roots</a></h2>
+<h2><a class="toc-backref" href="#id46">The degree 41 polynomial with -2, -1.9, -1.8, ..., 0, 0.1, ..., 1.9, 2 as roots</a></h2>
<pre class="literal-block">
\PolDef{P}{mul((x-i*1e-1), i=-20..20)}% i/10 is same but less efficient
</pre>
@@ -845,26 +988,26 @@ x^41
<pre class="literal-block">
\PolDef{P}{mul((x-i*1e-1), i=-20..20)}%
\PolToSturm{P}{S} % dutifully computes S_0, ..., S_{41}
+% the [1] optional argument limits the search to interval (-10,10)
\PolSturmIsolateZeros[1]{S} % finds *exactly* (but a bit slowly) all 41 roots!
\PolPrintIntervals{S} % nice, isn't it?
</pre>
<div class="admonition note">
<p class="first admonition-title">Note</p>
-<p>Release <tt class="docutils literal">0.5</tt> has experimental addition of optional argument
+<p>Release <tt class="docutils literal">0.5</tt> has <em>experimental</em> addition of optional argument
<tt class="docutils literal">E</tt> to <tt class="docutils literal">\PolSturmIsolateZeros</tt>. It instructs to search roots only
-in interval <tt class="docutils literal"><span class="pre">(-10^E,</span> 10^E)</tt>, extremities assumed to not be roots.
-Thus here:</p>
-<pre class="literal-block">
-\PolSturmIsolateZeros[1]{S}
-</pre>
-<p>gives some speed gain; without it, it turns out in this case that
-<tt class="docutils literal">polexpr</tt> would have started with <tt class="docutils literal"><span class="pre">(-10^6,</span> 10^6)</tt> interval.</p>
-<p class="last">This will probably get replaced in future by the specification of
-a general interval.</p>
+in interval <tt class="docutils literal"><span class="pre">(-10^E,</span> 10^E)</tt>. Important: the extremities are
+<em>assumed to not be roots</em>. In this example, the <tt class="docutils literal">[1]</tt> in
+<tt class="docutils literal"><span class="pre">\PolSturmIsolateZeros[1]{S}</span></tt> gives some speed gain; without it, it
+turns out in this case that <tt class="docutils literal">polexpr</tt> would have started with
+<tt class="docutils literal"><span class="pre">(-10^6,</span> 10^6)</tt> interval.</p>
+<p class="last">Please note that this will probably get replaced in future by the
+specification of a general interval. Do not rely on meaning of this
+optional argument keeping the same.</p>
</div>
</div>
<div class="section" id="roots-of-chebyshev-polynomials">
-<h2><a class="toc-backref" href="#id43">Roots of Chebyshev polynomials</a></h2>
+<h2><a class="toc-backref" href="#id47">Roots of Chebyshev polynomials</a></h2>
<pre class="literal-block">
\newcount\mycount
\poldef T_0(x) := 1;
@@ -887,9 +1030,9 @@ a general interval.</p>
</div>
</div>
<div class="section" id="non-expandable-macros">
-<h1><a class="toc-backref" href="#id44">Non-expandable macros</a></h1>
+<h1><a class="toc-backref" href="#id48">Non-expandable macros</a></h1>
<div class="section" id="poldef-polname-letter-expression-in-letter">
-<span id="poldef"></span><h2><a class="toc-backref" href="#id45"><tt class="docutils literal">\poldef <span class="pre">polname(letter):=</span> expression in letter;</tt></a></h2>
+<span id="poldef"></span><h2><a class="toc-backref" href="#id49"><tt class="docutils literal">\poldef <span class="pre">polname(letter):=</span> expression in letter;</tt></a></h2>
<blockquote>
<p>This evaluates the <em>polynomial expression</em> and stores the coefficients
in a private structure accessible later via other package macros,
@@ -926,7 +1069,7 @@ manually, if needed.</p>
</blockquote>
</div>
<div class="section" id="poldef-letter-polname-expression-in-letter">
-<span id="id2"></span><h2><a class="toc-backref" href="#id46"><tt class="docutils literal"><span class="pre">\PolDef[letter]{polname}{expression</span> in letter}</tt></a></h2>
+<span id="id2"></span><h2><a class="toc-backref" href="#id50"><tt class="docutils literal"><span class="pre">\PolDef[letter]{polname}{expression</span> in letter}</tt></a></h2>
<blockquote>
Does the same as <a class="reference external" href="poldef;">\poldef</a> in an undelimited macro
format (thus avoiding potential problems with the catcode of the
@@ -934,7 +1077,7 @@ semi-colon in presence of some packages.) In absence of the
<tt class="docutils literal">[letter]</tt> optional argument, the variable is assumed to be <tt class="docutils literal">x</tt>.</blockquote>
</div>
<div class="section" id="polgenfloatvariant-polname">
-<span id="polgenfloatvariant"></span><h2><a class="toc-backref" href="#id47"><tt class="docutils literal">\PolGenFloatVariant{polname}</tt></a></h2>
+<span id="polgenfloatvariant"></span><h2><a class="toc-backref" href="#id51"><tt class="docutils literal">\PolGenFloatVariant{polname}</tt></a></h2>
<blockquote>
<p>Makes the polynomial also usable in the <tt class="docutils literal">\xintfloatexpr</tt> parser.
It will therein evaluates via an Horner scheme with coefficients
@@ -953,7 +1096,7 @@ context.</p>
</blockquote>
</div>
<div class="section" id="pollet-polname-2-polname-1">
-<span id="pollet"></span><h2><a class="toc-backref" href="#id48"><tt class="docutils literal"><span class="pre">\PolLet{polname_2}={polname_1}</span></tt></a></h2>
+<span id="pollet"></span><h2><a class="toc-backref" href="#id52"><tt class="docutils literal"><span class="pre">\PolLet{polname_2}={polname_1}</span></tt></a></h2>
<blockquote>
Makes a copy of the already defined polynomial <tt class="docutils literal">polname_1</tt> to a
new one <tt class="docutils literal">polname_2</tt>. Same effect as
@@ -961,12 +1104,12 @@ new one <tt class="docutils literal">polname_2</tt>. Same effect as
<tt class="docutils literal">=</tt> is optional.</blockquote>
</div>
<div class="section" id="polgloballet-polname-2-polname-1">
-<span id="polgloballet"></span><h2><a class="toc-backref" href="#id49"><tt class="docutils literal"><span class="pre">\PolGlobalLet{polname_2}={polname_1}</span></tt></a></h2>
+<span id="polgloballet"></span><h2><a class="toc-backref" href="#id53"><tt class="docutils literal"><span class="pre">\PolGlobalLet{polname_2}={polname_1}</span></tt></a></h2>
<blockquote>
Acts globally.</blockquote>
</div>
<div class="section" id="polassign-polname-toarray-macro">
-<span id="polassign"></span><h2><a class="toc-backref" href="#id50"><tt class="docutils literal"><span class="pre">\PolAssign{polname}\toarray\macro</span></tt></a></h2>
+<span id="polassign"></span><h2><a class="toc-backref" href="#id54"><tt class="docutils literal"><span class="pre">\PolAssign{polname}\toarray\macro</span></tt></a></h2>
<blockquote>
<p>Defines a one-argument expandable macro <tt class="docutils literal"><span class="pre">\macro{#1}</span></tt> which expands
to the (raw) #1th polynomial coefficient.</p>
@@ -989,7 +1132,7 @@ indices act the same in both.)</p>
</blockquote>
</div>
<div class="section" id="polget-polname-fromarray-macro">
-<span id="polget"></span><h2><a class="toc-backref" href="#id51"><tt class="docutils literal"><span class="pre">\PolGet{polname}\fromarray\macro</span></tt></a></h2>
+<span id="polget"></span><h2><a class="toc-backref" href="#id55"><tt class="docutils literal"><span class="pre">\PolGet{polname}\fromarray\macro</span></tt></a></h2>
<blockquote>
<p>Does the converse operation to
<tt class="docutils literal"><span class="pre">\PolAssign{polname}\toarray\macro</span></tt>. Each individual
@@ -1010,19 +1153,19 @@ via <a class="reference external" href="http://www.ctan.org/pkg/xint">xintfrac</
</blockquote>
</div>
<div class="section" id="polfromcsv-polname-csv">
-<span id="polfromcsv"></span><h2><a class="toc-backref" href="#id52"><tt class="docutils literal"><span class="pre">\PolFromCSV{polname}{&lt;csv&gt;}</span></tt></a></h2>
-<blockquote>
-<p>Defines a polynomial directly from the comma separated list of
-values (or a macro expanding to such a list) of its coefficients,
-the constant term being the first item. No validity checks. Spaces
-from the list argument are trimmed. List items are each expanded in
-an <tt class="docutils literal">\edef</tt> and then put into normalized form via <a class="reference external" href="http://www.ctan.org/pkg/xint">xintfrac</a>'s
-macro <tt class="docutils literal">\xintRaw</tt>.</p>
-<p>Leading zero coefficients are removed:</p>
+<span id="polfromcsv"></span><h2><a class="toc-backref" href="#id56"><tt class="docutils literal"><span class="pre">\PolFromCSV{polname}{&lt;csv&gt;}</span></tt></a></h2>
+<blockquote>
+<p>Defines a polynomial directly from the comma separated list of values
+(or a macro expanding to such a list) of its coefficients, the <em>first
+item</em> gives the constant term, the <em>last item</em> gives the leading
+coefficient, except if zero, then it is dropped (iteratively). List
+items are each expanded in an <tt class="docutils literal">\edef</tt> and then put into normalized
+form via <a class="reference external" href="http://www.ctan.org/pkg/xint">xintfrac</a>'s macro <tt class="docutils literal">\xintRaw</tt>.</p>
+<p>As leading zero coefficients are removed:</p>
<pre class="literal-block">
\PolFromCSV{f}{0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
</pre>
-<p>defines the zero polynomial, which has only one (zero) coefficient.</p>
+<p>defines the zero polynomial, which holds only one coefficient.</p>
<p>See also expandable macro <a class="reference internal" href="#poltocsv-polname">\PolToCSV</a>.</p>
<div class="admonition note">
<p class="first admonition-title">Note</p>
@@ -1032,7 +1175,7 @@ macro <tt class="docutils literal">\xintRaw</tt>.</p>
</blockquote>
</div>
<div class="section" id="poltypeset-polname">
-<span id="poltypeset"></span><h2><a class="toc-backref" href="#id53"><tt class="docutils literal">\PolTypeset{polname}</tt></a></h2>
+<span id="poltypeset"></span><h2><a class="toc-backref" href="#id57"><tt class="docutils literal">\PolTypeset{polname}</tt></a></h2>
<blockquote>
<p>Typesets in descending powers in math mode. It uses letter <tt class="docutils literal">x</tt> but
this can be changed via an optional argument:</p>
@@ -1046,7 +1189,7 @@ can be re-defined for customization. Their default definitions are
expandable, but this is not a requirement.</p>
</blockquote>
<div class="section" id="poltypesetcmd-raw-coeff">
-<span id="poltypesetcmd"></span><h3><a class="toc-backref" href="#id54"><tt class="docutils literal">\PolTypesetCmd{raw_coeff}</tt></a></h3>
+<span id="poltypesetcmd"></span><h3><a class="toc-backref" href="#id58"><tt class="docutils literal">\PolTypesetCmd{raw_coeff}</tt></a></h3>
<blockquote>
<p>Checks if the coefficient is <tt class="docutils literal">1</tt> or <tt class="docutils literal"><span class="pre">-1</span></tt> and then skips printing
the <tt class="docutils literal">1</tt>, except for the constant term. Also it sets conditional
@@ -1056,7 +1199,7 @@ minus one is handled by <a class="reference internal" href="#poltypesetone-raw-c
</blockquote>
</div>
<div class="section" id="poltypesetone-raw-coeff">
-<span id="poltypesetone"></span><h3><a class="toc-backref" href="#id55"><tt class="docutils literal">\PolTypesetOne{raw_coeff}</tt></a></h3>
+<span id="poltypesetone"></span><h3><a class="toc-backref" href="#id59"><tt class="docutils literal">\PolTypesetOne{raw_coeff}</tt></a></h3>
<blockquote>
<p>The default is <tt class="docutils literal">\xintSignedFrac</tt> but this macro is annoying as it
insists to use a power of ten, and not decimal notation.</p>
@@ -1081,7 +1224,7 @@ which uses decimal notation (at least for the numerator part).</p>
</blockquote>
</div>
<div class="section" id="id6">
-<span id="poltypesetmonomialcmd"></span><h3><a class="toc-backref" href="#id56"><tt class="docutils literal">\PolTypesetMonomialCmd</tt></a></h3>
+<span id="poltypesetmonomialcmd"></span><h3><a class="toc-backref" href="#id60"><tt class="docutils literal">\PolTypesetMonomialCmd</tt></a></h3>
<blockquote>
This decides how a monomial (in variable <tt class="docutils literal">\PolVar</tt> and with
exponent <tt class="docutils literal">\PolIndex</tt>) is to be printed. The default does nothing
@@ -1091,7 +1234,7 @@ for the constant term, <tt class="docutils literal">\PolVar</tt> for the first d
<tt class="docutils literal">\ifnum</tt> tests.</blockquote>
</div>
<div class="section" id="poltypesetcmdprefix-raw-coeff">
-<span id="poltypesetcmdprefix"></span><h3><a class="toc-backref" href="#id57"><tt class="docutils literal">\PolTypesetCmdPrefix{raw_coeff}</tt></a></h3>
+<span id="poltypesetcmdprefix"></span><h3><a class="toc-backref" href="#id61"><tt class="docutils literal">\PolTypesetCmdPrefix{raw_coeff}</tt></a></h3>
<blockquote>
Expands to a <tt class="docutils literal">+</tt> if the <tt class="docutils literal">raw_coeff</tt> is zero or positive, and to
nothing if <tt class="docutils literal">raw_coeff</tt> is negative, as in latter case the
@@ -1102,13 +1245,13 @@ for the first term.</blockquote>
</div>
</div>
<div class="section" id="id8">
-<span id="id7"></span><h2><a class="toc-backref" href="#id58"><tt class="docutils literal"><span class="pre">\PolTypeset*{polname}</span></tt></a></h2>
+<span id="id7"></span><h2><a class="toc-backref" href="#id62"><tt class="docutils literal"><span class="pre">\PolTypeset*{polname}</span></tt></a></h2>
<blockquote>
Typesets in ascending powers. Use e.g. <tt class="docutils literal">[h]</tt> optional argument
(after the <tt class="docutils literal">*</tt>) to use letter <tt class="docutils literal">h</tt> rather than <tt class="docutils literal">x</tt>.</blockquote>
</div>
<div class="section" id="poldiff-polname-1-polname-2">
-<span id="poldiff"></span><h2><a class="toc-backref" href="#id59"><tt class="docutils literal"><span class="pre">\PolDiff{polname_1}{polname_2}</span></tt></a></h2>
+<span id="poldiff"></span><h2><a class="toc-backref" href="#id63"><tt class="docutils literal"><span class="pre">\PolDiff{polname_1}{polname_2}</span></tt></a></h2>
<blockquote>
<p>This sets <tt class="docutils literal">polname_2</tt> to the first derivative of <tt class="docutils literal">polname_1</tt>. It
is allowed to issue <tt class="docutils literal"><span class="pre">\PolDiff{f}{f}</span></tt>, effectively replacing <tt class="docutils literal">f</tt>
@@ -1118,7 +1261,7 @@ by <tt class="docutils literal">f'</tt>.</p>
</blockquote>
</div>
<div class="section" id="poldiff-n-polname-1-polname-2">
-<span id="poldiff-n"></span><h2><a class="toc-backref" href="#id60"><tt class="docutils literal"><span class="pre">\PolDiff[N]{polname_1}{polname_2}</span></tt></a></h2>
+<span id="poldiff-n"></span><h2><a class="toc-backref" href="#id64"><tt class="docutils literal"><span class="pre">\PolDiff[N]{polname_1}{polname_2}</span></tt></a></h2>
<blockquote>
This sets <tt class="docutils literal">polname_2</tt> to the <tt class="docutils literal">N</tt>-th derivative of <tt class="docutils literal">polname_1</tt>.
Identical arguments is allowed. With <tt class="docutils literal">N=0</tt>, same effect as
@@ -1126,7 +1269,7 @@ Identical arguments is allowed. With <tt class="docutils literal">N=0</tt>, same
using <tt class="docutils literal">\PolAntiDiff</tt>.</blockquote>
</div>
<div class="section" id="polantidiff-polname-1-polname-2">
-<span id="polantidiff"></span><h2><a class="toc-backref" href="#id61"><tt class="docutils literal"><span class="pre">\PolAntiDiff{polname_1}{polname_2}</span></tt></a></h2>
+<span id="polantidiff"></span><h2><a class="toc-backref" href="#id65"><tt class="docutils literal"><span class="pre">\PolAntiDiff{polname_1}{polname_2}</span></tt></a></h2>
<blockquote>
<p>This sets <tt class="docutils literal">polname_2</tt> to the primitive of <tt class="docutils literal">polname_1</tt> vanishing
at zero.</p>
@@ -1135,32 +1278,32 @@ at zero.</p>
</blockquote>
</div>
<div class="section" id="polantidiff-n-polname-1-polname-2">
-<span id="polantidiff-n"></span><h2><a class="toc-backref" href="#id62"><tt class="docutils literal"><span class="pre">\PolAntiDiff[N]{polname_1}{polname_2}</span></tt></a></h2>
+<span id="polantidiff-n"></span><h2><a class="toc-backref" href="#id66"><tt class="docutils literal"><span class="pre">\PolAntiDiff[N]{polname_1}{polname_2}</span></tt></a></h2>
<blockquote>
This sets <tt class="docutils literal">polname_2</tt> to the result of <tt class="docutils literal">N</tt> successive integrations on
<tt class="docutils literal">polname_1</tt>. With negative <tt class="docutils literal">N</tt>, it switches to using <tt class="docutils literal">\PolDiff</tt>.</blockquote>
</div>
<div class="section" id="poldivide-polname-1-polname-2-polname-q-polname-r">
-<span id="poldivide"></span><h2><a class="toc-backref" href="#id63"><tt class="docutils literal"><span class="pre">\PolDivide{polname_1}{polname_2}{polname_Q}{polname_R}</span></tt></a></h2>
+<span id="poldivide"></span><h2><a class="toc-backref" href="#id67"><tt class="docutils literal"><span class="pre">\PolDivide{polname_1}{polname_2}{polname_Q}{polname_R}</span></tt></a></h2>
<blockquote>
This sets <tt class="docutils literal">polname_Q</tt> and <tt class="docutils literal">polname_R</tt> to be the quotient and
remainder in the Euclidean division of <tt class="docutils literal">polname_1</tt> by
<tt class="docutils literal">polname_2</tt>.</blockquote>
</div>
<div class="section" id="polquo-polname-1-polname-2-polname-q">
-<span id="polquo"></span><h2><a class="toc-backref" href="#id64"><tt class="docutils literal"><span class="pre">\PolQuo{polname_1}{polname_2}{polname_Q}</span></tt></a></h2>
+<span id="polquo"></span><h2><a class="toc-backref" href="#id68"><tt class="docutils literal"><span class="pre">\PolQuo{polname_1}{polname_2}{polname_Q}</span></tt></a></h2>
<blockquote>
This sets <tt class="docutils literal">polname_Q</tt> to be the quotient in the Euclidean division
of <tt class="docutils literal">polname_1</tt> by <tt class="docutils literal">polname_2</tt>.</blockquote>
</div>
<div class="section" id="polrem-polname-1-polname-2-polname-r">
-<span id="polrem"></span><h2><a class="toc-backref" href="#id65"><tt class="docutils literal"><span class="pre">\PolRem{polname_1}{polname_2}{polname_R}</span></tt></a></h2>
+<span id="polrem"></span><h2><a class="toc-backref" href="#id69"><tt class="docutils literal"><span class="pre">\PolRem{polname_1}{polname_2}{polname_R}</span></tt></a></h2>
<blockquote>
This sets <tt class="docutils literal">polname_R</tt> to be the remainder in the Euclidean division
of <tt class="docutils literal">polname_1</tt> by <tt class="docutils literal">polname_2</tt>.</blockquote>
</div>
<div class="section" id="polgcd-polname-1-polname-2-polname-gcd">
-<span id="polgcd"></span><h2><a class="toc-backref" href="#id66"><tt class="docutils literal"><span class="pre">\PolGCD{polname_1}{polname_2}{polname_GCD}</span></tt></a></h2>
+<span id="polgcd"></span><h2><a class="toc-backref" href="#id70"><tt class="docutils literal"><span class="pre">\PolGCD{polname_1}{polname_2}{polname_GCD}</span></tt></a></h2>
<blockquote>
This sets <tt class="docutils literal">polname_GCD</tt> to be the (monic) GCD of the two first
polynomials. It is a unitary polynomial except if both <tt class="docutils literal">polname_1</tt>
@@ -1186,7 +1329,7 @@ polynomial.</blockquote>
no common factor among the coefficients. -->
</div>
<div class="section" id="poltosturm-polname-sturmname">
-<span id="poltosturm"></span><h2><a class="toc-backref" href="#id67"><tt class="docutils literal"><span class="pre">\PolToSturm{polname}{sturmname}</span></tt></a></h2>
+<span id="poltosturm"></span><h2><a class="toc-backref" href="#id71"><tt class="docutils literal"><span class="pre">\PolToSturm{polname}{sturmname}</span></tt></a></h2>
<blockquote>
<p>With <tt class="docutils literal">polname</tt> being for example <tt class="docutils literal">P</tt>, the macro starts by
computing polynomials <tt class="docutils literal">P</tt> and <tt class="docutils literal">P'</tt>, then computes the (opposite
@@ -1219,19 +1362,22 @@ not done if this last one is the constant <tt class="docutils literal">1</tt> or
original polynomial was square-free. These polynomials are primitive
polynomials too, i.e. with integer coefficients having no common factor.</p>
<p>Thus <tt class="docutils literal">sturmname_0</tt> has exactly the same real and complex roots as
-polynomial <tt class="docutils literal">polname</tt>, but with each root now of multiplicity one.</p>
+polynomial <tt class="docutils literal">polname</tt>, but with each root now of multiplicity one:
+i.e. it is the &quot;square-free part&quot; of original polynomial <tt class="docutils literal">polname</tt>.</p>
<p>Notice that <tt class="docutils literal">sturmname_1</tt> isn't necessarily the derivative of
<tt class="docutils literal">sturmname_0</tt> due to the various normalizations.</p>
-<p>These polynomials <tt class="docutils literal">sturmname_k</tt> (contrarily to the
-<tt class="docutils literal">sturmname_k_</tt> ones) are usable after the macro execution but
-their main utility is for the execution of
-<a class="reference internal" href="#polsturmisolatezeros-sturmname">\PolSturmIsolateZeros{sturmname}</a>.</p>
+<p>The polynomials <tt class="docutils literal">sturmname_k</tt> main utility is for the execution of
+<a class="reference internal" href="#polsturmisolatezeros-sturmname">\PolSturmIsolateZeros{sturmname}</a>. Be careful not to use these
+names <tt class="docutils literal">sturmname_0</tt>, <tt class="docutils literal">sturmname_1</tt>, etc... for defining other
+polynomials after having done <tt class="docutils literal"><span class="pre">\PolToSturm{polname}{sturmname}</span> and
+before executing <span class="pre">``\PolSturmIsolateZeros{sturmname}</span></tt> else the
+latter will behave erroneously.</p>
<p><a class="reference internal" href="#polsturmchainlength-sturmname">\PolSturmChainLength{sturmname}</a> gives the index of the last
element of the Sturm chain.</p>
</blockquote>
</div>
<div class="section" id="id10">
-<span id="id9"></span><h2><a class="toc-backref" href="#id68"><tt class="docutils literal"><span class="pre">\PolToSturm*{polname}{sturmname}</span></tt></a></h2>
+<span id="id9"></span><h2><a class="toc-backref" href="#id72"><tt class="docutils literal"><span class="pre">\PolToSturm*{polname}{sturmname}</span></tt></a></h2>
<blockquote>
<p>Does the same as <a class="reference internal" href="#poltosturm">un-starred version</a> and additionally it
keeps for user usage the memory of the <em>un-normalized</em> Sturm chain
@@ -1242,10 +1388,20 @@ polynomials <tt class="docutils literal">sturmname_k_</tt>, <tt class="docutils
<p class="last">This behaviour was modified at <tt class="docutils literal">0.6</tt>, anyhow the macro was
broken at <tt class="docutils literal">0.5</tt>.</p>
</div>
+<div class="admonition hint">
+<p class="first admonition-title">Hint</p>
+<p class="last">The square-free part of <tt class="docutils literal">polname</tt> is <tt class="docutils literal">sturmname_0</tt>, and their
+quotient is the polynomial with name
+<tt class="docutils literal">sturname_\PolSturmChainLength{sturmname}_</tt>. It thus easy to
+set-up a loop iteratively computing the latter until the last one
+is a constant, thus obtaining the decomposition of an <tt class="docutils literal">f</tt> as
+a product <tt class="docutils literal">c f_1 f_2 f_3 ...</tt> of a constant and square-free (primitive)
+polynomials, where each <tt class="docutils literal">f_i</tt> divides its predecessor.</p>
+</div>
</blockquote>
</div>
<div class="section" id="polsettosturmchainsignchangesat-macro-sturmname-fraction">
-<span id="polsettosturmchainsignchangesat"></span><h2><a class="toc-backref" href="#id69"><tt class="docutils literal"><span class="pre">\PolSetToSturmChainSignChangesAt{\macro}{sturmname}{fraction}</span></tt></a></h2>
+<span id="polsettosturmchainsignchangesat"></span><h2><a class="toc-backref" href="#id73"><tt class="docutils literal"><span class="pre">\PolSetToSturmChainSignChangesAt{\macro}{sturmname}{fraction}</span></tt></a></h2>
<blockquote>
<p>Sets macro <tt class="docutils literal">\macro</tt> to the number of sign changes in the Sturm
chain with name prefix <tt class="docutils literal">sturmname</tt>, at location <tt class="docutils literal">fraction</tt>
@@ -1262,7 +1418,7 @@ use <tt class="docutils literal">[\empty]</tt> as extra optional argument.</p>
</blockquote>
</div>
<div class="section" id="polsettonbofzeroswithin-macro-sturmname-value-a-value-b">
-<span id="polsettonbofzeroswithin"></span><h2><a class="toc-backref" href="#id70"><tt class="docutils literal"><span class="pre">\PolSetToNbOfZerosWithin{\macro}{sturmname}{value_a}{value_b}</span></tt></a></h2>
+<span id="polsettonbofzeroswithin"></span><h2><a class="toc-backref" href="#id74"><tt class="docutils literal"><span class="pre">\PolSetToNbOfZerosWithin{\macro}{sturmname}{value_a}{value_b}</span></tt></a></h2>
<blockquote>
<p>Applies the <a class="reference external" href="https://en.wikipedia.org/wiki/Sturm%27s_theorem">Sturm Theorem</a> to set <tt class="docutils literal">\macro</tt> to the exact number
of <strong>distinct</strong> roots of <tt class="docutils literal">sturmname_0</tt> in the interval <tt class="docutils literal">(value_a,
@@ -1291,12 +1447,12 @@ which requires prior execution of
</blockquote>
</div>
<div class="section" id="polsturmisolatezeros-sturmname">
-<span id="polsturmisolatezeros"></span><h2><a class="toc-backref" href="#id71"><tt class="docutils literal">\PolSturmIsolateZeros{sturmname}</tt></a></h2>
+<span id="polsturmisolatezeros"></span><h2><a class="toc-backref" href="#id75"><tt class="docutils literal">\PolSturmIsolateZeros{sturmname}</tt></a></h2>
<blockquote>
-<p>First, it evaluates using <a class="reference external" href="https://en.wikipedia.org/wiki/Sturm%27s_theorem">Sturm theorem</a> the number of distinct
-real roots of <tt class="docutils literal">sturmname_0</tt>.</p>
-<div class="admonition note">
-<p class="first admonition-title">Note</p>
+<p>The macros locates, using <a class="reference external" href="https://en.wikipedia.org/wiki/Sturm%27s_theorem">Sturm theorem</a>, as many disjoint
+intervals as there are (real) roots.</p>
+<div class="admonition important">
+<p class="first admonition-title">Important</p>
<p>The Sturm chain must have been produced by an earlier
<a class="reference internal" href="#poltosturm-polname-sturmname">\PolToSturm{polname}{sturmname}</a>.</p>
<p>Why does this macro ask for argument the name of Sturm chain,
@@ -1311,47 +1467,63 @@ polynomials <tt class="docutils literal">f_0</tt>, <tt class="docutils literal">
to <tt class="docutils literal">\PolToSturm</tt> must have been made at any rate for
<tt class="docutils literal">\PolSturmIsolateZeros</tt> to be usable.</p>
</div>
-<p>Then it locates, again using <a class="reference external" href="https://en.wikipedia.org/wiki/Sturm%27s_theorem">Sturm theorem</a>, as many disjoint
-intervals as there are roots. Some intervals reduce to singleton
-which are roots. Non-singleton intervals get refined to make sure
-none of their two limit points is a root: they contain each a single
-root, in their respective interiors.</p>
-<!-- This procedure is covariant
-with the independent variable ``x`` becoming ``-x``.
-Hmm, pas sûr et trop fatigué -->
+<p>After its execution they are two types of such intervals (stored in
+memory and accessible via macros or <a class="reference external" href="http://www.ctan.org/pkg/xint">xintexpr</a> variables, see below):</p>
+<ul class="simple">
+<li>singleton <tt class="docutils literal">{a}</tt>: then <tt class="docutils literal">a</tt> is a root, (necessarily a decimal
+number, but not all such decimal numbers are exactly identified yet).</li>
+<li>open intervals <tt class="docutils literal">(a,b)</tt>: then there is exactly one root <tt class="docutils literal">z</tt>
+such that <tt class="docutils literal">a &lt; z &lt; b</tt>, and the end points are guaranteed to not
+be roots.</li>
+</ul>
<p>The interval boundaries are decimal numbers, originating
in iterated decimal subdivision from initial intervals
-<tt class="docutils literal"><span class="pre">(-10^E,</span> 0)</tt> and <tt class="docutils literal">(0, 10^E)</tt>; if zero is a root it is always
-identified individually. The non-singleton intervals are of the
+<tt class="docutils literal"><span class="pre">(-10^E,</span> 0)</tt> and <tt class="docutils literal">(0, 10^E)</tt> with <tt class="docutils literal">E</tt> chosen initially large
+enough so that all roots are enclosed; if zero is a root it is always
+identified as such. The non-singleton intervals are of the
type <tt class="docutils literal">(a/10^f, <span class="pre">(a+1)/10^f)</span></tt> with <tt class="docutils literal">a</tt> an integer, which is
-neither <tt class="docutils literal">0</tt> nor <tt class="docutils literal"><span class="pre">-1</span></tt>. Hence <tt class="docutils literal">a</tt> and <tt class="docutils literal">a+1</tt> are both positive
-or both negative.</p>
+neither <tt class="docutils literal">0</tt> nor <tt class="docutils literal"><span class="pre">-1</span></tt>. Hence either <tt class="docutils literal">a</tt> and <tt class="docutils literal">a+1</tt> are both positive
+or they are both negative.</p>
+<p>One does not <em>a priori</em> know what will be the lengths of these
+intervals (except that they are always powers of ten), they
+vary depending on how many digits two successive roots have in
+common in their respective decimal expansions.</p>
+<div class="admonition important">
+<p class="first admonition-title">Important</p>
+<p>If some two consecutive intervals share an end-point, no
+information is yet gained about the separation between the two
+roots which could at this stage be arbitrarily small.</p>
+<p class="last">See <a class="reference internal" href="#polrefineinterval-sturmname-index">\PolRefineInterval*{sturmname}{index}</a> which addresses
+this issue.</p>
+</div>
+<!-- This procedure is covariant
+with the independent variable ``x`` becoming ``-x``.
+Hmm, pas sûr et trop fatigué -->
<p>The interval boundaries (and exactly found roots) are made available
for future computations in <tt class="docutils literal">\xintexpr</tt>-essions or polynomial
definitions as variables <tt class="docutils literal">&lt;sturmname&gt;L_1</tt>,
<tt class="docutils literal">&lt;sturmname&gt;L_2</tt>, etc..., for the left end-points and
<tt class="docutils literal">&lt;sturmname&gt;R_1</tt>, <tt class="docutils literal">&lt;sturmname&gt;R_2</tt>, ..., for the right
end-points.</p>
-<p>Also two macro arrays (in the sense of
-<a class="reference external" href="http://www.ctan.org/pkg/xint">xinttools</a>'s <tt class="docutils literal">\xintAssignArray</tt>) are created for holding the
-interval end-points written out in standard decimal notation
-(see <a class="reference internal" href="#poldectostring-decimal-number">\PolDecToString{decimal number}</a>).
-To access these values, macros
-<a class="reference internal" href="#polsturmisolatedzeroleft-sturmname-index">\PolSturmIsolatedZeroLeft{sturmname}{index}</a> and
-<a class="reference internal" href="#polsturmisolatedzeroright-sturmname-index">\PolSturmIsolatedZeroRight{sturmname}{index}</a> are provided.</p>
+<p>Thus for example, if <tt class="docutils literal">sturmname</tt> is <tt class="docutils literal">f</tt>, one can use the
+<a class="reference external" href="http://www.ctan.org/pkg/xint">xintexpr</a> variables <tt class="docutils literal">fL_1</tt>, <tt class="docutils literal">fL_2</tt>, ... to refer in expressions
+to the left end-points (or to the exact root, if left and right end
+points coincide). Additionally, <a class="reference external" href="http://www.ctan.org/pkg/xint">xintexpr</a> variable <tt class="docutils literal">fZ_1_isknown</tt>
+will have value <tt class="docutils literal">1</tt> if the root in the first interval is known,
+and <tt class="docutils literal">0</tt> otherwise. And similarly for the other intervals.</p>
+<p>Also, macros <a class="reference internal" href="#polsturmisolatedzeroleft-sturmname-index">\PolSturmIsolatedZeroLeft{sturmname}{index}</a> and
+<a class="reference internal" href="#polsturmisolatedzeroright-sturmname-index">\PolSturmIsolatedZeroRight{sturmname}{index}</a> are provided which
+expand to these same values, written in decimal notation (i.e.
+pre-processed by <a class="reference internal" href="#poldectostring">\PolDecToString</a>.) And there
+is also <a class="reference internal" href="#polsturmifzeroexactlyknown-sturmname-index-a-b">\PolSturmIfZeroExactlyKnown{sturmname}{index}{A}{B}</a>.</p>
<div class="admonition important">
<p class="first admonition-title">Important</p>
-<p class="last">Trailing zeroes in these stored decimal numbers are significant:
-they are also present in the decimal expansion of the exact root.</p>
-</div>
-<div class="admonition note">
-<p class="first admonition-title">Note</p>
-<p class="last">The actual array macros are <tt class="docutils literal">\POL_ZeroInt&lt;sturmname&gt;L</tt> and
-<tt class="docutils literal">\POL_ZeroInt&lt;sturmname&gt;R</tt> but as these names use the
-non-letter character <tt class="docutils literal">_</tt> and possibly also digits from
-<tt class="docutils literal">sturmname</tt>, the accessor macros above have been made part of
-the package.</p>
+<p class="last">Trailing zeroes in the stored decimal numbers accessible via the
+macros are significant: they are also present in the decimal
+expansion of the exact root.</p>
</div>
+<p>These variables and macros are automatically updated when one next
+uses macros such as <a class="reference internal" href="#polrefineinterval-sturmname-index">\PolRefineInterval*{sturmname}{index}</a>.</p>
<p>The start of decimal expansion of a positive <tt class="docutils literal">k</tt>-th root is given
by <a class="reference internal" href="#polsturmisolatedzeroleft">\PolSturmIsolatedZeroLeft{sturmname}{k}</a>, and for a negative root it is given
by <a class="reference internal" href="#polsturmisolatedzeroright">PolSturmIsolatedZeroRight{sturmname}{k}</a>. These two decimal
@@ -1359,24 +1531,19 @@ numbers are either both zero or both of the same sign.</p>
<p>The number of distinct roots is obtainable expandably as
<a class="reference internal" href="#polsturmnbofisolatedzeros-sturmname">\PolSturmNbOfIsolatedZeros{sturmname}</a>.</p>
<p>Furthermore
-<a class="reference internal" href="#polsturmnbofrootsof-sturmname-lessthanorequalto-value">\PolSturmNbOfRootsOf{sturmname}\LessThanOrEqualTo{value}</a>
-and
+<a class="reference internal" href="#polsturmnbofrootsof-sturmname-lessthanorequalto-value">\PolSturmNbOfRootsOf{sturmname}\LessThanOrEqualTo{value}</a> and
<a class="reference internal" href="#polsturmnbofrootsof-sturmname-lessthanorequaltoexpr-expression">\PolSturmNbOfRootsOf{sturmname}\LessThanOrEqualToExpr{expression}</a>.
-will expandably act as their names indicate.</p>
+will expandably compute respectively the number of real roots at
+most equal to <tt class="docutils literal">value</tt> or <tt class="docutils literal">expression</tt>, and the same but with
+multiplicities.</p>
<div class="admonition note">
<p class="first admonition-title">Note</p>
-<p class="last">In the current implementation the <tt class="docutils literal"><span class="pre">&lt;sturmname&gt;...</span></tt> <a class="reference external" href="http://www.ctan.org/pkg/xint">xintexpr</a> variables
-and the <tt class="docutils literal"><span class="pre">\POL_ZeroInt...</span></tt> arrays are globally defined. On the
+<p class="last">In the current implementation the <a class="reference external" href="http://www.ctan.org/pkg/xint">xintexpr</a> variables
+and <a class="reference external" href="http://www.ctan.org/pkg/xint">xinttools</a> arrays are globally defined. On the
other hand the Sturm sequence polynomials obey the current scope.</p>
</div>
<div class="admonition note">
<p class="first admonition-title">Note</p>
-<p class="last">When two successive roots are located in adjacent intervals, the
-separation between them is not lower bounded. See
-<a class="reference internal" href="#polrefineinterval-sturmname-index">\PolRefineInterval*{sturmname}{index}</a>.</p>
-</div>
-<div class="admonition note">
-<p class="first admonition-title">Note</p>
<p>As all computations are done <em>exactly</em> there can be no errors...
apart those due to bad coding by author. The results are exact
bounds for the mathematically exact real roots.</p>
@@ -1390,7 +1557,7 @@ are studied in numerical mathematics.</p>
</blockquote>
</div>
<div class="section" id="id12">
-<span id="id11"></span><h2><a class="toc-backref" href="#id72"><tt class="docutils literal"><span class="pre">\PolSturmIsolateZeros*{sturmname}</span></tt></a></h2>
+<span id="id11"></span><h2><a class="toc-backref" href="#id76"><tt class="docutils literal"><span class="pre">\PolSturmIsolateZeros*{sturmname}</span></tt></a></h2>
<blockquote>
<p>The macro does the same as <a class="reference internal" href="#polsturmisolatezeros-sturmname">\PolSturmIsolateZeros{sturmname}</a> and
then in addition it does the extra work to determine all
@@ -1400,9 +1567,9 @@ after executing this macro,
to the multiplicity of the root located in the <tt class="docutils literal">index</tt>-th
interval (intervals are enumerated from left to right, with index
starting at <tt class="docutils literal">1</tt>).</p>
-<p>Also, the
-<a class="reference internal" href="#polsturmnbwithmultofrootsof-sturmname-lessthanorequalto-value">\PolSturmNbWithMultOfRootsOf{sturmname}\LessThanOrEqualTo{value}</a>
-will be operant.</p>
+<p>Furthermore, if for example the <tt class="docutils literal">sturmname</tt> is <tt class="docutils literal">f</tt>, <a class="reference external" href="http://www.ctan.org/pkg/xint">xintexpr</a>
+variables <tt class="docutils literal">fM_1</tt>, <tt class="docutils literal">fM_2</tt>... hold the multiplicities thus
+computed.</p>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last">It is <strong>not</strong> necessary to have executed the <a class="reference internal" href="#id9">PolToSturm*</a> starred
@@ -1412,19 +1579,76 @@ chain), even though it does not make the declarations as <em>user-level</em>
genuine polynomials.</p>
</div>
<p>See <a class="reference internal" href="#the-degree-nine-polynomial-with-0-99-0-999-0-9999-as-triple-roots">The degree nine polynomial with 0.99, 0.999, 0.9999 as triple
-roots</a> for an example of use.</p>
+roots</a> for an example.</p>
+</blockquote>
+</div>
+<div class="section" id="id14">
+<span id="id13"></span><h2><a class="toc-backref" href="#id77"><tt class="docutils literal"><span class="pre">\PolSturmIsolateZeros**{sturmname}</span></tt></a></h2>
+<blockquote>
+<p>The macro does the same as <a class="reference internal" href="#id12">\PolSturmIsolateZeros*{sturmname}</a> and
+in addition it does the extra work to determine all the <em>rational</em>
+roots.</p>
+<div class="admonition note">
+<p class="first admonition-title">Note</p>
+<p class="last">After execution of this macro, a root is &quot;known&quot; if and only if
+it is rational.</p>
+</div>
+<p>Furthermore, primitive polynomial <tt class="docutils literal">sturmname_sqf_norr</tt> is created
+to match the (square-free) <tt class="docutils literal">sturmname_0</tt> from which all rational
+roots have been removed (see <a class="reference internal" href="#polexprsetup">\polexprsetup</a> for customizing this
+name). The number of distinct rational roots is thus the difference
+between the degrees of these two polynomials (see also
+<a class="reference internal" href="#polsturmnbofrationalroots-sturmname">\PolSturmNbOfRationalRoots{sturmname}</a>).</p>
+<p>And <tt class="docutils literal">sturmname_norr</tt> is <tt class="docutils literal">sturmname_0_</tt> from which all rational
+roots have been removed (see <a class="reference internal" href="#polexprsetup">\polexprsetup</a>), i.e. it contains
+the irrational roots of the original polynomial, with the same
+multiplicities.</p>
+<p>See <a class="reference internal" href="#a-degree-five-polynomial-with-three-rational-roots">A degree five polynomial with three rational
+roots</a> for an example.</p>
</blockquote>
</div>
<div class="section" id="polsturmisolatezerosandgetmultiplicities-sturmname">
-<span id="polsturmisolatezerosandgetmultiplicities"></span><h2><a class="toc-backref" href="#id73"><tt class="docutils literal">\PolSturmIsolateZerosAndGetMultiplicities{sturmname}</tt></a></h2>
+<span id="polsturmisolatezerosandgetmultiplicities"></span><h2><a class="toc-backref" href="#id78"><tt class="docutils literal">\PolSturmIsolateZerosAndGetMultiplicities{sturmname}</tt></a></h2>
<blockquote>
-<p>This is another name for <a class="reference internal" href="#id12">\PolSturmIsolateZeros*{sturmname}</a>.</p>
-<p>See <a class="reference internal" href="#the-degree-nine-polynomial-with-0-99-0-999-0-9999-as-triple-roots">The degree nine polynomial with 0.99, 0.999, 0.9999 as triple
-roots</a> for an example of use.</p>
+This is another name for <a class="reference internal" href="#id12">\PolSturmIsolateZeros*{sturmname}</a>.</blockquote>
+</div>
+<div class="section" id="polsturmisolatezerosgetmultiplicitiesandrationalroots-sturmname">
+<span id="polsturmisolatezerosgetmultiplicitiesandrationalroots"></span><h2><a class="toc-backref" href="#id79"><tt class="docutils literal">\PolSturmIsolateZerosGetMultiplicitiesAndRationalRoots{sturmname}</tt></a></h2>
+<blockquote>
+This is another name for <a class="reference internal" href="#id14">\PolSturmIsolateZeros**{sturmname}</a>.</blockquote>
+</div>
+<div class="section" id="polsturmisolatezerosandfindrationalroots-sturmname">
+<h2><a class="toc-backref" href="#id80"><tt class="docutils literal">\PolSturmIsolateZerosAndFindRationalRoots{sturmname}</tt></a></h2>
+<blockquote>
+<p>This works exactly like <a class="reference internal" href="#id14">\PolSturmIsolateZeros**{sturmname}</a>
+(inclusive of declaring the polynomials <tt class="docutils literal">sturmname_sqf_norr</tt> and
+<tt class="docutils literal">sturmname_norr</tt> with no rational roots) except that it does <em>not</em>
+compute the multiplicities of the <em>non-rational</em> roots.</p>
+<div class="admonition note">
+<p class="first admonition-title">Note</p>
+<p class="last">There is no macro to find the rational roots but not compute
+their multiplicities at the same time.</p>
+</div>
+<div class="admonition attention">
+<p class="first admonition-title">Attention!</p>
+<p>This macro does <em>not</em> define <a class="reference external" href="http://www.ctan.org/pkg/xint">xintexpr</a> variables
+<tt class="docutils literal">sturmnameM_1</tt>, <tt class="docutils literal">sturmnameM_2</tt>, ... holding the
+multiplicities and it leaves the multiplicity array (whose accessor
+is <a class="reference internal" href="#polsturmisolatedzeromultiplicity-sturmname-index">\PolSturmIsolatedZeroMultiplicity{sturmname}{index}</a>) into
+a broken state, as all non-rational roots will supposedly have
+multiplicity one. This means that the output of
+<a class="reference internal" href="#id18">\PolPrintIntervals*</a> for example will be
+erroneous for the intervals with irrational roots.</p>
+<p class="last">I decided to document it because finding multiplicities of the
+non rational roots is somewhat costly, and one may be interested
+only into finding the rational roots (of course random
+polynomials with integer coefficients will not have <em>any</em>
+rational root anyhow).</p>
+</div>
</blockquote>
</div>
<div class="section" id="polrefineinterval-sturmname-index">
-<span id="polrefineinterval"></span><h2><a class="toc-backref" href="#id74"><tt class="docutils literal"><span class="pre">\PolRefineInterval*{sturmname}{index}</span></tt></a></h2>
+<span id="polrefineinterval"></span><h2><a class="toc-backref" href="#id81"><tt class="docutils literal"><span class="pre">\PolRefineInterval*{sturmname}{index}</span></tt></a></h2>
<blockquote>
The <tt class="docutils literal">index</tt>-th interval (starting indexing at one) is further
subdivided as many times as is necessary in order for the newer
@@ -1433,21 +1657,21 @@ the original interval. This means that the <tt class="docutils literal">k</tt>th
strictly separated from the other roots.</blockquote>
</div>
<div class="section" id="polrefineinterval-n-sturmname-index">
-<span id="polrefineinterval-n"></span><h2><a class="toc-backref" href="#id75"><tt class="docutils literal"><span class="pre">\PolRefineInterval[N]{sturmname}{index}</span></tt></a></h2>
+<span id="polrefineinterval-n"></span><h2><a class="toc-backref" href="#id82"><tt class="docutils literal"><span class="pre">\PolRefineInterval[N]{sturmname}{index}</span></tt></a></h2>
<blockquote>
The <tt class="docutils literal">index</tt>-th interval (starting count at one) is further
subdivided once, reducing its length by a factor of 10. This is done
<tt class="docutils literal">N</tt> times if the optional argument <tt class="docutils literal">[N]</tt> is present.</blockquote>
</div>
<div class="section" id="polensureintervallength-sturmname-index-e">
-<span id="polensureintervallength"></span><h2><a class="toc-backref" href="#id76"><tt class="docutils literal"><span class="pre">\PolEnsureIntervalLength{sturmname}{index}{E}</span></tt></a></h2>
+<span id="polensureintervallength"></span><h2><a class="toc-backref" href="#id83"><tt class="docutils literal"><span class="pre">\PolEnsureIntervalLength{sturmname}{index}{E}</span></tt></a></h2>
<blockquote>
The <tt class="docutils literal">index</tt>-th interval is subdivided until its length becomes at
most <tt class="docutils literal">10^E</tt>. This means (for <tt class="docutils literal">E&lt;0</tt>) that the first <tt class="docutils literal"><span class="pre">-E</span></tt> digits
after decimal mark of the <tt class="docutils literal">k</tt>th root will then be known exactly.</blockquote>
</div>
<div class="section" id="polensureintervallengths-sturmname-e">
-<span id="polensureintervallengths"></span><h2><a class="toc-backref" href="#id77"><tt class="docutils literal"><span class="pre">\PolEnsureIntervalLengths{sturmname}{E}</span></tt></a></h2>
+<span id="polensureintervallengths"></span><h2><a class="toc-backref" href="#id84"><tt class="docutils literal"><span class="pre">\PolEnsureIntervalLengths{sturmname}{E}</span></tt></a></h2>
<blockquote>
<p>The intervals as obtained from <tt class="docutils literal">\PolSturmIsolateZeros</tt> are (if
necessary) subdivided further by (base 10) dichotomy in order for
@@ -1458,63 +1682,136 @@ than <tt class="docutils literal">10^E</tt> in output only if it did not change
</blockquote>
</div>
<div class="section" id="polprintintervals-varname-sturmname">
-<span id="polprintintervals"></span><h2><a class="toc-backref" href="#id78"><tt class="docutils literal"><span class="pre">\PolPrintIntervals[varname]{sturmname}</span></tt></a></h2>
+<span id="polprintintervals"></span><h2><a class="toc-backref" href="#id85"><tt class="docutils literal"><span class="pre">\PolPrintIntervals[varname]{sturmname}</span></tt></a></h2>
<blockquote>
<p>This is a convenience macro which prints the bounds for the roots
<tt class="docutils literal">Z_1</tt>, <tt class="docutils literal">Z_2</tt>, ... (the optional argument <tt class="docutils literal">varname</tt> allows to
-specify a replacement for the default <tt class="docutils literal">Z</tt>). This will be done in a
+specify a replacement for the default <tt class="docutils literal">Z</tt>). This will be done (by
+default) in a
math mode <tt class="docutils literal">array</tt>, one interval per row, and pattern <tt class="docutils literal">rcccl</tt>,
where the second and fourth column hold the <tt class="docutils literal">&lt;</tt> sign, except when
the interval reduces to a singleton, which means the root is known
-exactly. The user is invited to renewcommand the macro if some other
-type of tabular environment for example is wanted.</p>
-<p>In each array cell the corresponding interval end-point (which may
-be an exactly known root) is available as macro
-<a class="reference internal" href="#polprintintervalstheendpoint">\PolPrintIntervalsTheEndPoint</a> (in decimal notation). And the
-corresponding interval index is available as
-<a class="reference internal" href="#polprintintervalstheindex">\PolPrintIntervalsTheIndex</a>.</p>
-<p>These values may be tested to decide some on-the-fly customization
-(color for example), via the following auxiliaries which can be
-modified by user. Furthermore these auxiliaries can also use the
-following conditionals: <a class="reference internal" href="#polifendpointispositive-a-b">\PolIfEndPointIsPositive{A}{B}</a>,
-<a class="reference internal" href="#polifendpointisnegative-a-b">\PolIfEndPointIsNegative{A}{B}</a>, <a class="reference internal" href="#polifendpointiszero-a-b">\PolIfEndPointIsZero{A}{B}</a>.</p>
+exactly.</p>
+<div class="admonition attention">
+<p class="first admonition-title">Attention!</p>
+<p class="last">This macro was refactored at 0.7, its default output remained
+identical but the ways to customize it got completely
+modified.</p>
+</div>
+<p>See next macros which govern its output.</p>
</blockquote>
-<div class="section" id="id13">
-<span id="polprintintervalsprintexactzero"></span><h3><a class="toc-backref" href="#id79"><tt class="docutils literal">\PolPrintIntervalsPrintExactZero</tt></a></h3>
+<div class="section" id="polprintintervalsnorealroots">
+<h3><a class="toc-backref" href="#id86"><tt class="docutils literal">\PolPrintIntervalsNoRealRoots</tt></a></h3>
<blockquote>
-<p>This is provided to help customize how an exactly known root is
-printed in the right most column of the array. The package
-definition is:</p>
+<p>Executed in place of an <tt class="docutils literal">array</tt> environment, when there are no
+real roots. Default definition:</p>
<pre class="literal-block">
-\newcommand\PolPrintIntervalsPrintExactZero{\PolPrintIntervalsTheEndPoint}%
+\newcommand\PolPrintIntervalsNoRealRoots{}
</pre>
-<p>Recall that this is expanded in an array cell.</p>
-<p>If for example you want to print in red the third root, known
-exactly, the macro could make a test for the value of
-<a class="reference internal" href="#polprintintervalstheindex">\PolPrintIntervalsTheIndex</a> and act accordingly.</p>
</blockquote>
</div>
-<div class="section" id="id14">
-<span id="polprintintervalsprintleftendpoint"></span><h3><a class="toc-backref" href="#id80"><tt class="docutils literal">\PolPrintIntervalsPrintLeftEndPoint</tt></a></h3>
+<div class="section" id="polprintintervalsbeginenv">
+<h3><a class="toc-backref" href="#id87"><tt class="docutils literal">\PolPrintIntervalsBeginEnv</tt></a></h3>
+<blockquote>
+<p>Default definition:</p>
+<pre class="literal-block">
+\newcommand\PolPrintIntervalsBeginEnv{\[\begin{array}{rcccl}}
+</pre>
+</blockquote>
+</div>
+<div class="section" id="polprintintervalsendenv">
+<h3><a class="toc-backref" href="#id88"><tt class="docutils literal">\PolPrintIntervalsEndEnv</tt></a></h3>
+<blockquote>
+<p>Default definition:</p>
+<pre class="literal-block">
+\newcommand\PolPrintIntervalsEndEnv{\end{array}\]}
+</pre>
+</blockquote>
+</div>
+<div class="section" id="polprintintervalsknownroot">
+<h3><a class="toc-backref" href="#id89"><tt class="docutils literal">\PolPrintIntervalsKnownRoot</tt></a></h3>
+<blockquote>
+<p>Default definition:</p>
+<pre class="literal-block">
+\newcommand\PolPrintIntervalsKnownRoot{%
+ &amp;&amp;\PolPrintIntervalsTheVar_{\PolPrintIntervalsTheIndex}%
+ &amp;=&amp;\PolPrintIntervalsPrintExactZero
+}
+</pre>
+</blockquote>
+</div>
+<div class="section" id="polprintintervalsunknownroot">
+<h3><a class="toc-backref" href="#id90"><tt class="docutils literal">\PolPrintIntervalsUnknownRoot</tt></a></h3>
<blockquote>
-<p>Package definition is:</p>
+<p>Default definition:</p>
<pre class="literal-block">
-\newcommand\PolPrintIntervalsPrintLeftEndPoint{\PolPrintIntervalsTheEndPoint}%
+\newcommand\PolPrintIntervalsUnknownRoot{%
+ \PolPrintIntervalsPrintLeftEndPoint&amp;&lt;&amp;%
+ \PolPrintIntervalsTheVar_{\PolPrintIntervalsTheIndex}&amp;&lt;&amp;%
+ \PolPrintIntervalsPrintRightEndPoint
+}
</pre>
</blockquote>
</div>
<div class="section" id="id15">
-<span id="polprintintervalsprintrightendpoint"></span><h3><a class="toc-backref" href="#id81"><tt class="docutils literal">\PolPrintIntervalsPrintRightEndPoint</tt></a></h3>
+<span id="polprintintervalsprintexactzero"></span><h3><a class="toc-backref" href="#id91"><tt class="docutils literal">\PolPrintIntervalsPrintExactZero</tt></a></h3>
<blockquote>
-<p>Package definition is:</p>
+<p>Default definition:</p>
<pre class="literal-block">
-\newcommand\PolPrintIntervalsPrintRightEndPoint{\PolPrintIntervalsTheEndPoint}%
+\newcommand\PolPrintIntervalsPrintExactZero{\PolPrintIntervalsTheLeftEndPoint}
+</pre>
+</blockquote>
+</div>
+<div class="section" id="id16">
+<span id="polprintintervalsprintleftendpoint"></span><h3><a class="toc-backref" href="#id92"><tt class="docutils literal">\PolPrintIntervalsPrintLeftEndPoint</tt></a></h3>
+<blockquote>
+<p>Default definition:</p>
+<pre class="literal-block">
+\newcommand\PolPrintIntervalsPrintLeftEndPoint{\PolPrintIntervalsTheLeftEndPoint}
+</pre>
+</blockquote>
+</div>
+<div class="section" id="id17">
+<span id="polprintintervalsprintrightendpoint"></span><h3><a class="toc-backref" href="#id93"><tt class="docutils literal">\PolPrintIntervalsPrintRightEndPoint</tt></a></h3>
+<blockquote>
+<p>Default definition is:</p>
+<pre class="literal-block">
+\newcommand\PolPrintIntervalsPrintRightEndPoint{\PolPrintIntervalsTheRightEndPoint}
+</pre>
+</blockquote>
+</div>
+</div>
+<div class="section" id="id19">
+<span id="id18"></span><h2><a class="toc-backref" href="#id94"><tt class="docutils literal"><span class="pre">\PolPrintIntervals*[varname]{sturmname}</span></tt></a></h2>
+<blockquote>
+<p>This starred variant produces an alternative output (which
+displays the root multiplicity), and is provided as an
+example of customization.</p>
+<p>As replacement for <a class="reference internal" href="#polprintintervalsknownroot">\PolPrintIntervalsKnownRoot</a>,
+<a class="reference internal" href="#polprintintervalsprintexactzero">\PolPrintIntervalsPrintExactZero</a>,
+<a class="reference internal" href="#polprintintervalsunknownroot">\PolPrintIntervalsUnknownRoot</a> it uses its own
+<tt class="docutils literal"><span class="pre">\POL&#64;&#64;PrintIntervals...</span></tt> macros. We only reproduce here one
+definition:</p>
+<pre class="literal-block">
+\newcommand\POL&#64;&#64;PrintIntervalsPrintExactZero{%
+ \displaystyle
+ \xintSignedFrac{\PolPrintIntervalsTheLeftEndPoint}%
+}%
+</pre>
+<p>Multiplicities are printed using this auxiliary macro:</p>
+</blockquote>
+<div class="section" id="polprintintervalsprintmultiplicity">
+<h3><a class="toc-backref" href="#id95"><tt class="docutils literal">\PolPrintIntervalsPrintMultiplicity</tt></a></h3>
+<blockquote>
+<p>whose default definition is:</p>
+<pre class="literal-block">
+\newcommand\PolPrintIntervalsPrintMultiplicity{(\mbox{mult. }\PolPrintIntervalsTheMultiplicity)}
</pre>
</blockquote>
</div>
</div>
<div class="section" id="polmapcoeffs-macro-polname">
-<span id="polmapcoeffs"></span><h2><a class="toc-backref" href="#id82"><tt class="docutils literal"><span class="pre">\PolMapCoeffs{\macro}{polname}</span></tt></a></h2>
+<span id="polmapcoeffs"></span><h2><a class="toc-backref" href="#id96"><tt class="docutils literal"><span class="pre">\PolMapCoeffs{\macro}{polname}</span></tt></a></h2>
<blockquote>
<p>It modifies ('in-place': original coefficients get lost) each
coefficient of the defined polynomial via the <em>expandable</em> macro
@@ -1534,15 +1831,15 @@ will have to be expressed in terms of macros from <a class="reference external"
</blockquote>
</div>
<div class="section" id="polreducecoeffs-polname">
-<span id="polreducecoeffs"></span><h2><a class="toc-backref" href="#id83"><tt class="docutils literal">\PolReduceCoeffs{polname}</tt></a></h2>
+<span id="polreducecoeffs"></span><h2><a class="toc-backref" href="#id97"><tt class="docutils literal">\PolReduceCoeffs{polname}</tt></a></h2>
<blockquote>
About the same as <tt class="docutils literal"><span class="pre">\PolMapCoeffs{\xintIrr}{polname}</span></tt> (but
maintaining a <tt class="docutils literal">[0]</tt> postfix for speedier <a class="reference external" href="http://www.ctan.org/pkg/xint">xintfrac</a> parsing when
polynomial function is used for computations.) This is a
one-argument macro, working 'in-place'.</blockquote>
</div>
-<div class="section" id="id17">
-<span id="id16"></span><h2><a class="toc-backref" href="#id84"><tt class="docutils literal"><span class="pre">\PolReduceCoeffs*{polname}</span></tt></a></h2>
+<div class="section" id="id21">
+<span id="id20"></span><h2><a class="toc-backref" href="#id98"><tt class="docutils literal"><span class="pre">\PolReduceCoeffs*{polname}</span></tt></a></h2>
<blockquote>
<p>This starred variant leaves un-touched the decimal exponent in the
internal representation of the fractional coefficients, i.e. if a
@@ -1561,16 +1858,16 @@ expansion speed of the <a class="reference external" href="http://www.ctan.org/p
</blockquote>
</div>
<div class="section" id="polmakemonic-polname">
-<span id="polmakemonic"></span><h2><a class="toc-backref" href="#id85"><tt class="docutils literal">\PolMakeMonic{polname}</tt></a></h2>
+<span id="polmakemonic"></span><h2><a class="toc-backref" href="#id99"><tt class="docutils literal">\PolMakeMonic{polname}</tt></a></h2>
<blockquote>
Divides by the leading coefficient. It is recommended to execute
-<a class="reference internal" href="#id17">\PolReduceCoeffs*{polname}</a> immediately afterwards. This is not
+<a class="reference internal" href="#id21">\PolReduceCoeffs*{polname}</a> immediately afterwards. This is not
done automatically, due to the case the original polynomial had integer
coefficients and we want to keep the leading one as common
denominator.</blockquote>
</div>
<div class="section" id="polmakeprimitive-polname">
-<span id="polmakeprimitive"></span><h2><a class="toc-backref" href="#id86"><tt class="docutils literal">\PolMakePrimitive{polname}</tt></a></h2>
+<span id="polmakeprimitive"></span><h2><a class="toc-backref" href="#id100"><tt class="docutils literal">\PolMakePrimitive{polname}</tt></a></h2>
<blockquote>
Divides by the integer content see (<a class="reference internal" href="#policontent">\PolIContent</a>). This thus produces a polynomial with integer
coefficients having no common factor. The sign of the leading
@@ -1578,60 +1875,60 @@ coefficient is not modified.</blockquote>
</div>
</div>
<div class="section" id="expandable-macros">
-<h1><a class="toc-backref" href="#id87">Expandable macros</a></h1>
+<h1><a class="toc-backref" href="#id101">Expandable macros</a></h1>
<p>All these macros expand completely in two steps except <tt class="docutils literal">\PolToExpr</tt>
and <tt class="docutils literal">\PolToFloatExpr</tt> (and their auxiliaries) which need a
<tt class="docutils literal">\write</tt>, <tt class="docutils literal">\edef</tt> or a <tt class="docutils literal"><span class="pre">\csname...\endcsname</span></tt> context.</p>
<div class="section" id="poleval-polname-atexpr-numerical-expression">
-<span id="polevalatexpr"></span><h2><a class="toc-backref" href="#id88"><tt class="docutils literal"><span class="pre">\PolEval{polname}\AtExpr{numerical</span> expression}</tt></a></h2>
+<span id="polevalatexpr"></span><h2><a class="toc-backref" href="#id102"><tt class="docutils literal"><span class="pre">\PolEval{polname}\AtExpr{numerical</span> expression}</tt></a></h2>
<blockquote>
It boils down to
<tt class="docutils literal">\xinttheexpr polname(numerical <span class="pre">expression)\relax</span></tt>.</blockquote>
</div>
<div class="section" id="poleval-polname-at-fraction">
-<span id="polevalat"></span><h2><a class="toc-backref" href="#id89"><tt class="docutils literal"><span class="pre">\PolEval{polname}\At{fraction}</span></tt></a></h2>
+<span id="polevalat"></span><h2><a class="toc-backref" href="#id103"><tt class="docutils literal"><span class="pre">\PolEval{polname}\At{fraction}</span></tt></a></h2>
<blockquote>
Evaluates the polynomial at value <tt class="docutils literal">fraction</tt> which must be in (or
expand to) a format acceptable to the <a class="reference external" href="http://www.ctan.org/pkg/xint">xintfrac</a> macros.</blockquote>
</div>
<div class="section" id="polevalreduced-polname-atexpr-numerical-expression">
-<span id="polevalreducedatexpr"></span><h2><a class="toc-backref" href="#id90"><tt class="docutils literal"><span class="pre">\PolEvalReduced{polname}\AtExpr{numerical</span> expression}</tt></a></h2>
+<span id="polevalreducedatexpr"></span><h2><a class="toc-backref" href="#id104"><tt class="docutils literal"><span class="pre">\PolEvalReduced{polname}\AtExpr{numerical</span> expression}</tt></a></h2>
<blockquote>
Boils down to <tt class="docutils literal">\xinttheexpr reduce(polname(numerical <span class="pre">expression))\relax</span></tt>.</blockquote>
</div>
<div class="section" id="polevalreduced-polname-at-fraction">
-<span id="polevalreducedat"></span><h2><a class="toc-backref" href="#id91"><tt class="docutils literal"><span class="pre">\PolEvalReduced{polname}\At{fraction}</span></tt></a></h2>
+<span id="polevalreducedat"></span><h2><a class="toc-backref" href="#id105"><tt class="docutils literal"><span class="pre">\PolEvalReduced{polname}\At{fraction}</span></tt></a></h2>
<blockquote>
Evaluates the polynomial at value <tt class="docutils literal">fraction</tt> which must be in (or
expand to) a format acceptable to the <a class="reference external" href="http://www.ctan.org/pkg/xint">xintfrac</a> macros, and produce
an irreducible fraction.</blockquote>
</div>
<div class="section" id="polfloateval-polname-atexpr-numerical-expression">
-<span id="polfloatevalatexpr"></span><h2><a class="toc-backref" href="#id92"><tt class="docutils literal"><span class="pre">\PolFloatEval{polname}\AtExpr{numerical</span> expression}</tt></a></h2>
+<span id="polfloatevalatexpr"></span><h2><a class="toc-backref" href="#id106"><tt class="docutils literal"><span class="pre">\PolFloatEval{polname}\AtExpr{numerical</span> expression}</tt></a></h2>
<blockquote>
<p>Boils down to <tt class="docutils literal">\xintthefloatexpr polname(numerical <span class="pre">expression)\relax</span></tt>.</p>
<p>This is done via a Horner Scheme (see <a class="reference internal" href="#poldef">\poldef</a> and
<a class="reference internal" href="#polgenfloatvariant-polname">\PolGenFloatVariant{polname}</a>), with already rounded
-coefficients. <a class="footnote-reference" href="#id20" id="id18">[2]</a> To use the <em>exact coefficients</em> with <em>exactly
+coefficients. <a class="footnote-reference" href="#id24" id="id22">[2]</a> To use the <em>exact coefficients</em> with <em>exactly
executed</em> additions and multiplications, just insert it in the float
-expression as in this example: <a class="footnote-reference" href="#id21" id="id19">[3]</a></p>
+expression as in this example: <a class="footnote-reference" href="#id25" id="id23">[3]</a></p>
<pre class="literal-block">
\xintthefloatexpr 3.27*\xintexpr f(2.53)\relax^2\relax
</pre>
<p>The <tt class="docutils literal">f(2.53)</tt> is exactly computed then rounded at the time of
getting raised to the power <tt class="docutils literal">2</tt>. Moving the <tt class="docutils literal">^2</tt> inside, that
operation would also be treated exactly.</p>
-<table class="docutils footnote" frame="void" id="id20" rules="none">
+<table class="docutils footnote" frame="void" id="id24" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
-<tr><td class="label"><a class="fn-backref" href="#id18">[2]</a></td><td>Anyway each floating point operation starts by rounding its
+<tr><td class="label"><a class="fn-backref" href="#id22">[2]</a></td><td>Anyway each floating point operation starts by rounding its
operands to the floating point precision.</td></tr>
</tbody>
</table>
-<table class="docutils footnote" frame="void" id="id21" rules="none">
+<table class="docutils footnote" frame="void" id="id25" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
-<tr><td class="label"><a class="fn-backref" href="#id19">[3]</a></td><td>The <tt class="docutils literal">\xintexpr</tt> here could be <tt class="docutils literal">\xinttheexpr</tt> but that
+<tr><td class="label"><a class="fn-backref" href="#id23">[3]</a></td><td>The <tt class="docutils literal">\xintexpr</tt> here could be <tt class="docutils literal">\xinttheexpr</tt> but that
would be less efficient. Cf. <a class="reference external" href="http://www.ctan.org/pkg/xint">xintexpr</a> documentation about
nested expressions.</td></tr>
</tbody>
@@ -1639,14 +1936,14 @@ nested expressions.</td></tr>
</blockquote>
</div>
<div class="section" id="polfloateval-polname-at-fraction">
-<span id="polfloatevalat"></span><h2><a class="toc-backref" href="#id93"><tt class="docutils literal"><span class="pre">\PolFloatEval{polname}\At{fraction}</span></tt></a></h2>
+<span id="polfloatevalat"></span><h2><a class="toc-backref" href="#id107"><tt class="docutils literal"><span class="pre">\PolFloatEval{polname}\At{fraction}</span></tt></a></h2>
<blockquote>
Evaluates the polynomial at value <tt class="docutils literal">fraction</tt> which must be in (or
expand to) a format acceptable to the <a class="reference external" href="http://www.ctan.org/pkg/xint">xintfrac</a> macros, and produces
a floating point number.</blockquote>
</div>
<div class="section" id="polifcoeffisplusorminusone-a-b">
-<span id="polifcoeffisplusorminusone"></span><h2><a class="toc-backref" href="#id94"><tt class="docutils literal"><span class="pre">\PolIfCoeffIsPlusOrMinusOne{A}{B}</span></tt></a></h2>
+<span id="polifcoeffisplusorminusone"></span><h2><a class="toc-backref" href="#id108"><tt class="docutils literal"><span class="pre">\PolIfCoeffIsPlusOrMinusOne{A}{B}</span></tt></a></h2>
<blockquote>
<p>This macro is a priori undefined.</p>
<p>It is defined via the default <a class="reference internal" href="#poltypesetcmd-raw-coeff">\PolTypesetCmd{raw_coeff}</a> to be
@@ -1658,25 +1955,25 @@ plus or minus one, and <tt class="docutils literal">B</tt> if not.</p>
</blockquote>
</div>
<div class="section" id="polleadingcoeff-polname">
-<span id="polleadingcoeff"></span><h2><a class="toc-backref" href="#id95"><tt class="docutils literal">\PolLeadingCoeff{polname}</tt></a></h2>
+<span id="polleadingcoeff"></span><h2><a class="toc-backref" href="#id109"><tt class="docutils literal">\PolLeadingCoeff{polname}</tt></a></h2>
<blockquote>
Expands to the leading coefficient.</blockquote>
</div>
<div class="section" id="polnthcoeff-polname-number">
-<span id="polnthcoeff"></span><h2><a class="toc-backref" href="#id96"><tt class="docutils literal"><span class="pre">\PolNthCoeff{polname}{number}</span></tt></a></h2>
+<span id="polnthcoeff"></span><h2><a class="toc-backref" href="#id110"><tt class="docutils literal"><span class="pre">\PolNthCoeff{polname}{number}</span></tt></a></h2>
<blockquote>
It expands to the raw <tt class="docutils literal">N</tt>-th coefficient (<tt class="docutils literal">0/1[0]</tt> if the index
number is out of range). With <tt class="docutils literal"><span class="pre">N=-1</span></tt>, <tt class="docutils literal"><span class="pre">-2</span></tt>, ... expands to the
leading coefficients.</blockquote>
</div>
<div class="section" id="poldegree-polname">
-<span id="poldegree"></span><h2><a class="toc-backref" href="#id97"><tt class="docutils literal">\PolDegree{polname}</tt></a></h2>
+<span id="poldegree"></span><h2><a class="toc-backref" href="#id111"><tt class="docutils literal">\PolDegree{polname}</tt></a></h2>
<blockquote>
It expands to the degree. This is <tt class="docutils literal"><span class="pre">-1</span></tt> if zero polynomial but this
may change in future. Should it then expand to <tt class="docutils literal"><span class="pre">-\infty</span></tt> ?</blockquote>
</div>
<div class="section" id="policontent-polname">
-<span id="policontent"></span><h2><a class="toc-backref" href="#id98"><tt class="docutils literal">\PolIContent{polname}</tt></a></h2>
+<span id="policontent"></span><h2><a class="toc-backref" href="#id112"><tt class="docutils literal">\PolIContent{polname}</tt></a></h2>
<blockquote>
<p>It expands to the contents of the polynomial, i.e. to the positive
fraction such that dividing by this fraction produces a polynomial
@@ -1685,13 +1982,13 @@ with integer coefficients having no common prime divisor.</p>
</blockquote>
</div>
<div class="section" id="poltoexpr-polname">
-<span id="poltoexpr"></span><h2><a class="toc-backref" href="#id99"><tt class="docutils literal">\PolToExpr{polname}</tt></a></h2>
+<span id="poltoexpr"></span><h2><a class="toc-backref" href="#id113"><tt class="docutils literal">\PolToExpr{polname}</tt></a></h2>
<blockquote>
-<p>Expands <a class="footnote-reference" href="#id23" id="id22">[4]</a> to <tt class="docutils literal"><span class="pre">coeff_N*x^N+...</span></tt> (descending powers.)</p>
-<table class="docutils footnote" frame="void" id="id23" rules="none">
+<p>Expands <a class="footnote-reference" href="#id27" id="id26">[4]</a> to <tt class="docutils literal"><span class="pre">coeff_N*x^N+...</span></tt> (descending powers.)</p>
+<table class="docutils footnote" frame="void" id="id27" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
-<tr><td class="label"><a class="fn-backref" href="#id22">[4]</a></td><td>in a <tt class="docutils literal">\write</tt>, <tt class="docutils literal">\edef</tt>, or <tt class="docutils literal"><span class="pre">\csname...\endcsname</span></tt>, but
+<tr><td class="label"><a class="fn-backref" href="#id26">[4]</a></td><td>in a <tt class="docutils literal">\write</tt>, <tt class="docutils literal">\edef</tt>, or <tt class="docutils literal"><span class="pre">\csname...\endcsname</span></tt>, but
not under <tt class="docutils literal"><span class="pre">\romannumeral-`0</span></tt>.</td></tr>
</tbody>
</table>
@@ -1710,7 +2007,7 @@ of <tt class="docutils literal">\PolToExpr{f}</tt>, but a simple <tt class="docu
the identical result.</p>
</blockquote>
<div class="section" id="poltoexproneterm-raw-coeff-number">
-<span id="poltoexproneterm"></span><h3><a class="toc-backref" href="#id100"><tt class="docutils literal"><span class="pre">\PolToExprOneTerm{raw_coeff}{number}</span></tt></a></h3>
+<span id="poltoexproneterm"></span><h3><a class="toc-backref" href="#id114"><tt class="docutils literal"><span class="pre">\PolToExprOneTerm{raw_coeff}{number}</span></tt></a></h3>
<blockquote>
<p>This two argument expandable command takes care of the monomial and
its coefficient. The default definition is done in order for
@@ -1723,13 +2020,13 @@ or a minus one. See <a class="reference internal" href="#poltoexprtimes">\PolToE
</blockquote>
</div>
<div class="section" id="poltoexpronetermstylea-raw-coeff-number">
-<span id="poltoexpronetermstylea"></span><h3><a class="toc-backref" href="#id101"><tt class="docutils literal"><span class="pre">\PolToExprOneTermStyleA{raw_coeff}{number}</span></tt></a></h3>
+<span id="poltoexpronetermstylea"></span><h3><a class="toc-backref" href="#id115"><tt class="docutils literal"><span class="pre">\PolToExprOneTermStyleA{raw_coeff}{number}</span></tt></a></h3>
<blockquote>
Holds the default package meaning of
<a class="reference internal" href="#poltoexproneterm-raw-coeff-number">\PolToExprOneTerm{raw_coeff}{number}</a>.</blockquote>
</div>
<div class="section" id="poltoexpronetermstyleb-raw-coeff-number">
-<span id="poltoexpronetermstyleb"></span><h3><a class="toc-backref" href="#id102"><tt class="docutils literal"><span class="pre">\PolToExprOneTermStyleB{raw_coeff}{number}</span></tt></a></h3>
+<span id="poltoexpronetermstyleb"></span><h3><a class="toc-backref" href="#id116"><tt class="docutils literal"><span class="pre">\PolToExprOneTermStyleB{raw_coeff}{number}</span></tt></a></h3>
<blockquote>
<p>For output in this style:</p>
<pre class="literal-block">
@@ -1743,7 +2040,7 @@ To revert to package default, issue
</blockquote>
</div>
<div class="section" id="poltoexprcmd-raw-coeff">
-<span id="poltoexprcmd"></span><h3><a class="toc-backref" href="#id103"><tt class="docutils literal">\PolToExprCmd{raw_coeff}</tt></a></h3>
+<span id="poltoexprcmd"></span><h3><a class="toc-backref" href="#id117"><tt class="docutils literal">\PolToExprCmd{raw_coeff}</tt></a></h3>
<blockquote>
It is the one-argument macro used by the package definition of
<tt class="docutils literal">\PolToExprOneTerm</tt> for the coefficients themselves (when not
@@ -1753,21 +2050,21 @@ to <tt class="docutils literal"><span class="pre">\xintIrr{#1}</span></tt> or to
output forcefully reduced coefficients.</blockquote>
</div>
<div class="section" id="poltoexprtermprefix-raw-coeff">
-<span id="poltoexprtermprefix"></span><h3><a class="toc-backref" href="#id104"><tt class="docutils literal">\PolToExprTermPrefix{raw_coeff}</tt></a></h3>
+<span id="poltoexprtermprefix"></span><h3><a class="toc-backref" href="#id118"><tt class="docutils literal">\PolToExprTermPrefix{raw_coeff}</tt></a></h3>
<blockquote>
Defined identically as <a class="reference internal" href="#poltypesetcmdprefix-raw-coeff">\PolTypesetCmdPrefix{raw_coeff}</a>. It
prefixes with a plus sign for non-negative coefficients, because
they don't carry one by themselves.</blockquote>
</div>
-<div class="section" id="id24">
-<span id="poltoexprvar"></span><h3><a class="toc-backref" href="#id105"><tt class="docutils literal">\PolToExprVar</tt></a></h3>
+<div class="section" id="id28">
+<span id="poltoexprvar"></span><h3><a class="toc-backref" href="#id119"><tt class="docutils literal">\PolToExprVar</tt></a></h3>
<blockquote>
This expands to the variable to use in output (it does not have to
be a single letter, may be an expandable macro.) Initial definition
is <tt class="docutils literal">x</tt>.</blockquote>
</div>
-<div class="section" id="id25">
-<span id="poltoexprtimes"></span><h3><a class="toc-backref" href="#id106"><tt class="docutils literal">\PolToExprTimes</tt></a></h3>
+<div class="section" id="id29">
+<span id="poltoexprtimes"></span><h3><a class="toc-backref" href="#id120"><tt class="docutils literal">\PolToExprTimes</tt></a></h3>
<blockquote>
This expands to the symbol used for multiplication of an
<tt class="docutils literal"><span class="pre">x^{number}</span></tt> by the corresponding coefficient. The default is
@@ -1776,14 +2073,14 @@ this will give output incompatible with some professional computer
algebra software).</blockquote>
</div>
</div>
-<div class="section" id="id27">
-<span id="id26"></span><h2><a class="toc-backref" href="#id107"><tt class="docutils literal"><span class="pre">\PolToExpr*{polname}</span></tt></a></h2>
+<div class="section" id="id31">
+<span id="id30"></span><h2><a class="toc-backref" href="#id121"><tt class="docutils literal"><span class="pre">\PolToExpr*{polname}</span></tt></a></h2>
<blockquote>
Expands to <tt class="docutils literal"><span class="pre">coeff_0+coeff_1*x+coeff_2*x^2+...</span></tt> (ascending powers).
Customizable like <a class="reference internal" href="#poltoexpr-polname">\PolToExpr{polname}</a> via the same macros.</blockquote>
</div>
<div class="section" id="poltofloatexpr-polname">
-<span id="poltofloatexpr"></span><h2><a class="toc-backref" href="#id108"><tt class="docutils literal">\PolToFloatExpr{polname}</tt></a></h2>
+<span id="poltofloatexpr"></span><h2><a class="toc-backref" href="#id122"><tt class="docutils literal">\PolToFloatExpr{polname}</tt></a></h2>
<blockquote>
<p>Similar to <a class="reference internal" href="#poltoexpr-polname">\PolToExpr{polname}</a> but uses <a class="reference external" href="\PolToFloatExprCmd{raw_coeff}">\PolToFloatExprCmd</a>
which by default rounds and converts the coefficients to floating
@@ -1802,13 +2099,13 @@ those output by <tt class="docutils literal">\PolToFloatExpr{polname}</tt>.</p>
</div>
</blockquote>
<div class="section" id="poltofloatexproneterm-raw-coeff-number">
-<span id="poltofloatexproneterm"></span><h3><a class="toc-backref" href="#id109"><tt class="docutils literal"><span class="pre">\PolToFloatExprOneTerm{raw_coeff}{number}</span></tt></a></h3>
+<span id="poltofloatexproneterm"></span><h3><a class="toc-backref" href="#id123"><tt class="docutils literal"><span class="pre">\PolToFloatExprOneTerm{raw_coeff}{number}</span></tt></a></h3>
<blockquote>
Similar to <a class="reference external" href="\PolToExprOneTerm{raw_coeff}{number}">\PolToExprOneTerm</a>. But does not treat
especially coefficients equal to plus or minus one.</blockquote>
</div>
<div class="section" id="poltofloatexprcmd-raw-coeff">
-<span id="id29"></span><h3><a class="toc-backref" href="#id110"><tt class="docutils literal">\PolToFloatExprCmd{raw_coeff}</tt></a></h3>
+<span id="id33"></span><h3><a class="toc-backref" href="#id124"><tt class="docutils literal">\PolToFloatExprCmd{raw_coeff}</tt></a></h3>
<blockquote>
<p>It is the one-argument macro used by <tt class="docutils literal">\PolToFloatExprOneTerm</tt>.
Its package definition is <tt class="docutils literal"><span class="pre">\xintFloat{#1}</span></tt>.</p>
@@ -1830,26 +2127,28 @@ in <tt class="docutils literal">xintfrac</tt> raw format.</p>
</blockquote>
</div>
</div>
-<div class="section" id="id31">
-<span id="id30"></span><h2><a class="toc-backref" href="#id111"><tt class="docutils literal"><span class="pre">\PolToFloatExpr*{polname}</span></tt></a></h2>
+<div class="section" id="id35">
+<span id="id34"></span><h2><a class="toc-backref" href="#id125"><tt class="docutils literal"><span class="pre">\PolToFloatExpr*{polname}</span></tt></a></h2>
<blockquote>
Typesets in ascending powers.</blockquote>
</div>
<div class="section" id="poltolist-polname">
-<span id="poltolist"></span><h2><a class="toc-backref" href="#id112"><tt class="docutils literal">\PolToList{polname}</tt></a></h2>
+<span id="poltolist"></span><h2><a class="toc-backref" href="#id126"><tt class="docutils literal">\PolToList{polname}</tt></a></h2>
<blockquote>
-Expands to <tt class="docutils literal"><span class="pre">{coeff_0}{coeff_1}...{coeff_N}</span></tt> with <tt class="docutils literal">N</tt> = degree
-(except zero polynomial which does give <tt class="docutils literal">{0/1[0]}</tt> and not an
+Expands to <tt class="docutils literal"><span class="pre">{coeff_0}{coeff_1}...{coeff_N}</span></tt> with <tt class="docutils literal">N</tt> = degree, and
+<tt class="docutils literal">coeff_N</tt> the leading coefficient
+(the zero polynomial does give <tt class="docutils literal">{0/1[0]}</tt> and not an
empty output.)</blockquote>
</div>
<div class="section" id="poltocsv-polname">
-<span id="poltocsv"></span><h2><a class="toc-backref" href="#id113"><tt class="docutils literal">\PolToCSV{polname}</tt></a></h2>
+<span id="poltocsv"></span><h2><a class="toc-backref" href="#id127"><tt class="docutils literal">\PolToCSV{polname}</tt></a></h2>
<blockquote>
-Expands to <tt class="docutils literal">coeff_0, coeff_1, coeff_2, <span class="pre">.....,</span> coeff_N</tt>. Converse
+Expands to <tt class="docutils literal">coeff_0, coeff_1, coeff_2, <span class="pre">.....,</span> coeff_N</tt>, starting
+with constant term and ending with leading coefficient. Converse
to <a class="reference internal" href="#polfromcsv-polname-csv">\PolFromCSV</a>.</blockquote>
</div>
<div class="section" id="polsturmchainlength-sturmname">
-<span id="polsturmchainlength"></span><h2><a class="toc-backref" href="#id114"><tt class="docutils literal">\PolSturmChainLength{sturmname}</tt></a></h2>
+<span id="polsturmchainlength"></span><h2><a class="toc-backref" href="#id128"><tt class="docutils literal">\PolSturmChainLength{sturmname}</tt></a></h2>
<blockquote>
<p>Returns the integer <tt class="docutils literal">N</tt> such that <tt class="docutils literal">sturmname_N</tt> is the last one
in the Sturm chain <tt class="docutils literal">sturmname_0</tt>, <tt class="docutils literal">sturmname_1</tt>, ...</p>
@@ -1857,43 +2156,44 @@ in the Sturm chain <tt class="docutils literal">sturmname_0</tt>, <tt class="doc
</blockquote>
</div>
<div class="section" id="polsturmifzeroexactlyknown-sturmname-index-a-b">
-<span id="polsturmifzeroexactlyknown"></span><h2><a class="toc-backref" href="#id115"><tt class="docutils literal"><span class="pre">\PolSturmIfZeroExactlyKnown{sturmname}{index}{A}{B}</span></tt></a></h2>
+<span id="polsturmifzeroexactlyknown"></span><h2><a class="toc-backref" href="#id129"><tt class="docutils literal"><span class="pre">\PolSturmIfZeroExactlyKnown{sturmname}{index}{A}{B}</span></tt></a></h2>
<blockquote>
<p>Executes <tt class="docutils literal">A</tt> if the <tt class="docutils literal">index</tt>-th interval reduces to a singleton,
i.e. the root is known exactly, else <tt class="docutils literal">B</tt>.</p>
<div class="admonition note">
<p class="first admonition-title">Note</p>
-<p><tt class="docutils literal">index</tt> may be a TeX count, or a <tt class="docutils literal">\value{latexcounter}</tt>, or a
-numerical expression as parsable by <tt class="docutils literal">\numexpr</tt>: it does not
-have to be given via explicit digits.</p>
-<p class="last">This remark applies also to the other package macros with
-<tt class="docutils literal">index</tt> being the name of the argument in this documentation.
-There is also an out-of-range check done for some reasonable
-error message (right before everything goes haywire).</p>
+<p class="last"><tt class="docutils literal">index</tt> is allowed to be something like <tt class="docutils literal">1+2*3</tt> as it is fed
+to <tt class="docutils literal"><span class="pre">\the\numexpr...\relax</span></tt>.</p>
</div>
</blockquote>
</div>
<div class="section" id="polsturmisolatedzeroleft-sturmname-index">
-<span id="polsturmisolatedzeroleft"></span><h2><a class="toc-backref" href="#id116"><tt class="docutils literal"><span class="pre">\PolSturmIsolatedZeroLeft{sturmname}{index}</span></tt></a></h2>
+<span id="polsturmisolatedzeroleft"></span><h2><a class="toc-backref" href="#id130"><tt class="docutils literal"><span class="pre">\PolSturmIsolatedZeroLeft{sturmname}{index}</span></tt></a></h2>
<blockquote>
-Expands to the left end-point for the <tt class="docutils literal">index</tt>-th interval
-obtained via <a class="reference internal" href="#polsturmisolatezeros-sturmname">\PolSturmIsolateZeros{sturmname}</a> and possibly
-refined afterwards.</blockquote>
+<p>Expands to the left end-point for the <tt class="docutils literal">index</tt>-th interval, as
+computed by some earlier <a class="reference internal" href="#polsturmisolatezeros-sturmname">\PolSturmIsolateZeros{sturmname}</a>.</p>
+<div class="admonition note">
+<p class="first admonition-title">Note</p>
+<p class="last">Of course, this is kept updated by macros such as
+<a class="reference internal" href="#polrefineinterval-n">\PolRefineInterval{sturmname}{index}</a>.</p>
+</div>
+<p>The value is pre-formatted using <a class="reference internal" href="#poldectostring">\PolDecTostring</a>.</p>
+</blockquote>
</div>
<div class="section" id="polsturmisolatedzeroright-sturmname-index">
-<span id="polsturmisolatedzeroright"></span><h2><a class="toc-backref" href="#id117"><tt class="docutils literal"><span class="pre">\PolSturmIsolatedZeroRight{sturmname}{index}</span></tt></a></h2>
+<span id="polsturmisolatedzeroright"></span><h2><a class="toc-backref" href="#id131"><tt class="docutils literal"><span class="pre">\PolSturmIsolatedZeroRight{sturmname}{index}</span></tt></a></h2>
<blockquote>
-Expands to the right end-point for the <tt class="docutils literal">index</tt>-th interval
-obtained via <a class="reference internal" href="#polsturmisolatezeros-sturmname">\PolSturmIsolateZeros{sturmname}</a> and possibly
-refined afterwards.</blockquote>
+<p>Expands to the right end-point for the <tt class="docutils literal">index</tt>-th interval as
+computed by some earlier <a class="reference internal" href="#polsturmisolatezeros-sturmname">\PolSturmIsolateZeros{sturmname}</a> and
+possibly refined afterwards.</p>
+<p>The value is pre-formatted using <a class="reference internal" href="#poldectostring">\PolDecTostring</a>.</p>
+</blockquote>
</div>
<div class="section" id="polsturmisolatedzeromultiplicity-sturmname-index">
-<span id="polsturmisolatedzeromultiplicity"></span><h2><a class="toc-backref" href="#id118"><tt class="docutils literal"><span class="pre">\PolSturmIsolatedZeroMultiplicity{sturmname}{index}</span></tt></a></h2>
+<span id="polsturmisolatedzeromultiplicity"></span><h2><a class="toc-backref" href="#id132"><tt class="docutils literal"><span class="pre">\PolSturmIsolatedZeroMultiplicity{sturmname}{index}</span></tt></a></h2>
<blockquote>
<p>Expands to the multiplicity of the unique root contained in the
-<tt class="docutils literal">index</tt>-th interval as determined by
-<a class="reference internal" href="#id12">\PolSturmIsolateZeros*{sturmname}</a> and possibly refined
-afterwards.</p>
+<tt class="docutils literal">index</tt>-th interval.</p>
<div class="admonition attention">
<p class="first admonition-title">Attention!</p>
<p class="last">A prior execution of <a class="reference internal" href="#id12">\PolSturmIsolateZeros*{sturmname}</a> is mandatory.</p>
@@ -1903,15 +2203,22 @@ roots</a> for an example of use.</p>
</blockquote>
</div>
<div class="section" id="polsturmnbofisolatedzeros-sturmname">
-<span id="polsturmnbofisolatedzeros"></span><h2><a class="toc-backref" href="#id119"><tt class="docutils literal">\PolSturmNbOfIsolatedZeros{sturmname}</tt></a></h2>
+<span id="polsturmnbofisolatedzeros"></span><h2><a class="toc-backref" href="#id133"><tt class="docutils literal">\PolSturmNbOfIsolatedZeros{sturmname}</tt></a></h2>
<blockquote>
Expands to the number of real roots of the polynomial
-<tt class="docutils literal">&lt;sturmname&gt;_0</tt> (which is the number of distinct real roots of the
-polynomial used to create the Sturm chain via
+<tt class="docutils literal">&lt;sturmname&gt;_0</tt>, i.e. the number of distinct real roots of the
+polynomial originally used to create the Sturm chain via
<a class="reference internal" href="#poltosturm-polname-sturmname">\PolToSturm{polname}{sturmname}</a>.</blockquote>
+<div class="admonition warning">
+<p class="first admonition-title">Warning</p>
+<p class="last">The next few macros counting roots, with or without multiplicities,
+less than or equal to some value, are under evaluation and may be
+removed from the package if their utility is judged to be not high
+enough. They can be re-coded at user level on the basis of the other
+documented package macros anyway.</p>
</div>
<div class="section" id="polsturmnbofrootsof-sturmname-lessthanorequalto-value">
-<h2><a class="toc-backref" href="#id120"><tt class="docutils literal"><span class="pre">\PolSturmNbOfRootsOf{sturmname}\LessThanOrEqualTo{value}</span></tt></a></h2>
+<h3><a class="toc-backref" href="#id134"><tt class="docutils literal"><span class="pre">\PolSturmNbOfRootsOf{sturmname}\LessThanOrEqualTo{value}</span></tt></a></h3>
<blockquote>
<p>Expands to the number of distinct roots (of the polynomial used to
create the Sturm chain) less than or equal to the <tt class="docutils literal">value</tt> (i.e. a
@@ -1927,7 +2234,7 @@ of the above constraint.</p>
</blockquote>
</div>
<div class="section" id="polsturmnbofrootsof-sturmname-lessthanorequaltoexpr-expression">
-<h2><a class="toc-backref" href="#id121"><tt class="docutils literal"><span class="pre">\PolSturmNbOfRootsOf{sturmname}\LessThanOrEqualToExpr{expression}</span></tt></a></h2>
+<h3><a class="toc-backref" href="#id135"><tt class="docutils literal"><span class="pre">\PolSturmNbOfRootsOf{sturmname}\LessThanOrEqualToExpr{expression}</span></tt></a></h3>
<blockquote>
<p>Expands to the number of distinct roots (of the polynomial
used to create the Sturm chain) which are less than or equal to the
@@ -1940,91 +2247,160 @@ beforehand.</p>
</blockquote>
</div>
<div class="section" id="polsturmnbwithmultofrootsof-sturmname-lessthanorequalto-value">
-<h2><a class="toc-backref" href="#id122"><tt class="docutils literal"><span class="pre">\PolSturmNbWithMultOfRootsOf{sturmname}\LessThanOrEqualTo{value}</span></tt></a></h2>
+<h3><a class="toc-backref" href="#id136"><tt class="docutils literal"><span class="pre">\PolSturmNbWithMultOfRootsOf{sturmname}\LessThanOrEqualTo{value}</span></tt></a></h3>
<blockquote>
<p>Expands to the number counted with multiplicities of the roots (of
the polynomial used to create the Sturm chain) which are less than
or equal to the given <tt class="docutils literal">value</tt>.</p>
<div class="admonition attention">
<p class="first admonition-title">Attention!</p>
-<p class="last"><a class="reference internal" href="#id12">\PolSturmIsolateZeros*{sturmname}</a> or its alias
-<a class="reference internal" href="#polsturmisolatezerosandgetmultiplicities-sturmname">\PolSturmIsolateZerosAndGetMultiplicities{sturmname}</a>
-must have been executed
-beforehand.</p>
+<p class="last"><a class="reference internal" href="#id12">\PolSturmIsolateZeros*{sturmname}</a> (or the double starred
+variant) must have been executed beforehand.</p>
</div>
</blockquote>
</div>
<div class="section" id="polsturmnbwithmultofrootsof-sturmname-lessthanorequaltoexpr-expression">
-<h2><a class="toc-backref" href="#id123"><tt class="docutils literal"><span class="pre">\PolSturmNbWithMultOfRootsOf{sturmname}\LessThanOrEqualToExpr{expression}</span></tt></a></h2>
+<h3><a class="toc-backref" href="#id137"><tt class="docutils literal"><span class="pre">\PolSturmNbWithMultOfRootsOf{sturmname}\LessThanOrEqualToExpr{expression}</span></tt></a></h3>
<blockquote>
<p>Expands to the total number of roots (counted with multiplicities)
which are less than or equal to the given <tt class="docutils literal">expression</tt>.</p>
<div class="admonition attention">
<p class="first admonition-title">Attention!</p>
-<p class="last"><a class="reference internal" href="#id12">\PolSturmIsolateZeros*{sturmname}</a> or its alias
-<a class="reference internal" href="#polsturmisolatezerosandgetmultiplicities-sturmname">\PolSturmIsolateZerosAndGetMultiplicities{sturmname}</a>
-must have been executed
+<p class="last"><a class="reference internal" href="#id12">\PolSturmIsolateZeros*{sturmname}</a> (or the double starred
+variant) must have been executed beforehand.</p>
+</div>
+</blockquote>
+</div>
+</div>
+<div class="section" id="polsturmnbofrationalroots-sturmname">
+<h2><a class="toc-backref" href="#id138"><tt class="docutils literal">\PolSturmNbOfRationalRoots{sturmname}</tt></a></h2>
+<blockquote>
+<p>Expands to the number of rational roots (without multiplicities).</p>
+<div class="admonition attention">
+<p class="first admonition-title">Attention!</p>
+<p class="last"><a class="reference internal" href="#id14">\PolSturmIsolateZeros**{sturmname}</a> must have been executed
+beforehand.</p>
+</div>
+</blockquote>
+</div>
+<div class="section" id="polsturmnbofrationalrootswithmultiplicities-sturmname">
+<h2><a class="toc-backref" href="#id139"><tt class="docutils literal">\PolSturmNbOfRationalRootsWithMultiplicities{sturmname}</tt></a></h2>
+<blockquote>
+<p>Expands to the number of rational roots (counted with multiplicities).</p>
+<div class="admonition attention">
+<p class="first admonition-title">Attention!</p>
+<p class="last"><a class="reference internal" href="#id14">\PolSturmIsolateZeros**{sturmname}</a> must have been executed
+beforehand.</p>
+</div>
+</blockquote>
+</div>
+<div class="section" id="polsturmrationalroot-sturmname-k">
+<h2><a class="toc-backref" href="#id140"><tt class="docutils literal"><span class="pre">\PolSturmRationalRoot{sturmname}{k}</span></tt></a></h2>
+<blockquote>
+<p>Expands to the <tt class="docutils literal">k</tt>th rational root (they are ordered and indexed
+starting at 1 for the most negative).</p>
+<div class="admonition attention">
+<p class="first admonition-title">Attention!</p>
+<p class="last"><a class="reference internal" href="#id14">\PolSturmIsolateZeros**{sturmname}</a> must have been executed
+beforehand.</p>
+</div>
+</blockquote>
+</div>
+<div class="section" id="polsturmrationalrootindex-sturmname-k">
+<h2><a class="toc-backref" href="#id141"><tt class="docutils literal"><span class="pre">\PolSturmRationalRootIndex{sturmname}{k}</span></tt></a></h2>
+<blockquote>
+<p>Expands to <tt class="docutils literal">index</tt> of the <tt class="docutils literal">k</tt>th rational root as part of the
+ordered real roots (without multiplicities). I.e., above macro
+<a class="reference internal" href="#polsturmrationalroot-sturmname-k">\PolSturmRationalRoot{sturmname}{k}</a> is equivalent to this
+nested call:</p>
+<pre class="literal-block">
+\PolSturmIsolatedZeroLeft{sturmname}{\PolSturmRationalRootIndex{sturmname}{k}}
+</pre>
+<div class="admonition attention">
+<p class="first admonition-title">Attention!</p>
+<p class="last"><a class="reference internal" href="#id14">\PolSturmIsolateZeros**{sturmname}</a> must have been executed
+beforehand.</p>
+</div>
+</blockquote>
+</div>
+<div class="section" id="polsturmrationalrootmultiplicity-sturmname-k">
+<h2><a class="toc-backref" href="#id142"><tt class="docutils literal"><span class="pre">\PolSturmRationalRootMultiplicity{sturmname}{k}</span></tt></a></h2>
+<blockquote>
+<p>Expands to the multiplicity of the <tt class="docutils literal">k</tt>th rational root.</p>
+<div class="admonition attention">
+<p class="first admonition-title">Attention!</p>
+<p class="last"><a class="reference internal" href="#id14">\PolSturmIsolateZeros**{sturmname}</a> must have been executed
beforehand.</p>
</div>
</blockquote>
</div>
<div class="section" id="polintervalwidth-sturmname-index">
-<span id="polintervalwidth"></span><h2><a class="toc-backref" href="#id124"><tt class="docutils literal"><span class="pre">\PolIntervalWidth{sturmname}{index}</span></tt></a></h2>
+<span id="polintervalwidth"></span><h2><a class="toc-backref" href="#id143"><tt class="docutils literal"><span class="pre">\PolIntervalWidth{sturmname}{index}</span></tt></a></h2>
<blockquote>
The <tt class="docutils literal">10^E</tt> width of the current <tt class="docutils literal">index</tt>-th root localization
interval. Output is in <a class="reference external" href="http://www.ctan.org/pkg/xint">xintfrac</a> raw <tt class="docutils literal">1/1[E]</tt> format (if not zero).</blockquote>
</div>
-<div class="section" id="macros-for-use-within-execution-of-polprintintervals">
-<h2><a class="toc-backref" href="#id125">Macros for use within execution of <tt class="docutils literal">\PolPrintIntervals</tt></a></h2>
-<p>More precisely, they can be used within the replacement texts of the
-<a class="reference internal" href="#polprintintervalsprintleftendpoint">\PolPrintIntervalsPrintLeftEndPoint</a>, etc, macros.</p>
-<div class="section" id="id32">
-<span id="polprintintervalstheendpoint"></span><h3><a class="toc-backref" href="#id126"><tt class="docutils literal">\PolPrintIntervalsTheEndPoint</tt></a></h3>
+<div class="section" id="expandable-macros-for-use-within-execution-of-polprintintervals">
+<h2><a class="toc-backref" href="#id144">Expandable macros for use within execution of <tt class="docutils literal">\PolPrintIntervals</tt></a></h2>
+<p>These macros are for usage within custom user redefinitions of
+<a class="reference internal" href="#polprintintervalsknownroot">\PolPrintIntervalsKnownRoot</a>, <a class="reference internal" href="#polprintintervalsunknownroot">\PolPrintIntervalsUnknownRoot</a>, or
+in redefinitions of <a class="reference internal" href="#polprintintervalsprintexactzero">PolPrintIntervalsPrintExactZero</a> (used in the
+default for the former) and of <a class="reference internal" href="#polprintintervalsprintleftendpoint">\PolPrintIntervalsPrintLeftEndPoint</a>,
+<a class="reference internal" href="#polprintintervalsprintrightendpoint">\PolPrintIntervalsPrintRightEndPoint</a> (used in the default for the
+latter).</p>
+<div class="admonition attention">
+<p class="first admonition-title">Attention!</p>
+<p class="last">Some macros formerly mentioned here got removed at 0.7:
+<tt class="docutils literal">\PolPrintIntervalsTheEndPoint</tt>,
+<tt class="docutils literal"><span class="pre">\PolIfEndPointIsPositive{A}{B}</span></tt>,
+<tt class="docutils literal"><span class="pre">\PolIfEndPointIsNegative{A}{B}</span></tt>,
+<tt class="docutils literal"><span class="pre">\PolIfEndPointIsZero{A}{B}</span></tt>.</p>
+</div>
+<div class="section" id="polprintintervalsthevar">
+<h3><a class="toc-backref" href="#id145"><tt class="docutils literal">\PolPrintIntervalsTheVar</tt></a></h3>
<blockquote>
-Within a custom <a class="reference internal" href="#polprintintervalsprintleftendpoint">\PolPrintIntervalsPrintLeftEndPoint</a>, custom
-<a class="reference internal" href="#polprintintervalsprintrightendpoint">\PolPrintIntervalsPrintRightEndPoint</a>, or custom
-<a class="reference internal" href="#polprintintervalsprintexactzero">\PolPrintIntervalsPrintExactZero</a> this macro expands to the left
-or right end point of the considered interval. Serves as default
-replacement for <a class="reference internal" href="#polprintintervalsprintleftendpoint">\PolPrintIntervalsPrintLeftEndPoint</a> , etc...</blockquote>
+Expands to the name (default <tt class="docutils literal">Z</tt>) used for representing the roots,
+which was passed as optional argument <tt class="docutils literal">varname</tt> to
+<a class="reference internal" href="#polprintintervals-varname-sturmname">\PolPrintIntervals[varname]{sturmname}</a>.</blockquote>
</div>
-<div class="section" id="id33">
-<span id="polprintintervalstheindex"></span><h3><a class="toc-backref" href="#id127"><tt class="docutils literal">\PolPrintIntervalsTheIndex</tt></a></h3>
+<div class="section" id="polprintintervalstheindex">
+<h3><a class="toc-backref" href="#id146"><tt class="docutils literal">\PolPrintIntervalsTheIndex</tt></a></h3>
<blockquote>
-Within a custom <a class="reference internal" href="#polprintintervalsprintleftendpoint">\PolPrintIntervalsPrintLeftEndPoint</a>, custom
-<a class="reference internal" href="#polprintintervalsprintrightendpoint">\PolPrintIntervalsPrintRightEndPoint</a>, or custom
-<a class="reference internal" href="#polprintintervalsprintexactzero">\PolPrintIntervalsPrintExactZero</a> this macro expands to the index
-of the considered interval. For example if user wants to print the
-corresponding end points in red, the index value can thus be tested
-in the replacement text of <a class="reference internal" href="#polprintintervalsprintleftendpoint">\PolPrintIntervalsPrintLeftEndPoint</a> and
-the other two similar macros.</blockquote>
+Expands to the index of the considered interval (indexing starting
+at 1 for the leftmost interval).</blockquote>
</div>
-<div class="section" id="polifendpointispositive-a-b">
-<span id="polifendpointispositive"></span><h3><a class="toc-backref" href="#id128"><tt class="docutils literal"><span class="pre">\PolIfEndPointIsPositive{A}{B}</span></tt></a></h3>
+<div class="section" id="polprintintervalsthesturmname">
+<h3><a class="toc-backref" href="#id147"><tt class="docutils literal">\PolPrintIntervalsTheSturmName</tt></a></h3>
<blockquote>
-Within a custom <a class="reference internal" href="#polprintintervalsprintleftendpoint">\PolPrintIntervalsPrintLeftEndPoint</a>, custom
-<a class="reference internal" href="#polprintintervalsprintrightendpoint">\PolPrintIntervalsPrintRightEndPoint</a>, or custom
-<a class="reference internal" href="#polprintintervalsprintexactzero">\PolPrintIntervalsPrintExactZero</a> this macro executes <tt class="docutils literal">A</tt> if
-the considered interval end-point is positive, else <tt class="docutils literal">B</tt>.</blockquote>
+Expands to the argument which was passed as <tt class="docutils literal">sturmname</tt> to
+<a class="reference internal" href="#polprintintervals-varname-sturmname">\PolPrintIntervals[varname]{sturmname}</a>.</blockquote>
</div>
-<div class="section" id="polifendpointisnegative-a-b">
-<span id="polifendpointisnegative"></span><h3><a class="toc-backref" href="#id129"><tt class="docutils literal"><span class="pre">\PolIfEndPointIsNegative{A}{B}</span></tt></a></h3>
+<div class="section" id="polprintintervalstheleftendpoint">
+<h3><a class="toc-backref" href="#id148"><tt class="docutils literal">\PolPrintIntervalsTheLeftEndPoint</tt></a></h3>
<blockquote>
-Within a custom <a class="reference internal" href="#polprintintervalsprintleftendpoint">\PolPrintIntervalsPrintLeftEndPoint</a>, custom
-<a class="reference internal" href="#polprintintervalsprintrightendpoint">\PolPrintIntervalsPrintRightEndPoint</a>, or custom
-<a class="reference internal" href="#polprintintervalsprintexactzero">\PolPrintIntervalsPrintExactZero</a> this macro executes <tt class="docutils literal">A</tt> if
-the considered interval end-point is negative, else <tt class="docutils literal">B</tt>.</blockquote>
+The left end point of the interval, as would be produced by
+<a class="reference internal" href="#polsturmisolatedzeroleft">\PolSturmIsolatedZeroLeft</a> if it was
+used with arguments the Sturm chain name and interval index returned
+by <a class="reference internal" href="#polprintintervalsthesturmname">\PolPrintIntervalsTheSturmName</a> and
+<a class="reference internal" href="#polprintintervalstheindex">\PolPrintIntervalsTheIndex</a>.</blockquote>
</div>
-<div class="section" id="polifendpointiszero-a-b">
-<span id="polifendpointiszero"></span><h3><a class="toc-backref" href="#id130"><tt class="docutils literal"><span class="pre">\PolIfEndPointIsZero{A}{B}</span></tt></a></h3>
+<div class="section" id="polprintintervalstherightendpoint">
+<h3><a class="toc-backref" href="#id149"><tt class="docutils literal">\PolPrintIntervalsTheRightEndPoint</tt></a></h3>
<blockquote>
-Within a custom <a class="reference internal" href="#polprintintervalsprintleftendpoint">\PolPrintIntervalsPrintLeftEndPoint</a>, custom
-<a class="reference internal" href="#polprintintervalsprintrightendpoint">\PolPrintIntervalsPrintRightEndPoint</a>, or custom
-<a class="reference internal" href="#polprintintervalsprintexactzero">\PolPrintIntervalsPrintExactZero</a> this macro executes <tt class="docutils literal">A</tt> if
-the considered interval end-point is zero, else <tt class="docutils literal">B</tt>.</blockquote>
+The right end point of the interval, as would be produced by
+<a class="reference internal" href="#polsturmisolatedzeroright">\PolSturmIsolatedZeroRight</a> for
+this Sturm chain name and index.</blockquote>
+</div>
+<div class="section" id="polprintintervalsthemultiplicity">
+<h3><a class="toc-backref" href="#id150"><tt class="docutils literal">\PolPrintIntervalsTheMultiplicity</tt></a></h3>
+<blockquote>
+The multiplicity of the unique root within the interval of index
+<a class="reference internal" href="#polprintintervalstheindex">\PolPrintIntervalsTheIndex</a>. Makes sense only if the starred (or
+double-starred) variant of <a class="reference internal" href="#polsturmisolatezeros">\PolSturmIsolateZeros</a> was used earlier.</blockquote>
</div>
</div>
<div class="section" id="poldectostring-decimal-number">
-<span id="poldectostring"></span><h2><a class="toc-backref" href="#id131"><tt class="docutils literal">\PolDecToString{decimal number}</tt></a></h2>
+<span id="poldectostring"></span><h2><a class="toc-backref" href="#id151"><tt class="docutils literal">\PolDecToString{decimal number}</tt></a></h2>
<blockquote>
<p>This is a utility macro to print decimal numbers. It has been
backported to <a class="reference external" href="http://www.ctan.org/pkg/xint">xintfrac</a> (release <tt class="docutils literal">1.3</tt> of <tt class="docutils literal">2018/03/01</tt>) under
@@ -2035,15 +2411,15 @@ now an alias to it.</p>
and <tt class="docutils literal"><span class="pre">\PolDecToString{123.450e-8}</span></tt> to <tt class="docutils literal">0.00000123450</tt> which
illustrates that trailing zeros are not trimmed. To trim trailing
zeroes, one can use <tt class="docutils literal"><span class="pre">\PolDecToString{\xintREZ{#1}}</span></tt>.</p>
-<p>The exact behaviour of this macro may evolve in future releases of
+<p>The precise behaviour of this macro may evolve in future releases of
<a class="reference external" href="http://www.ctan.org/pkg/xint">xint</a>.</p>
</blockquote>
</div>
</div>
<div class="section" id="booleans-with-default-setting-as-indicated">
-<h1><a class="toc-backref" href="#id132">Booleans (with default setting as indicated)</a></h1>
+<h1><a class="toc-backref" href="#id152">Booleans (with default setting as indicated)</a></h1>
<div class="section" id="xintverbosefalse">
-<h2><a class="toc-backref" href="#id133"><tt class="docutils literal">\xintverbosefalse</tt></a></h2>
+<h2><a class="toc-backref" href="#id153"><tt class="docutils literal">\xintverbosefalse</tt></a></h2>
<blockquote>
<p>This is actually an <a class="reference external" href="http://www.ctan.org/pkg/xint">xintexpr</a> configuration. Setting it to
<tt class="docutils literal">true</tt> triggers the writing of information to the log when new
@@ -2056,20 +2432,41 @@ unstable and undocumented internal structures.</p>
</blockquote>
</div>
<div class="section" id="poltypesetallfalse">
-<h2><a class="toc-backref" href="#id134"><tt class="docutils literal">\poltypesetallfalse</tt></a></h2>
+<h2><a class="toc-backref" href="#id154"><tt class="docutils literal">\poltypesetallfalse</tt></a></h2>
<blockquote>
If <tt class="docutils literal">true</tt>, <a class="reference internal" href="#poltypeset-polname">\PolTypeset{polname}</a> will also typeset the vanishing
coefficients.</blockquote>
</div>
<div class="section" id="poltoexprallfalse">
-<h2><a class="toc-backref" href="#id135"><tt class="docutils literal">\poltoexprallfalse</tt></a></h2>
+<h2><a class="toc-backref" href="#id155"><tt class="docutils literal">\poltoexprallfalse</tt></a></h2>
<blockquote>
If <tt class="docutils literal">true</tt>, <a class="reference internal" href="#poltoexpr-polname">\PolToExpr{polname}</a> and <a class="reference internal" href="#poltofloatexpr-polname">\PolToFloatExpr{polname}</a> will
also include the vanishing coefficients in their outputs.</blockquote>
</div>
</div>
+<div class="section" id="polexprsetup">
+<h1><a class="toc-backref" href="#id156"><tt class="docutils literal">\polexprsetup</tt></a></h1>
+<blockquote>
+<p>Serves to customize the package. Currently only two keys are
+recognized:</p>
+<ul class="simple">
+<li><tt class="docutils literal">norr</tt>: the postfix that <a class="reference internal" href="#id14">\PolSturmIsolateZeros**{sturmname}</a>
+should append to <tt class="docutils literal">sturmname</tt> to declare the primitive polynomial
+obtained from original one after removal of all rational roots.
+The default value is <tt class="docutils literal">_norr</tt> (standing for “no rational roots”).</li>
+<li><tt class="docutils literal">sqfnorr</tt>: the postfix that <a class="reference internal" href="#id14">\PolSturmIsolateZeros**{sturmname}</a>
+should append to <tt class="docutils literal">sturmname</tt> to declare the primitive polynomial
+obtained from original one after removal of all rational roots and
+suppression of all multiplicities.
+The default value is <tt class="docutils literal">_sqf_norr</tt> (standing for “square-free with
+no rational roots”).</li>
+</ul>
+<p>The package executes <tt class="docutils literal">\polexprsetup{norr=_norr,
+sqfnorr=_sqf_norr}</tt> as default.</p>
+</blockquote>
+</div>
<div class="section" id="technicalities">
-<h1><a class="toc-backref" href="#id136">Technicalities</a></h1>
+<h1><a class="toc-backref" href="#id157">Technicalities</a></h1>
<ul>
<li><p class="first">The catcode of the semi-colon is reset temporarily by <a class="reference internal" href="#poldef">\poldef</a> macro in case some other package (for example the French
babel module) may have made it active. This will fail though if the
@@ -2078,7 +2475,7 @@ can use <a class="reference internal" href="#id2">\PolDef{f}{P(x)}</a>
rather. The colon in <tt class="docutils literal">:=</tt> may be active with no consequences.</p>
</li>
<li><p class="first">As a consequence of <a class="reference external" href="http://www.ctan.org/pkg/xint">xintfrac</a> addition and subtraction always using
-least common multiples for the denominators <a class="footnote-reference" href="#id35" id="id34">[5]</a>, user-chosen common
+least common multiples for the denominators <a class="footnote-reference" href="#id37" id="id36">[5]</a>, user-chosen common
denominators survive additions and multiplications. For example, this:</p>
<pre class="literal-block">
\poldef P(x):= 1/2 + 2/2*x + 3/2*x^3 + 4/2*x^4;
@@ -2094,10 +2491,10 @@ denominators survive additions and multiplications. For example, this:</p>
default) it recognizes and filters out coefficients equal to one or
minus one (since release <tt class="docutils literal">0.3</tt>). One can use for example
<tt class="docutils literal">\PolToCSV{PQ}</tt> to see the internally stored coefficients.</p>
-<table class="docutils footnote" frame="void" id="id35" rules="none">
+<table class="docutils footnote" frame="void" id="id37" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
-<tr><td class="label"><a class="fn-backref" href="#id34">[5]</a></td><td><p class="first last">prior to <tt class="docutils literal">0.4.1</tt>, <tt class="docutils literal">polexpr</tt> used to temporarily patch
+<tr><td class="label"><a class="fn-backref" href="#id36">[5]</a></td><td><p class="first last">prior to <tt class="docutils literal">0.4.1</tt>, <tt class="docutils literal">polexpr</tt> used to temporarily patch
during the parsing of polynomials the <a class="reference external" href="http://www.ctan.org/pkg/xint">xintfrac</a> macros. This
patch was backported to <a class="reference external" href="http://www.ctan.org/pkg/xint">xint</a> at release <tt class="docutils literal">1.3</tt>.</p>
</td></tr>
@@ -2126,7 +2523,7 @@ documented and unstable. Don't use them.</p>
</ul>
</div>
<div class="section" id="change-log">
-<h1><a class="toc-backref" href="#id137">CHANGE LOG</a></h1>
+<h1><a class="toc-backref" href="#id158">CHANGE LOG</a></h1>
<ul>
<li><p class="first">v0.1 (2018/01/11): initial release. Features:</p>
<ul class="simple">
@@ -2166,7 +2563,7 @@ using expressions in the second argument.</p>
<ul class="simple">
<li><a class="reference internal" href="#poltoexpr">\PolToExpr</a> now by default uses <em>descending</em>
powers (it also treats differently coefficients equal to 1 or -1.)
-Use <a class="reference internal" href="#id26">\PolToExpr*</a> for <em>ascending</em> powers.</li>
+Use <a class="reference internal" href="#id30">\PolToExpr*</a> for <em>ascending</em> powers.</li>
<li><a class="reference internal" href="#polevalat">\PolEval</a> reduced the output to smallest terms,
but as this is costly with big fractions and not needed if e.g.
wrapped in an <tt class="docutils literal">\xintRound</tt> or <tt class="docutils literal">\xintFloat</tt>, this step has been
@@ -2183,7 +2580,7 @@ removed; the former meaning is available as <a class="reference internal" href="
<li><a class="reference internal" href="#poltoexproneterm">\PolToExprOneTerm</a></li>
<li><a class="reference internal" href="#poltofloatexproneterm">\PolToFloatExprOneTerm</a></li>
<li><a class="reference internal" href="#poltoexprcmd">\PolToExprCmd</a></li>
-<li><a class="reference internal" href="#id29">\PolToFloatExprCmd</a></li>
+<li><a class="reference internal" href="#id33">\PolToFloatExprCmd</a></li>
<li><a class="reference internal" href="#poltoexprtermprefix">\PolToExprTermPrefix</a></li>
<li><a class="reference internal" href="#poltoexprvar">\PolToExprVar</a></li>
<li><a class="reference internal" href="#poltoexprtimes">\PolToExprTimes</a></li>
@@ -2268,7 +2665,7 @@ they actually make pre-existing such variant undefined.</p>
<li><a class="reference internal" href="#polprintintervalsprintexactzero">\PolPrintIntervalsPrintExactZero</a></li>
<li><a class="reference internal" href="#polprintintervalsprintleftendpoint">\PolPrintIntervalsPrintLeftEndPoint</a></li>
<li><a class="reference internal" href="#polprintintervalsprintrightendpoint">\PolPrintIntervalsPrintRightEndPoint</a></li>
-<li><a class="reference internal" href="#id16">\PolReduceCoeffs*</a></li>
+<li><a class="reference internal" href="#id20">\PolReduceCoeffs*</a></li>
<li><a class="reference internal" href="#polmakemonic">\PolMakeMonic</a></li>
</ul>
</li>
@@ -2282,11 +2679,11 @@ they actually make pre-existing such variant undefined.</p>
<li><a class="reference internal" href="#polsturmifzeroexactlyknown">\PolSturmIfZeroExactlyKnown</a></li>
<li><a class="reference internal" href="#polsturmisolatedzeroleft">\PolSturmIsolatedZeroLeft</a></li>
<li><a class="reference internal" href="#polsturmisolatedzeroright">\PolSturmIsolatedZeroRight</a></li>
-<li><a class="reference internal" href="#polprintintervalstheendpoint">\PolPrintIntervalsTheEndPoint</a></li>
+<li><tt class="docutils literal">\PolPrintIntervalsTheEndPoint</tt> (removed at 0.7)</li>
<li><a class="reference internal" href="#polprintintervalstheindex">\PolPrintIntervalsTheIndex</a></li>
-<li><a class="reference internal" href="#polifendpointispositive">\PolIfEndPointIsPositive</a></li>
-<li><a class="reference internal" href="#polifendpointisnegative">\PolIfEndPointIsNegative</a></li>
-<li><a class="reference internal" href="#polifendpointiszero">\PolIfEndPointIsZero</a></li>
+<li><tt class="docutils literal">\PolIfEndPointIsPositive</tt> (removed at 0.7)</li>
+<li><tt class="docutils literal">\PolIfEndPointIsNegative</tt> (removed at 0.7)</li>
+<li><tt class="docutils literal">\PolIfEndPointIsZero</tt> (removed at 0.7)</li>
<li><a class="reference internal" href="#polintervalwidth">\PolIntervalWidth</a></li>
<li><a class="reference internal" href="#poldectostring">\PolDecToString</a></li>
</ul>
@@ -2371,15 +2768,65 @@ acts like the <a class="reference internal" href="#polsturmisolatezeros">non-sta
</li>
</ul>
</li>
+<li><p class="first">v0.7 (2018/12/08)</p>
+<ul class="simple">
+<li>breaking changes:<ul>
+<li>although <a class="reference internal" href="#polprintintervals-varname-sturmname">\PolPrintIntervals[varname]{sturmname}</a> default output
+remains the same, some auxiliary macros for user-customization
+have been removed: <tt class="docutils literal">\PolPrintIntervalsTheEndPoint</tt>,
+<tt class="docutils literal"><span class="pre">\PolIfEndPointIsPositive{A}{B}</span></tt>,
+<tt class="docutils literal"><span class="pre">\PolIfEndPointIsNegative{A}{B}</span></tt>, and
+<tt class="docutils literal"><span class="pre">\PolIfEndPointIsZero{A}{B}</span></tt>.</li>
+</ul>
+</li>
+<li>bugfix:<ul>
+<li>it could happen that, contrarily to documentation, an interval
+computed by <a class="reference internal" href="#polsturmisolatezeros-sturmname">\PolSturmIsolateZeros{sturmname}</a> had zero as an
+endpoint,</li>
+<li><a class="reference internal" href="#polensureintervallength-sturmname-index-e">\PolEnsureIntervalLength{sturmname}{index}{E}</a> could under
+certain circumstances erroneously replace a non-zero root by
+zero,</li>
+<li><a class="reference internal" href="#polensureintervallengths-sturmname-e">\PolEnsureIntervalLengths{sturmname}{E}</a> crashed when used with
+a polynomial with no real roots, hence for which no isolation intervals
+existed (thanks to Thomas Söll for report).</li>
+</ul>
+</li>
+<li>new macros:<ul>
+<li><a class="reference internal" href="#id14">\PolSturmIsolateZeros**{sturmname}</a></li>
+<li><a class="reference internal" href="#polsturmisolatezerosgetmultiplicitiesandrationalroots-sturmname">\PolSturmIsolateZerosGetMultiplicitiesAndRationalRoots{sturmname}</a></li>
+<li><a class="reference internal" href="#polsturmisolatezerosandfindrationalroots-sturmname">\PolSturmIsolateZerosAndFindRationalRoots{sturmname}</a></li>
+<li><a class="reference internal" href="#polexprsetup">\polexprsetup</a></li>
+<li><a class="reference internal" href="#id18">\PolPrintIntervals*</a></li>
+<li><a class="reference internal" href="#polprintintervalsnorealroots">\PolPrintIntervalsNoRealRoots</a></li>
+<li><a class="reference internal" href="#polprintintervalsbeginenv">\PolPrintIntervalsBeginEnv</a></li>
+<li><a class="reference internal" href="#polprintintervalsendenv">\PolPrintIntervalsEndEnv</a></li>
+<li><a class="reference internal" href="#polprintintervalsknownroot">\PolPrintIntervalsKnownRoot</a></li>
+<li><a class="reference internal" href="#polprintintervalsunknownroot">\PolPrintIntervalsUnknownRoot</a></li>
+<li><a class="reference internal" href="#polprintintervalsprintmultiplicity">\PolPrintIntervalsPrintMultiplicity</a></li>
+</ul>
+</li>
+<li>new expandable macros:<ul>
+<li><a class="reference internal" href="#polsturmnbofrationalroots-sturmname">\PolSturmNbOfRationalRoots{sturmname}</a></li>
+<li><a class="reference internal" href="#polsturmnbofrationalrootswithmultiplicities-sturmname">\PolSturmNbOfRationalRootsWithMultiplicities{sturmname}</a></li>
+<li><a class="reference internal" href="#polsturmrationalroot-sturmname-k">\PolSturmRationalRoot{sturmname}{k}</a></li>
+<li><a class="reference internal" href="#polsturmrationalrootindex-sturmname-k">\PolSturmRationalRootIndex{sturmname}{k}</a></li>
+<li><a class="reference internal" href="#polsturmrationalrootmultiplicity-sturmname-k">\PolSturmRationalRootMultiplicity{sturmname}{k}</a></li>
+<li><a class="reference internal" href="#polprintintervalsthevar">\PolPrintIntervalsTheVar</a></li>
+<li><a class="reference internal" href="#polprintintervalsthesturmname">\PolPrintIntervalsTheSturmName</a></li>
+<li><a class="reference internal" href="#polprintintervalsthemultiplicity">\PolPrintIntervalsTheMultiplicity</a></li>
+</ul>
+</li>
+</ul>
+</li>
</ul>
</div>
<div class="section" id="acknowledgments">
-<h1><a class="toc-backref" href="#id138">Acknowledgments</a></h1>
+<h1><a class="toc-backref" href="#id159">Acknowledgments</a></h1>
<p>Thanks to Jürgen Gilg whose question about <a class="reference external" href="http://www.ctan.org/pkg/xint">xint</a> usage for
differentiating polynomials was the initial trigger leading to this
package, and to Jürgen Gilg and Thomas Söll for testing it on some
concrete problems.</p>
-<p>Renewed thanks to them on occasion of the <tt class="docutils literal">0.6</tt> release for their
+<p>Renewed thanks to them on occasion of the <tt class="docutils literal">0.6</tt> and <tt class="docutils literal">0.7</tt> releases for their
continued interest.</p>
<p>See README.md for the License.</p>
</div>