Changeset 9958


Ignore:
Timestamp:
09/12/05 01:15:13 (16 years ago)
Author:
piso
Message:

exp(): trap overflow/underflow.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/j/src/org/armedbear/lisp/MathFunctions.java

    r9918 r9958  
    33 *
    44 * Copyright (C) 2004-2005 Peter Graves
    5  * $Id: MathFunctions.java,v 1.28 2005-08-25 05:59:39 piso Exp $
     5 * $Id: MathFunctions.java,v 1.29 2005-09-12 01:15:13 piso Exp $
    66 *
    77 * This program is free software; you can redistribute it and/or
     
    564564    private static LispObject exp(LispObject arg) throws ConditionThrowable
    565565    {
    566         if (arg instanceof DoubleFloat)
    567             return new DoubleFloat(Math.pow(Math.E, ((DoubleFloat)arg).value));
    568         if (arg.realp())
    569             return new SingleFloat((float)Math.pow(Math.E, SingleFloat.coerceToFloat(arg).value));
     566        if (arg.realp()) {
     567            if (arg instanceof DoubleFloat) {
     568                double d = Math.pow(Math.E, ((DoubleFloat)arg).value);
     569                if (TRAP_OVERFLOW && Double.isInfinite(d))
     570                    return signal(new FloatingPointOverflow(NIL));
     571                if (d == 0 && TRAP_UNDERFLOW)
     572                    return signal(new FloatingPointUnderflow(NIL));
     573                return new DoubleFloat(d);
     574            } else {
     575                float f = (float) Math.pow(Math.E, SingleFloat.coerceToFloat(arg).value);
     576                if (TRAP_OVERFLOW && Float.isInfinite(f))
     577                    return signal(new FloatingPointOverflow(NIL));
     578                if (f == 0 && TRAP_UNDERFLOW)
     579                    return signal(new FloatingPointUnderflow(NIL));
     580                return new SingleFloat(f);
     581            }
     582        }
    570583        if (arg instanceof Complex) {
    571584            Complex c = (Complex) arg;
Note: See TracChangeset for help on using the changeset viewer.