/*******************************************************************************
 * GenRGenS v.1.0, Generation of Random Genomic Sequences                      *
 * Copyright (C) 2001  Alain Denise/Yann Ponty                                 *
 *                                                                             *
 * This program is free software; you can redistribute it and/or               *
 * modify it under the terms of the GNU General Public License                 *
 * as published by the Free Software Foundation; either version 2              *
 * of the License, or (at your option) any later version.                      *
 *                                                                             *
 * This program is distributed in the hope that it will be useful,             *
 * but WITHOUT ANY WARRANTY; without even the implied warranty of              *
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the               *
 * GNU General Public License for more details.                                *
 *                                                                             *
 * You should have received a copy of the GNU General Public License           *
 * along with this program; if not, write to the Free Software                 *
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA. *
 *******************************************************************************/

package GenRGenS.utility;


import java.math.*;
import java.util.Random;
import java.util.Date;

/**
 * Classe destinée à la génération de nombres aléatoires de grandes
 * tailles.
 * @author Frédéric Sarron 
 * @see java.math.BigDecimal
 */


public class RandomBigDecimal
{
		
		private static BigInteger ZERO = new BigInteger("0");
		private static BigInteger TEN = new BigInteger("10");
		
		
		/** 
		* Construit un BigDecimal aleatoire entre 0 et une borne
		* en utilisant la source aleatoire precisee.
		* @param borneSup La borne supérieure pour la valeur du réél arbitrairement long engendré
		* @param randomSource Le générateur aléatoire utilisé pour engendrer ce nombre.
		*/
		public static BigDecimal getRandomBigDecimal(BigDecimal borneSup,
																								 Random randomSource)
		{
				BigInteger borneSupInteger = borneSup.unscaledValue();
				BigInteger alea=ZERO;
        switch (borneSupInteger.compareTo(ZERO))
        {
            case -1: throw new IllegalArgumentException("GetRandomBigDecimal(BigDecimal, Random) : Superior boundary must be positive");
            case 0: break;
            case 1:
               do
                   alea = new BigInteger(borneSupInteger.bitLength(),
																				 randomSource);
               while (alea.compareTo(borneSupInteger)>=0);
        };

        return new BigDecimal(alea,borneSup.scale());				
		};


};
