Raymond toy write
>Footnotes:
> [1] This points out a small bug. maxima defines its own versions of
> asin, acos, atan, sinh, cosh, tanh, asinh, acosh, and atanh, which are
> all standard Lisp functions. This prevented me from computing
> elliptic functions for complex args. These should probably be
> modified. Plus I think the definitions for sinh, tanh, and perhaps
> others lose precision for x near 0.
But I think your opnion wrong at sevral points.
Especially at saying lose precision,you intend to say round errors,
maxima treats fine this with bfloat.
you shoud decide FPPREC length according to your goal precision.
example
(C1) FPPREC:100;
(C2) sinh(1.0B-20),bfloat;
(D2) 1.00000000000000000000000000000000000000001666666666666666666666666666666#
6666666666664063064574260973B-20
this calculation is executed by according to source coad in
trigi.lisp.
(C3)exp(1.0B-20);
(D3) 1.00000000000000000001000000000000000000005000000000000000000016666666666#
6666666667083333333333333333B0
(C4)exp(-1.0B-20);
(D4) 9.99999999999999999990000000000000000000049999999999999999999833333333333#
33333333375B-1
(C5) D3-D4;
(D5) 2.00000000000000000000000000000000000000003333333333333333333333333333333#
3333333333328126129148521946B-20
(C6) %/2;
(D6) 1.00000000000000000000000000000000000000001666666666666666666666666666666#
6666666666664063064574260973B-20
We control round error with this mechanism and our head,I think.
But we shoud introduce "Interval Computation" in maxima ,like maple or
mathematica.
At present state,unless reading source carefully,we cannot use maxima.
I wrote
>so i think that you (shoud)define sin1(Z),
> (C5) sin1(z) := trigexpand(sin(rectform(z));
> (C6)sin1((1+%i)/sqrt(2));
> (d6) %ICOS(1/sqrt(2))SINH(1/sqrt(2))+COSH(1/sqrt(2))SIN(1/sqrt(2))
this essential point is rectform.
see
(C7)trigexpand(sin((1+%i)/sqrt(2)));
(d7) sin((1+%i)/sqrt(2))
(C8)%,numer;
(d8) sin((1+%i)/sqrt(2))
It is difficult to transform argument one pattern to
another,automatically.
At least you shoud read trigi.lisp carefully again.