00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00030 public class RanTable {
00031 private double[] doubleTable;
00032 private int doubleTableIndex = 0;
00033 private int doubleTableSize;
00034 private int[] intTable;
00035 private int intTableIndex = 0;
00036 private int intTableSize;
00037
00038 RanQD1 ran;
00039
00047 public RanTable (int doubleTableSize, int intTableSize, int aveInt, long index) {
00048 this.doubleTableSize = doubleTableSize;
00049 this.intTableSize = intTableSize;
00050 ran = new RanQD1(index);
00051
00052 doubleTable = new double[doubleTableSize];
00053 for (int i=0; i<doubleTableSize; i++) doubleTable[i] = ran.nextDouble();
00054 ran.setSeed(index);
00055
00056 intTable = new int[intTableSize];
00057 for (int i=0; i<intTableSize; i++) intTable[i] = ran.nextInt(0, 2*aveInt);
00058 ran.setSeed(index);
00059 }
00060
00064 public void setSeed (long seed) {
00065 doubleTableIndex = (int) (seed & (doubleTableSize-1));
00066 intTableIndex = (int) (seed & (intTableSize-1));
00067 }
00068
00072 public double nextDouble () {
00073 doubleTableIndex = (doubleTableIndex+1) & (doubleTableSize-1);
00074 return doubleTable[doubleTableIndex];
00075 }
00076
00080 public int nextInteger () {
00081 intTableIndex = (intTableIndex+1) & (intTableSize-1);
00082 return intTable[intTableIndex];
00083 }
00084 }