Y... bueno... ya que estamos...
Si se quiere tener "absoluto" control sobre el generador de números pseudoaleatorios se puede diseñar un generador congruencial mixto multiplicativo:
Xi1 = ((A * Xi) + B) mod M;
La explicación es simple: Se toma un valor inicial, Xo que será el valor semilla, y en base a éste y las constantes A, B y M se obtiene el siguiente número (X1).
El procedimiento se repite, siendo Xi ahora el valor calculado previamente (X1) para obtener X2....
El valor M se conoce como módulo y es un número muy grande... (recomiendo emplear Int64 para tener grandes números y secuencias más "aleatorias"). Este M indicará el tope o máximo de la secuencia. El generador podrá obtener M-1 números diferentes, semejando una distribución "aleatoria".
NOTA: deben elegirse con cierto cuidado los valores de A, B y M si se quiere garantizar de que se obtenga la máxima secuencia posible. Existen unos axiomas que permiten establecer valores adecuados. Debo admitir que ya no los recuerdo

.... tengo oxidada la teoría de Modelos.
Una búsqueda en Google sobre generador de números pseudoaletorio mixto multiplicativo llevará a más información.
Espero que se entienda el tema.
Si se desea obtener números reales, distribuídos en el rango [0,1), basta con hacer:
EDITO:
Aquí están los axiomas:
1. c es primo con M
2. a-1 es múltiplo de p para todo primo p que divida a M
3. a-1 es múltiplo de 4 siempre que M sea múltiplo de 4
Estas condiciones se cumplen, por ejemplo, si se escogen M=2k, a=4t+1, y c número impar, siendo t, k enteros mayores que 0.
Fuente
Para algo relativamente "casero", y que no demanda amplios controles de ingeniería ni complejos modelos de simulación basta y sobra.
Ahora si se está en duda si funcionará de manera óptima puede correrse una pruebas de aleatoriedad: Chi-Cuadrado, Kolmorov-Smirnov y Test de Series son las más utilizadas.
Saludos,