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 * http://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 package org.apache.commons.math.random; 19 20 import org.apache.commons.math.util.FastMath; 21 22 /** 23 * This class implements a normalized uniform random generator. 24 * <p>Since it is a normalized random generator, it generates values 25 * from a uniform distribution with mean equal to 0 and standard 26 * deviation equal to 1. Generated values fall in the range 27 * [-√3, +√3].</p> 28 * 29 * @since 1.2 30 * 31 * @version $Revision: 990655 $ $Date: 2010-08-29 23:49:40 +0200 (dim. 29 aot 2010) $ 32 */ 33 34 public class UniformRandomGenerator implements NormalizedRandomGenerator { 35 36 /** Serializable version identifier. */ 37 private static final long serialVersionUID = 1569292426375546027L; 38 39 /** Square root of three. */ 40 private static final double SQRT3 = FastMath.sqrt(3.0); 41 42 /** Underlying generator. */ 43 private final RandomGenerator generator; 44 45 /** Create a new generator. 46 * @param generator underlying random generator to use 47 */ 48 public UniformRandomGenerator(RandomGenerator generator) { 49 this.generator = generator; 50 } 51 52 /** Generate a random scalar with null mean and unit standard deviation. 53 * <p>The number generated is uniformly distributed between -&sqrt;(3) 54 * and +&sqrt;(3).</p> 55 * @return a random scalar with null mean and unit standard deviation 56 */ 57 public double nextNormalizedDouble() { 58 return SQRT3 * (2 * generator.nextDouble() - 1.0); 59 } 60 61 } 62