Чтобы ответить на вопрос а, все, что вам нужно сделать, это округлить до ближайшего 0,00001, чтобы получить ответ в этих единицах.Например:
step = 0.00001;
quantized_x = step * Math.rint(x / step);
Теперь для части b у вас есть правильная идея, и код, который вы представили, должен работать.Все, что вам нужно сделать, это изменить масштаб вашей переменной до желаемого диапазона.Единственное, что я могу добавить, это то, что основная причина этой работы - это теорема об изменении переменных из исчисления: http://en.wikipedia.org/wiki/Integration_by_substitution
Если вы разработаете эту формулу в случае гауссовского распределения со средним 0 и стандартным отклонением1, будучи преобразованным линейным сдвигом и масштабированием, вы увидите, что то, что вы написали, действительно было правильным.
Собирая все это вместе, вот код, который должен добиться цели:
double next_gaussian()
{
double x = rng.nextGaussian(); //Use whichever method you like
//here to generate an initial [-1,1] gaussian distribution
y = (x * 0.5) + 0.5; //Rescale to [0,1]
return Math.rint(y * 100000.0) * 0.00001; //Quantize to step size 0.00001
}