1 21 22 package org.armedbear.lisp; 23 24 public final class float_sign extends Primitive 25 { 26 private float_sign() 27 { 28 super("float-sign", "float-1 &optional float-2"); 29 } 30 31 public LispObject execute(LispObject arg) throws ConditionThrowable 32 { 33 try { 34 double d = ((LispFloat)arg).value; 35 long bits = Double.doubleToRawLongBits(d); 36 return bits < 0 ? LispFloat.MINUS_ONE : LispFloat.ONE; 37 } 38 catch (ClassCastException e) { 39 return signal(new TypeError(arg, Symbol.FLOAT)); 40 } 41 } 42 43 public LispObject execute(LispObject first, LispObject second) 44 throws ConditionThrowable 45 { 46 double d1, d2; 47 try { 48 d1 = ((LispFloat)first).value; 49 } 50 catch (ClassCastException e) { 51 return signal(new TypeError(first, Symbol.FLOAT)); 52 } 53 try { 54 d2 = Math.abs(((LispFloat)second).value); 55 } 56 catch (ClassCastException e) { 57 return signal(new TypeError(second, Symbol.FLOAT)); 58 } 59 long bits = Double.doubleToRawLongBits(d1); 60 return bits < 0 ? new LispFloat(-d2) : new LispFloat(d2); 61 } 62 63 private static final Primitive FLOAT_SIGN = new float_sign(); 64 } 65 | Popular Tags |