Changeset 3614
- Timestamp:
- 09/08/03 12:38:05 (20 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/j/src/org/armedbear/lisp/Primitives.java
r3612 r3614 3 3 * 4 4 * Copyright (C) 2002-2003 Peter Graves 5 * $Id: Primitives.java,v 1.37 4 2003-09-08 02:35:47piso Exp $5 * $Id: Primitives.java,v 1.375 2003-09-08 12:38:05 piso Exp $ 6 6 * 7 7 * This program is free software; you can redistribute it and/or … … 4193 4193 if (args[0] instanceof Fixnum) { 4194 4194 int limit = ((Fixnum)args[0]).getValue(); 4195 i nt n = random.nextInt((int)limit);4196 Debug.assertTrue(n <limit);4197 return new Fixnum(n);4198 }4199 if (args[0] instanceof Bignum) {4195 if (limit > 0) { 4196 int n = random.nextInt((int)limit); 4197 return new Fixnum(n); 4198 } 4199 } else if (args[0] instanceof Bignum) { 4200 4200 BigInteger limit = ((Bignum)args[0]).getValue(); 4201 int bitLength = limit.bitLength(); 4202 BigInteger rand = new BigInteger(bitLength + 1, random); 4203 BigInteger remainder = rand.remainder(limit); 4204 return number(remainder); 4205 } 4206 if (args[0] instanceof LispFloat) { 4201 if (limit.signum() > 0) { 4202 int bitLength = limit.bitLength(); 4203 BigInteger rand = new BigInteger(bitLength + 1, random); 4204 BigInteger remainder = rand.remainder(limit); 4205 return number(remainder); 4206 } 4207 } else if (args[0] instanceof LispFloat) { 4207 4208 double limit = ((LispFloat)args[0]).getValue(); 4208 double rand = random.nextDouble(); 4209 return new LispFloat(rand * limit); 4210 } 4211 throw new TypeError(args[0], "number"); 4209 if (limit > 0) { 4210 double rand = random.nextDouble(); 4211 return new LispFloat(rand * limit); 4212 } 4213 } 4214 throw new TypeError(args[0], "positive integer or positive float"); 4212 4215 } 4213 4216 };
Note: See TracChangeset
for help on using the changeset viewer.