1 /* 2 * Licensed to the Apache Software Foundation (ASF) under one or more 3 * contributor license agreements. See the NOTICE file distributed with 4 * this work for additional information regarding copyright ownership. 5 * The ASF licenses this file to You under the Apache License, Version 2.0 6 * (the "License"); you may not use this file except in compliance with 7 * the License. You may obtain a copy of the License at 8 * 9 * https://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 18 /* 19 * This is not the original file distributed by the Apache Software Foundation 20 * It has been modified by the Hipparchus project 21 */ 22 package org.hipparchus.random; 23 24 25 /** 26 * Interface for generators of random number sequences. 27 */ 28 public interface RandomGenerator { 29 30 /** 31 * Sets the seed of the underlying random number generator using an 32 * <code>int</code> seed. 33 * <p> 34 * Sequences of values generated starting with the same seeds 35 * should be identical. 36 * 37 * @param seed the seed value 38 */ 39 void setSeed(int seed); 40 41 /** 42 * Sets the seed of the underlying random number generator using an 43 * <code>int</code> array seed. 44 * <p> 45 * Sequences of values generated starting with the same seeds 46 * should be identical. 47 * 48 * @param seed the seed value 49 */ 50 void setSeed(int[] seed); 51 52 /** 53 * Sets the seed of the underlying random number generator using a 54 * <code>long</code> seed. 55 * <p> 56 * Sequences of values generated starting with the same seeds 57 * should be identical. 58 * 59 * @param seed the seed value 60 */ 61 void setSeed(long seed); 62 63 /** 64 * Generates random bytes and places them into a user-supplied 65 * byte array. The number of random bytes produced is equal to 66 * the length of the byte array. 67 * 68 * @param bytes the non-null byte array in which to put the random bytes 69 */ 70 void nextBytes(byte[] bytes); 71 72 /** 73 * Generates random bytes and places them into a user-supplied 74 * byte array. 75 * 76 * @param bytes the non-null byte array in which to put the random bytes 77 * @param offset the starting index for inserting the generated bytes into 78 * the array 79 * @param len the number of bytes to generate 80 * @throws org.hipparchus.exception.MathIllegalArgumentException if {@code offset < 0} or 81 * {@code offset + len >= bytes.length} 82 */ 83 void nextBytes(byte[] bytes, int offset, int len); 84 85 /** 86 * Returns the next pseudorandom, uniformly distributed {@code int} 87 * value from this random number generator's sequence. 88 * <p> 89 * All 2<sup>32</sup> possible {@code int} values should be produced 90 * with (approximately) equal probability. 91 * 92 * @return the next pseudorandom, uniformly distributed {@code int} 93 * value from this random number generator's sequence 94 */ 95 int nextInt(); 96 97 /** 98 * Returns a pseudorandom, uniformly distributed {@code int} value 99 * between 0 (inclusive) and the specified value (exclusive), drawn from 100 * this random number generator's sequence. 101 * 102 * @param n the bound on the random number to be returned. Must be positive. 103 * @return a pseudorandom, uniformly distributed {@code int} 104 * value between 0 (inclusive) and n (exclusive). 105 * @throws IllegalArgumentException if n is not positive. 106 */ 107 int nextInt(int n); 108 109 /** 110 * Returns the next pseudorandom, uniformly distributed {@code long} 111 * value from this random number generator's sequence. All 2<sup>64</sup> 112 * possible {@code long} values should be produced with (approximately) 113 * equal probability. 114 * 115 * @return the next pseudorandom, uniformly distributed {@code long} 116 * value from this random number generator's sequence 117 */ 118 long nextLong(); 119 120 /** 121 * Returns a pseudorandom, uniformly distributed {@code int} value 122 * between 0 (inclusive) and the specified value (exclusive), drawn from 123 * this random number generator's sequence. 124 * 125 * @param n the bound on the random number to be returned. Must be positive. 126 * @return a pseudorandom, uniformly distributed {@code int} 127 * value between 0 (inclusive) and n (exclusive). 128 * @throws IllegalArgumentException if n is not positive. 129 */ 130 long nextLong(long n); 131 132 /** 133 * Returns the next pseudorandom, uniformly distributed 134 * {@code boolean} value from this random number generator's sequence. 135 * 136 * @return the next pseudorandom, uniformly distributed 137 * <code>boolean</code> value from this random number generator's 138 * sequence 139 */ 140 boolean nextBoolean(); 141 142 /** 143 * Returns the next pseudorandom, uniformly distributed {@code float} 144 * value between <code>0.0</code> and <code>1.0</code> from this random 145 * number generator's sequence. 146 * 147 * @return the next pseudorandom, uniformly distributed {@code float} 148 * value between <code>0.0</code> and <code>1.0</code> from this 149 * random number generator's sequence 150 */ 151 float nextFloat(); 152 153 /** 154 * Returns the next pseudorandom, uniformly distributed 155 * <code>double</code> value between <code>0.0</code> and 156 * <code>1.0</code> from this random number generator's sequence. 157 * 158 * @return the next pseudorandom, uniformly distributed 159 * <code>double</code> value between <code>0.0</code> and 160 * <code>1.0</code> from this random number generator's sequence 161 */ 162 double nextDouble(); 163 164 /** 165 * Returns the next pseudorandom, Gaussian ("normally") distributed 166 * <code>double</code> value with mean <code>0.0</code> and standard 167 * deviation <code>1.0</code> from this random number generator's sequence. 168 * 169 * @return the next pseudorandom, Gaussian ("normally") distributed 170 * <code>double</code> value with mean <code>0.0</code> and 171 * standard deviation <code>1.0</code> from this random number 172 * generator's sequence 173 */ 174 double nextGaussian(); 175 }