From: Erik H. <eh...@gm...> - 2009-03-19 16:14:17
|
Committed. Thanks again! Bye, Erik. On Thu, Mar 19, 2009 at 4:43 PM, Erik Huelsmann <eh...@gm...> wrote: > I should have replied to all. > > On Thu, Mar 19, 2009 at 4:42 PM, Erik Huelsmann <eh...@gm...> wrote: >> On Thu, Mar 19, 2009 at 7:13 AM, Robert Dodier <rob...@ya...> wrote: >>> >>> Hello, something turned up by the Maxima test suite >>> (problem 60 in rtest_trig). The ACOS function for >>> complex double argument seems to be calculated incorrectly. >>> The real part appears to be single precision >>> (while the imaginary part is double precision). I think >>> the problem is fixed by the patch shown below. >>> What do you think? >> >> I think it's great you found the source of the issue! Thanks! >> >> The solution however, is a bit hairier than the one you suggest, >> because !DoubleFloat does not only mean SingleFloat, but also Ratio, >> Fixnum or Bignum. So, what I did is make this out of it: >> >> if (!(arg instanceof DoubleFloat)) { >> if (arg instanceof Complex && >> ((Complex)arg).getRealPart() instanceof DoubleFloat) { >> // do nothing; we want to keep the double float value >> } >> else >> result = new SingleFloat((float)((DoubleFloat)result).value); >> } >> >> I'm running the test suite now and if it passes both the ansi and the >> maxima tests, I'll go on to commit later tonight. >> >> Thanks again for finding the issue! >> >> Bye, >> >> Erik. >> >>> >>> Hope this helps >>> >>> Robert Dodier >>> >>> >>> Index: src/org/armedbear/lisp/MathFunctions.java >>> =================================================================== >>> --- src/org/armedbear/lisp/MathFunctions.java (revision 11712) >>> +++ src/org/armedbear/lisp/MathFunctions.java (working copy) >>> @@ -168,7 +168,7 @@ >>> return new SingleFloat((float)Math.acos(f)); >>> } >>> LispObject result = new DoubleFloat(Math.PI/2); >>> - if (!(arg instanceof DoubleFloat)) >>> + if (arg instanceof SingleFloat || (arg instanceof Complex && ((Complex) arg).getRealPart () instanceof SingleFloat)) >>> result = new SingleFloat((float)((DoubleFloat)result).value); >>> result = result.subtract(asin(arg)); >>> if (result instanceof Complex) { >>> >>> >>> >>> >>> >>> ------------------------------------------------------------------------------ >>> Apps built with the Adobe(R) Flex(R) framework and Flex Builder(TM) are >>> powering Web 2.0 with engaging, cross-platform capabilities. Quickly and >>> easily build your RIAs with Flex Builder, the Eclipse(TM)based development >>> software that enables intelligent coding and step-through debugging. >>> Download the free 60 day trial. http://p.sf.net/sfu/www-adobe-com >>> _______________________________________________ >>> armedbear-j-devel mailing list >>> arm...@li... >>> https://lists.sourceforge.net/lists/listinfo/armedbear-j-devel >>> >> > |