Re: turning differences into sums
Stavros Macrakis <[email protected]> Sun, 21 Jun 2026 08:24:54 -0400
| Newsgroups | gmane.comp.mathematics.maxima.general |
|---|---|
| Message-ID | <CACLVabVeFP_PuhUhT_nYG+VcRRZ99b_0gW4UW52UG6bCiO0Fog@mail.gmail.com> |
--===============2632608224155573089==
Content-Type: multipart/alternative; boundary="000000000000ba4a640654c29dbd"
--000000000000ba4a640654c29dbd
Content-Type: text/plain; charset="UTF-8"
BTW, a trick for getting A+B from A-B is
substpart("-",ex,0)
Why - and not +? Because Maxima treats A-B as A+(-B)
On Sun, Jun 21, 2026, 07:39 Barton Willis <[email protected]> wrote:
> If your primary goal is accurate floating-point evaluation, you might try
> Herbie <https://github.com/herbie-fp/herbie>. But the online
> <http://herbie.uwplse.org> interface to Herbie timed out when I tried
> loading it a moment ago.
>
> Let us know what you all discover.
>
> --Barton
>
>
>
>
>
>
> ------------------------------
> *From:* Claude Heiland-Allen <[email protected]>
> *Sent:* Sunday, June 21, 2026 6:02 AM
> *To:* Stavros Macrakis <[email protected]>
> *Cc:* maxima-discuss <[email protected]>
> *Subject:* Re: [Maxima-discuss] turning differences into sums
>
> Caution: Non-NU Email
>
>
> Thanks for your reply Stavros, however the first example doesn't make
> any difference in this case and the second one has the copy/paste issue
> that I'm trying to avoid (though, it uses a nicer syntax than my
> previous attempts, which is good to learn).
>
> Concretely, I want to programmatically transform all the subtractions in
> the numerator to additions, that is, go from
>
> -((4*(W*sqrt(Y^2+X^2)*Z*sqrt(z^2+2*Z*z+w^2+2*W*w+Z^2+W^2)
> -sqrt(Z^2+W^2)*w*sqrt(y^2+2*Y*y+x^2+2*X*x+Y^2+X^2)*z
> -W*sqrt(Z^2+W^2)*sqrt(y^2+2*Y*y+x^2+2*X*x+Y^2+X^2)*z
> -Z*sqrt(Z^2+W^2)*w*sqrt(y^2+2*Y*y+x^2+2*X*x+Y^2+X^2)
>
> -W*Z*sqrt(Z^2+W^2)*sqrt(y^2+2*Y*y+x^2+2*X*x+Y^2+X^2)))
>
>
> to
>
>
> -((4*(W*sqrt(Y^2+X^2)*Z*sqrt(z^2+2*Z*z+w^2+2*W*w+Z^2+W^2)
> +sqrt(Z^2+W^2)*w*sqrt(y^2+2*Y*y+x^2+2*X*x+Y^2+X^2)*z
>
> +W*sqrt(Z^2+W^2)*sqrt(y^2+2*Y*y+x^2+2*X*x+Y^2+X^2)*z
> +Z*sqrt(Z^2+W^2)*w*sqrt(y^2+2*Y*y+x^2+2*X*x+Y^2+X^2)
> +W*Z*sqrt(Z^2+W^2)*sqrt(y^2+2*Y*y+x^2+2*X*x+Y^2+X^2)))
>
>
> so that I can the multiply the parts of the fraction by it.
>
>
> Thanks,
>
>
> Claude
>
> On 21/06/2026 12:49, Stavros Macrakis wrote:
> > Try
> >
> > factor(1/ratsimp(1/ex)),algebraic;
> >
> > ratsimp/algebraic generally eliminates roots in the denominator
> >
> > or more "manually"
> >
> > apply("/",factor(expand(args(ex)*(sqrt(a)+sqrt(b)))))
> >
> >
> > On Sun, Jun 21, 2026, 04:46 Claude Heiland-Allen <[email protected]>
> > wrote:
> >
> > Hi all,
> >
> > I have something like
> >
> > (sqrt(a) - sqrt(b)) / c
> >
> > and I would like to multiply to and bottom by
> >
> > (sqrt(a) + sqrt(b))
> >
> > and simplify each to get
> >
> > (a - b) / (c * (sqrt(a) + sqrt(b)))
> >
> > of course my actual expressions are much more complicated (and I
> > hope my (a-b) will simplify further) and I cannot see how to do it
> > programmatically without lots of manual copy and paste with
> > potential for errors.
> >
> > actual code:
> >
> > s(x,y,z,w) := (x^2 + y^2 - z^2 - w^2) * (x^2 - y^2) / (x^2 + y^2);
> > t(x,y,z,w) := (x^2 + y^2 - z^2 - w^2) * (2 * x * y) / (x^2 + y^2);
> > u(x,y,z,w) := 2 * sqrt((x^2 + y^2) * (z^2 + w^2)) * (z^2 - w^2) /
> > (z^2 + w^2);
> > v(x,y,z,w) := 2 * sqrt((x^2 + y^2) * (z^2 + w^2)) * (2 * z * w) /
> > (z^2 + w^2);
> > p(f) := factor(expand(f(X+x,Y+y,Z+z,W+w) - f(X,Y,Z,W)));
> > p(s);
> > p(t);
> > p(u);
> > p(v);
> >
> > the last two expressions are the ones I want to manipulate as
> > described, here is the last one:
> >
> > -((4*(W*sqrt(Y^2+X^2)*Z*sqrt(z^2+2*Z*z+w^2+2*W*w+Z^2+W^2)
> > -sqrt(Z^2+W^2)*w*sqrt(y^2+2*Y*y+x^2+2*X*x+Y^2+X^2)*z
> > -W*sqrt(Z^2+W^2)*sqrt(y^2+2*Y*y+x^2+2*X*x+Y^2+X^2)*z
> > -Z*sqrt(Z^2+W^2)*w*sqrt(y^2+2*Y*y+x^2+2*X*x+Y^2+X^2)
> > -W*Z*sqrt(Z^2+W^2)*sqrt(y^2+2*Y*y+x^2+2*X*x+Y^2+X^2)))
> > /(sqrt(Z^2+W^2)*sqrt(z^2+2*Z*z+w^2+2*W*w+Z^2+W^2)))
> >
> >
> > context: I'm trying to apply perturbation techniques to iterations
> > of the 4D Hopfbrot fractal, a cousin of the famous 3D Mandelbulb.
> > Perturbation techniques popularized in the last years allow
> > computationally efficient deep zooming of 2D fractals like the
> > Mandelbrot set, and recently have been applied to the Mandelbulb.
> > The main idea is to use "small" differences from one "large"
> > reference orbit, and the key step is symbolically simplifying so
> > there is no catastrophic cancellation when evaluating numerically
> > (i.e. naively (X+x)-X will give 0 instead of x when x << X).
> >
> > Thanks,
> >
> >
> > Claude
> >
> >
> https://urldefense.com/v3/__https://mathr.co.uk__;!!PvXuogZ4sRB2p-tU!HNBMY8w_rKA70J6zDmTJj3M67tGC5xyBsRZ4uBzQTT764MBPm7zFlVo4-1aaHkqqukTjwTljmsTidt0$
> >
> >
> > _______________________________________________
> > Maxima-discuss mailing list
> > [email protected]
> >
> https://urldefense.com/v3/__https://lists.sourceforge.net/lists/listinfo/maxima-discuss__;!!PvXuogZ4sRB2p-tU!HNBMY8w_rKA70J6zDmTJj3M67tGC5xyBsRZ4uBzQTT764MBPm7zFlVo4-1aaHkqqukTjwTljtm35Guw$
> >
>
>
> _______________________________________________
> Maxima-discuss mailing list
> [email protected]
>
> https://urldefense.com/v3/__https://lists.sourceforge.net/lists/listinfo/maxima-discuss__;!!PvXuogZ4sRB2p-tU!HNBMY8w_rKA70J6zDmTJj3M67tGC5xyBsRZ4uBzQTT764MBPm7zFlVo4-1aaHkqqukTjwTljtm35Guw$
>
--000000000000ba4a640654c29dbd
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<div dir=3D"auto">BTW, a trick for getting A+B from A-B is<div dir=3D"auto"=
><br></div><div dir=3D"auto">substpart("-",ex,0)</div><div dir=3D=
"auto"><br></div><div dir=3D"auto">Why - and not +? Because Maxima treats A=
-B as A+(-B)</div><div dir=3D"auto"><br></div></div><br><div class=3D"gmail=
_quote gmail_quote_container"><div dir=3D"ltr" class=3D"gmail_attr">On Sun,=
Jun 21, 2026, 07:39 Barton Willis <<a href=3D"mailto:[email protected]">w=
[email protected]</a>> wrote:<br></div><blockquote class=3D"gmail_quote" st=
yle=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div dir=3D"ltr">
<div style=3D"font-family:Georgia,serif;font-size:12pt;color:rgb(0,0,0)">
If your primary goal is accurate floating-point evaluation, you might try <=
a href=3D"https://github.com/herbie-fp/herbie" id=3D"m_2906473463755501187O=
WA08c4dd08-244c-fd58-87d5-f32d219facd8" title=3D"https://github.com/herbie-=
fp/herbie" target=3D"_blank" rel=3D"noreferrer">
Herbie</a>.=C2=A0 But the <a href=3D"http://herbie.uwplse.org" title=3D"her=
bie.uwplse.org" target=3D"_blank" rel=3D"noreferrer">
online</a>=C2=A0interface to Herbie timed out when I tried loading it a mom=
ent ago.=C2=A0</div>
<div style=3D"font-family:Georgia,serif;font-size:12pt;color:rgb(0,0,0)">
<br>
</div>
<div style=3D"font-family:Georgia,serif;font-size:12pt;color:rgb(0,0,0)">
Let us know what you all discover.</div>
<div style=3D"font-family:Georgia,serif;font-size:12pt;color:rgb(0,0,0)">
<br>
</div>
<div style=3D"font-family:Georgia,serif;font-size:12pt;color:rgb(0,0,0)">
--Barton</div>
<div style=3D"font-family:Georgia,serif;font-size:12pt;color:rgb(0,0,0)">
<br>
</div>
<div style=3D"font-family:Georgia,serif;font-size:12pt;color:rgb(0,0,0)">
<br>
</div>
<div style=3D"font-family:Georgia,serif;font-size:12pt;color:rgb(0,0,0)">
<br>
</div>
<div style=3D"font-family:Georgia,serif;font-size:12pt;color:rgb(0,0,0)">
<br>
</div>
<div style=3D"font-family:Aptos,Aptos_EmbeddedFont,Aptos_MSFontService,Cali=
bri,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)">
<br>
</div>
<div style=3D"font-family:Aptos,Aptos_EmbeddedFont,Aptos_MSFontService,Cali=
bri,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)">
<br>
</div>
<div id=3D"m_2906473463755501187appendonsend"></div>
<hr style=3D"display:inline-block;width:98%">
<div id=3D"m_2906473463755501187divRplyFwdMsg" dir=3D"ltr"><font face=3D"Ca=
libri, sans-serif" style=3D"font-size:11pt" color=3D"#000000"><b>From:</b> =
Claude Heiland-Allen <<a href=3D"mailto:[email protected]" target=3D"_b=
lank" rel=3D"noreferrer">[email protected]</a>><br>
<b>Sent:</b> Sunday, June 21, 2026 6:02 AM<br>
<b>To:</b> Stavros Macrakis <<a href=3D"mailto:[email protected]" targe=
t=3D"_blank" rel=3D"noreferrer">[email protected]</a>><br>
<b>Cc:</b> maxima-discuss <<a href=3D"mailto:[email protected]=
forge.net" target=3D"_blank" rel=3D"noreferrer">[email protected]=
forge.net</a>><br>
<b>Subject:</b> Re: [Maxima-discuss] turning differences into sums</font>
<div>=C2=A0</div>
</div>
<div><font size=3D"2"><span style=3D"font-size:11pt">
<div>Caution: Non-NU Email<br>
<br>
<br>
Thanks for your reply Stavros, however the first example doesn't make<b=
r>
any difference in this case and the second one has the copy/paste issue<br>
that I'm trying to avoid (though, it uses a nicer syntax than my<br>
previous attempts, which is good to learn).<br>
<br>
Concretely, I want to programmatically transform all the subtractions in<br=
>
the numerator to additions, that is, go from<br>
<br>
-((4*(W*sqrt(Y^2+X^2)*Z*sqrt(z^2+2*Z*z+w^2+2*W*w+Z^2+W^2)<br>
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 -s=
qrt(Z^2+W^2)*w*sqrt(y^2+2*Y*y+x^2+2*X*x+Y^2+X^2)*z<br>
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 -W=
*sqrt(Z^2+W^2)*sqrt(y^2+2*Y*y+x^2+2*X*x+Y^2+X^2)*z<br>
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 -Z=
*sqrt(Z^2+W^2)*w*sqrt(y^2+2*Y*y+x^2+2*X*x+Y^2+X^2)<br>
<br>
-W*Z*sqrt(Z^2+W^2)*sqrt(y^2+2*Y*y+x^2+2*X*x+Y^2+X^2)))<br>
<br>
<br>
to<br>
<br>
<br>
-((4*(W*sqrt(Y^2+X^2)*Z*sqrt(z^2+2*Z*z+w^2+2*W*w+Z^2+W^2)<br>
+sqrt(Z^2+W^2)*w*sqrt(y^2+2*Y*y+x^2+2*X*x+Y^2+X^2)*z<br>
<br>
+W*sqrt(Z^2+W^2)*sqrt(y^2+2*Y*y+x^2+2*X*x+Y^2+X^2)*z<br>
+Z*sqrt(Z^2+W^2)*w*sqrt(y^2+2*Y*y+x^2+2*X*x+Y^2+X^2)<br>
+W*Z*sqrt(Z^2+W^2)*sqrt(y^2+2*Y*y+x^2+2*X*x+Y^2+X^2)))<br>
<br>
<br>
so that I can the multiply the parts of the fraction by it.<br>
<br>
<br>
Thanks,<br>
<br>
<br>
Claude<br>
<br>
On 21/06/2026 12:49, Stavros Macrakis wrote:<br>
> Try<br>
><br>
> factor(1/ratsimp(1/ex)),algebraic;<br>
><br>
> ratsimp/algebraic generally eliminates roots in the denominator<br>
><br>
> or more "manually"<br>
><br>
> apply("/",factor(expand(args(ex)*(sqrt(a)+sqrt(b)))))<br>
><br>
><br>
> On Sun, Jun 21, 2026, 04:46 Claude Heiland-Allen <<a href=3D"mailto=
:[email protected]" target=3D"_blank" rel=3D"noreferrer">[email protected]=
k</a>><br>
> wrote:<br>
><br>
>=C2=A0=C2=A0=C2=A0=C2=A0 Hi all,<br>
><br>
>=C2=A0=C2=A0=C2=A0=C2=A0 I have something like<br>
><br>
>=C2=A0=C2=A0=C2=A0=C2=A0 (sqrt(a) - sqrt(b)) / c<br>
><br>
>=C2=A0=C2=A0=C2=A0=C2=A0 and I would like to multiply to and bottom by<=
br>
><br>
>=C2=A0=C2=A0=C2=A0=C2=A0 (sqrt(a) + sqrt(b))<br>
><br>
>=C2=A0=C2=A0=C2=A0=C2=A0 and simplify each to get<br>
><br>
>=C2=A0=C2=A0=C2=A0=C2=A0 (a - b) / (c * (sqrt(a) + sqrt(b)))<br>
><br>
>=C2=A0=C2=A0=C2=A0=C2=A0 of course my actual expressions are much more =
complicated (and I<br>
>=C2=A0=C2=A0=C2=A0=C2=A0 hope my (a-b) will simplify further) and I can=
not see how to do it<br>
>=C2=A0=C2=A0=C2=A0=C2=A0 programmatically without lots of manual copy a=
nd paste with<br>
>=C2=A0=C2=A0=C2=A0=C2=A0 potential for errors.<br>
><br>
>=C2=A0=C2=A0=C2=A0=C2=A0 actual code:<br>
><br>
>=C2=A0=C2=A0=C2=A0=C2=A0 s(x,y,z,w) :=3D (x^2 + y^2 - z^2 - w^2) * (x^2=
- y^2) / (x^2 + y^2);<br>
>=C2=A0=C2=A0=C2=A0=C2=A0 t(x,y,z,w) :=3D (x^2 + y^2 - z^2 - w^2) * (2 *=
x * y) / (x^2 + y^2);<br>
>=C2=A0=C2=A0=C2=A0=C2=A0 u(x,y,z,w) :=3D 2 * sqrt((x^2 + y^2) * (z^2 + =
w^2)) * (z^2 - w^2) /<br>
>=C2=A0=C2=A0=C2=A0=C2=A0 (z^2 + w^2);<br>
>=C2=A0=C2=A0=C2=A0=C2=A0 v(x,y,z,w) :=3D 2 * sqrt((x^2 + y^2) * (z^2 + =
w^2)) * (2 * z * w) /<br>
>=C2=A0=C2=A0=C2=A0=C2=A0 (z^2 + w^2);<br>
>=C2=A0=C2=A0=C2=A0=C2=A0 p(f) :=3D factor(expand(f(X+x,Y+y,Z+z,W+w) - f=
(X,Y,Z,W)));<br>
>=C2=A0=C2=A0=C2=A0=C2=A0 p(s);<br>
>=C2=A0=C2=A0=C2=A0=C2=A0 p(t);<br>
>=C2=A0=C2=A0=C2=A0=C2=A0 p(u);<br>
>=C2=A0=C2=A0=C2=A0=C2=A0 p(v);<br>
><br>
>=C2=A0=C2=A0=C2=A0=C2=A0 the last two expressions are the ones I want t=
o manipulate as<br>
>=C2=A0=C2=A0=C2=A0=C2=A0 described, here is the last one:<br>
><br>
>=C2=A0=C2=A0=C2=A0=C2=A0 -((4*(W*sqrt(Y^2+X^2)*Z*sqrt(z^2+2*Z*z+w^2+2*W=
*w+Z^2+W^2)<br>
>=C2=A0=C2=A0=C2=A0=C2=A0 -sqrt(Z^2+W^2)*w*sqrt(y^2+2*Y*y+x^2+2*X*x+Y^2+=
X^2)*z<br>
>=C2=A0=C2=A0=C2=A0=C2=A0 -W*sqrt(Z^2+W^2)*sqrt(y^2+2*Y*y+x^2+2*X*x+Y^2+=
X^2)*z<br>
>=C2=A0=C2=A0=C2=A0=C2=A0 -Z*sqrt(Z^2+W^2)*w*sqrt(y^2+2*Y*y+x^2+2*X*x+Y^=
2+X^2)<br>
>=C2=A0=C2=A0=C2=A0=C2=A0 -W*Z*sqrt(Z^2+W^2)*sqrt(y^2+2*Y*y+x^2+2*X*x+Y^=
2+X^2)))<br>
>=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 /(sqrt(Z^2+W^2)*sqrt(z^2+2*Z*z+w^2+2*W*w=
+Z^2+W^2)))<br>
><br>
><br>
>=C2=A0=C2=A0=C2=A0=C2=A0 context: I'm trying to apply perturbation =
techniques to iterations<br>
>=C2=A0=C2=A0=C2=A0=C2=A0 of the 4D Hopfbrot fractal, a cousin of the fa=
mous 3D Mandelbulb.<br>
>=C2=A0=C2=A0=C2=A0=C2=A0 Perturbation techniques popularized in the las=
t years allow<br>
>=C2=A0=C2=A0=C2=A0=C2=A0 computationally efficient deep zooming of 2D f=
ractals like the<br>
>=C2=A0=C2=A0=C2=A0=C2=A0 Mandelbrot set, and recently have been applied=
to the Mandelbulb.<br>
>=C2=A0=C2=A0=C2=A0=C2=A0 The main idea is to use "small" diff=
erences from one "large"<br>
>=C2=A0=C2=A0=C2=A0=C2=A0 reference orbit, and the key step is symbolica=
lly simplifying so<br>
>=C2=A0=C2=A0=C2=A0=C2=A0 there is no catastrophic cancellation when eva=
luating numerically<br>
>=C2=A0=C2=A0=C2=A0=C2=A0 (i.e. naively (X+x)-X will give 0 instead of x=
when x << X).<br>
><br>
>=C2=A0=C2=A0=C2=A0=C2=A0 Thanks,<br>
><br>
><br>
>=C2=A0=C2=A0=C2=A0=C2=A0 Claude<br>
><br>
>=C2=A0=C2=A0=C2=A0=C2=A0 <a href=3D"https://urldefense.com/v3/__https:/=
/mathr.co.uk__;!!PvXuogZ4sRB2p-tU!HNBMY8w_rKA70J6zDmTJj3M67tGC5xyBsRZ4uBzQT=
T764MBPm7zFlVo4-1aaHkqqukTjwTljmsTidt0$" target=3D"_blank" rel=3D"noreferre=
r">
https://urldefense.com/v3/__https://mathr.co.uk__;!!PvXuogZ4sRB2p-tU!HNBMY8=
w_rKA70J6zDmTJj3M67tGC5xyBsRZ4uBzQTT764MBPm7zFlVo4-1aaHkqqukTjwTljmsTidt0$<=
/a><br>
><br>
><br>
>=C2=A0=C2=A0=C2=A0=C2=A0 ______________________________________________=
_<br>
>=C2=A0=C2=A0=C2=A0=C2=A0 Maxima-discuss mailing list<br>
>=C2=A0=C2=A0=C2=A0=C2=A0 <a href=3D"mailto:[email protected]=
orge.net" target=3D"_blank" rel=3D"noreferrer">[email protected]=
orge.net</a><br>
>=C2=A0=C2=A0=C2=A0=C2=A0 <a href=3D"https://urldefense.com/v3/__https:/=
/lists.sourceforge.net/lists/listinfo/maxima-discuss__;!!PvXuogZ4sRB2p-tU!H=
NBMY8w_rKA70J6zDmTJj3M67tGC5xyBsRZ4uBzQTT764MBPm7zFlVo4-1aaHkqqukTjwTljtm35=
Guw$" target=3D"_blank" rel=3D"noreferrer">
https://urldefense.com/v3/__https://lists.sourceforge.net/lists/listinfo/ma=
xima-discuss__;!!PvXuogZ4sRB2p-tU!HNBMY8w_rKA70J6zDmTJj3M67tGC5xyBsRZ4uBzQT=
T764MBPm7zFlVo4-1aaHkqqukTjwTljtm35Guw$</a><br>
><br>
<br>
<br>
_______________________________________________<br>
Maxima-discuss mailing list<br>
<a href=3D"mailto:[email protected]" target=3D"_blank" r=
el=3D"noreferrer">[email protected]</a><br>
<a href=3D"https://urldefense.com/v3/__https://lists.sourceforge.net/lists/=
listinfo/maxima-discuss__;!!PvXuogZ4sRB2p-tU!HNBMY8w_rKA70J6zDmTJj3M67tGC5x=
yBsRZ4uBzQTT764MBPm7zFlVo4-1aaHkqqukTjwTljtm35Guw$" target=3D"_blank" rel=
=3D"noreferrer">https://urldefense.com/v3/__https://lists.sourceforge.net/l=
ists/listinfo/maxima-discuss__;!!PvXuogZ4sRB2p-tU!HNBMY8w_rKA70J6zDmTJj3M67=
tGC5xyBsRZ4uBzQTT764MBPm7zFlVo4-1aaHkqqukTjwTljtm35Guw$</a><br>
</div>
</span></font></div>
</div>
</blockquote></div>
--000000000000ba4a640654c29dbd--
--===============2632608224155573089==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline
--===============2632608224155573089==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline
_______________________________________________
Maxima-discuss mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/maxima-discuss
--===============2632608224155573089==--