Если ваши верхняя и нижняя границы являются смежными степенями двух, то полученное вами распределение будет таким же, как и полученное из rand()
, так как вы фактически просто изменяете показатель того, что дает rand()
, без изменения мантиссы.
Если вы хотите расширить диапазон, чтобы охватить более одной степени двойки, то в нижней половине диапазона будут действительные числа с плавающей запятой, которые никогда не будут сгенерированы вашим методом. (Вы фактически сдвигаете один или несколько битов мантиссы в экспоненту, оставляя наименее значимый бит (ы) мантиссы неслучайным.)
Если вы используете метод в более общем диапазоне (например, мантисса изменяется при вычислении), то вы также сталкиваетесь с той же неоднородностью, которую получаете при попытке преобразовать случайное целое число в случайное целое число по модулю n без использования выборки отклонения.
Любой правильный метод генерации равномерного распределения чисел с плавающей запятой должен учитывать, что интервал действительных чисел, который округляется до любого заданного числа с плавающей запятой, не всегда одинаковой ширины. В нижней части диапазона числа с плавающей запятой будут более плотными, поэтому каждое отдельное число с плавающей запятой в этой части диапазона должно выбираться реже, чем большие числа.