oldk1331 wrote:
>
> "draw((x^3)^(1/3),x=(-1)..0)" gives an error:
>
> Result is not real.
>
> The root of this bug is from makeFloatFunction,
> which takes an expression and makes it into a Lisp
> function, in this case:
>
> (DEFUN %E (x) (DECLARE (DOUBLE-FLOAT x)) (c_to_rf (EXPT (EXPT x 3) (/ 1 3))))
>
> However, in Common Lisp, "expt is defined as b^x = e^x log b."
> "The result is always the principal complex value"
> when the first arg is negative. So in CL, "(EXPT -1 (/ 1 3))"
> doesn't return "-1" but a complex value.
>
> There are things like "compiledFunction" that don't
> have this problem, but as the documentation of MKFLCFN
> says: "compiled Lisp functions ... by-passes the compiler
> and interpreter, thereby gaining several orders of magnitude."
>
> So what's the correct fix? Add a special case for
> EXPT to change "(EXPT a b)" into "(- (EXPT (- a) b))"
> when (< a 0)?
First, if we expect agreement between various definitions,
then the only resonable thing _real_ power can do is
to singnal error for negative first argument. So
one way to fix this is change '^' so that is signals
error. This would restore correspondence between
numeric evaluation and plot.
If you insit that current definition of '^' is correct,
then the only solution is to disable direct generation
of Lisp code (say when '^' is present).
--
Waldek Hebisch
--
You received this message because you are subscribed to the Google Groups
"FriCAS - computer algebra system" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/fricas-devel.
For more options, visit https://groups.google.com/d/optout.