Changeset 8767


Ignore:
Timestamp:
03/14/05 14:23:00 (16 years ago)
Author:
piso
Message:

multiplyBy(), divideBy(): added support for complex arguments.

File:
1 edited

Legend:

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

    r8757 r8767  
    33 *
    44 * Copyright (C) 2003-2005 Peter Graves
    5  * $Id: Bignum.java,v 1.62 2005-03-12 17:53:48 piso Exp $
     5 * $Id: Bignum.java,v 1.63 2005-03-14 14:23:00 piso Exp $
    66 *
    77 * This program is free software; you can redistribute it and/or
     
    132132            return value.equals(((Bignum)obj).value);
    133133        if (obj instanceof LispFloat)
    134             return floatValue() == ((LispFloat)obj).getValue();
     134            return floatValue() == ((LispFloat)obj).value;
    135135        return false;
    136136    }
     
    232232        }
    233233        if (obj instanceof LispFloat)
    234             return new LispFloat(floatValue() + ((LispFloat)obj).getValue());
     234            return new LispFloat(floatValue() + ((LispFloat)obj).value);
    235235        if (obj instanceof Complex) {
    236236            Complex c = (Complex) obj;
     
    253253        }
    254254        if (obj instanceof LispFloat)
    255             return new LispFloat(floatValue() - ((LispFloat)obj).getValue());
     255            return new LispFloat(floatValue() - ((LispFloat)obj).value);
    256256        if (obj instanceof Complex) {
    257257            Complex c = (Complex) obj;
     
    288288        }
    289289        if (obj instanceof LispFloat)
    290             return new LispFloat(floatValue() * ((LispFloat)obj).getValue());
     290            return new LispFloat(floatValue() * ((LispFloat)obj).value);
     291        if (obj instanceof Complex) {
     292            Complex c = (Complex) obj;
     293            return Complex.getInstance(multiplyBy(c.getRealPart()),
     294                                       multiplyBy(c.getImaginaryPart()));
     295        }
    291296        return signal(new TypeError(obj, Symbol.NUMBER));
    292297    }
     
    303308        }
    304309        if (obj instanceof LispFloat)
    305             return new LispFloat(floatValue() / ((LispFloat)obj).getValue());
     310            return new LispFloat(floatValue() / ((LispFloat)obj).value);
     311        if (obj instanceof Complex) {
     312            Complex c = (Complex) obj;
     313            LispObject realPart = c.getRealPart();
     314            LispObject imagPart = c.getImaginaryPart();
     315            LispObject denominator =
     316                realPart.multiplyBy(realPart).add(imagPart.multiplyBy(imagPart));
     317            return Complex.getInstance(multiplyBy(realPart).divideBy(denominator),
     318                                       Fixnum.ZERO.subtract(multiplyBy(imagPart).divideBy(denominator)));
     319        }
    306320        return signal(new TypeError(obj, Symbol.NUMBER));
    307321    }
Note: See TracChangeset for help on using the changeset viewer.