On Dec 13, 4:09 pm, Dan Drake <dr...@kaist.edu> wrote: > ...especially when the float is 1.5, which can be represented exactly as > a binary float!
Actually, I think it is by design that "integrate" does not work right when "keepfloat: true;". The routine "crecip" (reciprocal modulo "modulus") relies one dynamically-scoped variable modulus. It looks like polynomial arithmetic (which is conceivably necessary when computing integrals) can be thrown off when "modulus" is set in some outer scope. Evidence (transcript below). Verbal description - we run the example with debugger "on" and "keepfloat: true". This brings us in the debugger shell, with the scope of the error. When we try to compute the gcd(x^2+1.5,x), we get an error, clearly showing that the "modulus" is the problem. - when we run gcd(x^2+1.5,x) at toplevel, no such error occurs; presumably because modulus does not have a value in that scope. Conjecture: The integration error occurs due to a similar problem, but in a less shielded way, so we get a less intelligible error message about essentially the same problem. >From a maxima perspective, I don't think anymore this really is an error. I don't think you can expect the advanced integration routines to work in the presence of floats, because polynomial arithmetic is necessary and things like gcds are horrible to compute for polynomials with float coefficients. Therefore, it is written with the assumption that keepfloat:false holds, or at least that integration does not encounter floats. With that assumption, they are free to set "modulus", because the codepaths that are affected by it should not be triggered. Proposed bugfix: symbolic integration should reject floats. sage: maxima.console() ;;; Loading #P"/usr/local/sage/local/lib/ecl/sb-bsd-sockets.fas" ;;; Loading #P"/usr/local/sage/local/lib/ecl/sockets.fas" ;;; Loading #P"/usr/local/sage/local/lib/ecl/defsystem.fas" ;;; Loading #P"/usr/local/sage/local/lib/ecl/cmp.fas" Maxima 5.23.2 http://maxima.sourceforge.net using Lisp ECL 11.1.1 Distributed under the GNU Public License. See the file COPYING. Dedicated to the memory of William Schelter. The function bug_report() provides bug reporting information. (%i1) keepfloat: true; (%o1) true (%i2) debugmode(true); (%o2) true (%i3) integrate(sin(t)^2/(1*cos(t) + 1.5)^2,t,0,2*%pi); CRECIP: attempted inverse of zero (mod 3) -- an error. Entering the Maxima debugger. Enter ':h' for help. (dbm:1) gcd(x^2+1.5,x); rat: can't rationalize 1.5 when modulus = 3 [...] (%i4) gcd(x^2+1.5,x); rat: replaced 1.5 by 3/2 = 1.5 1 (%o4) - 2 -- To post to this group, send an email to sage-devel@googlegroups.com To unsubscribe from this group, send an email to sage-devel+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/sage-devel URL: http://www.sagemath.org