Генерация дробного числа с заданной точностью на C++
Самый простой вариант

#include <stdlib.h>

double GetNormalizedRandomNumber(int digits)
{
    double precision = pow(10, digits);
    assert(precision < RAND_MAX); // Precision is too high.
    double ret = rand() % precision;
    ret /= precision;
    return ret;
}

Компьютеру неудобно работать с числами с разной точностью. У него есть аппаратно реализованные float и double, которые работают быстро. Соответсвенно все решения, которые вам тут предлагают сводятся к получению случайного числа с большой точностью и загрубления его до указанной вами. У меня есть сомнение, что для метода Монте-Карло это загрубление вообще нужно.