algorytm.org

Implementacja w Java



Baza Wiedzy
wersja offline serwisu przeznaczona na urządzenia z systemem Android
Darowizny
darowiznaWspomóż rozwój serwisu
Nagłówki RSS
Artykuły
Implementacje
Komentarze
Forum
Bookmarki






Sonda
Implementacji w jakim języku programowania poszukujesz?

Generator SWBG (Generator Odejmowanie Z Pożyczką) - Implementacja w Java
Ocena użytkownikóww: *****  / 1
SłabyŚwietny
Nadesłany przez Tomasz Lubiński, 28 września 2008 01:00
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.
Pobierz pełne rozwiązanie.

Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.

SWBG.java:
//generowanie liczb pseudolosowych
//generator SWBG - Subtract With Borrow Generator
//Generator Odejmowanie Z Pożyczką
//www.algorytm.org (c) 2008 Tomasz Lubinski

public class SWBG {

	/* Definicje wspolczynnikow j, k oraz m */
	private static final int j = 22;
	private static final int k = 43;
	private static final long m = ((long)2 << 31) - 5; /* 2^32-5 */
	
	/* Definicja wspolczynnika a dla generatora LCG dla zainicjowania tablicy */
	private static final long a = 69069;
	
	/* Tablica x - rejestr cykliczny oraz jej aktualny wskaznik */
	private static long x[] = new long[k];
	private static int i;
	
	/* Wartosc pozyczki c */
	private static long c;


	/* Zainicjuj tablice X - uzyj gneratora LCG o wspolczynnikach:
	m = 2^32-5, a = 69069, c = 0.
	dla takiego generatora wszystkie posrednie wyniki mieszcza sie w 49 bitach */
	public static void initX(long seed)
	{   
	   x[0] = seed;
	   for (int ii=1; ii<k; ii++)
	      x[ii] = (a*x[ii-1]) % m;

	   i = 0;
	   c = 0;
	}	
	
	/* Generator SWBG */
	public static long genRand()
	{
		long result;

		if (x[(k + i - j) % k] >= x[i] + c)
		{
		   x[i] = x[(k + i - j) % k] - x[i] - c;
		   c = 0;
		}
		else
		{
		   x[i] = m - ((x[i] + c) - x[(k + i - j) % k]);
		   c = 1;
		}
		       
		result = x[i];
		i = (i + 1) % k;

		return result; 
	}
	
	/**
	 * generowanie liczb pseudolosowych
     * generator SWBG
     * www.algorytm.org (c) 2008 Tomasz Lubinski
	 */
	public static void main(String[] args) {
		int ii, n;
		long seed;

		System.out.println("Podaj wartosc poczatkowa ziarna (seed)\n");
		seed = Console.readLong("");

		System.out.println("Podaj ile liczb pseudolosowych wylosowac");
		n = Console.readInt("");

		initX(seed);
		for (ii=0; ii<n; ii++) {
			System.out.println(genRand());
		}

	}

}
Dodaj komentarz