Changed float to double for uniform_real_distribution because uniform<float>(a, b) could possibly generate b