Changeset 4532
- Timestamp:
- 10/25/03 18:55:08 (19 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/j/src/org/armedbear/lisp/Primitives.java
r4528 r4532 3 3 * 4 4 * Copyright (C) 2002-2003 Peter Graves 5 * $Id: Primitives.java,v 1.48 2 2003-10-24 20:30:57 pisoExp $5 * $Id: Primitives.java,v 1.483 2003-10-25 18:55:08 dmcnaught Exp $ 6 6 * 7 7 * This program is free software; you can redistribute it and/or … … 4498 4498 }; 4499 4499 4500 private static final LispFloat log(LispObject obj) throws ConditionThrowable 4501 { 4502 if (obj instanceof Fixnum) 4503 return new LispFloat(Math.log(((Fixnum)obj).getValue())); 4504 if (obj instanceof Bignum) 4505 return new LispFloat(Math.log(((Bignum)obj).floatValue())); 4506 if (obj instanceof Ratio) 4507 return new LispFloat(Math.log(((Ratio)obj).floatValue())); 4508 if (obj instanceof LispFloat) 4509 return new LispFloat(Math.log(((LispFloat)obj).getValue())); 4500 private static final LispObject log(LispObject obj) throws ConditionThrowable 4501 { 4502 if (obj.realp() && !obj.minusp()) { // real value 4503 if (obj instanceof Fixnum) 4504 return new LispFloat(Math.log(((Fixnum)obj).getValue())); 4505 if (obj instanceof Bignum) 4506 return new LispFloat(Math.log(((Bignum)obj).floatValue())); 4507 if (obj instanceof Ratio) 4508 return new LispFloat(Math.log(((Ratio)obj).floatValue())); 4509 if (obj instanceof LispFloat) 4510 return new LispFloat(Math.log(((LispFloat)obj).getValue())); 4511 } else { // returning Complex 4512 LispFloat re, im, phase, abs; 4513 if (obj.realp() && obj.minusp()) { 4514 re = LispFloat.coerceToFloat(obj); 4515 abs = new LispFloat(Math.abs(re.getValue())); 4516 phase = new LispFloat(Math.PI); 4517 return Complex.getInstance(new LispFloat(Math.log(abs.getValue())), phase); 4518 } else if (obj instanceof Complex) { 4519 re = LispFloat.coerceToFloat(((Complex)obj).getRealPart()); 4520 im = LispFloat.coerceToFloat(((Complex)obj).getImaginaryPart()); 4521 phase = new LispFloat(Math.atan2(im.getValue(), re.getValue())); // atan(y/x) 4522 abs = (LispFloat)((Complex)obj).ABS(); 4523 return Complex.getInstance(new LispFloat(Math.log(abs.getValue())), phase); 4524 } 4525 } 4526 4510 4527 throw new ConditionThrowable(new TypeError(obj, "number")); 4511 4528 }
Note: See TracChangeset
for help on using the changeset viewer.