Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

c++ рандомное Double число

Юра Осипов Ученик (65), закрыт 12 лет назад
double a,b,x;
a = -0.3;
b = 1.7;
x = (double)rand()/(double) RAND_MAX*(b-a)+a;

Что такое RAND_MAX? Зачем он?
RAND_MAX нигде до этого не задан. Это переменная?

Обычно нет никакого максимального, обычно запись такая:
в общем виде: rand() % (max-min+1) + min
То есть в скобках укаызвается сколько шагов, а переменная а - это начало.

Дополнен 12 лет назад
Спасибо
Лучший ответ
‮рднаскелА Мастер (1920) 12 лет назад
RAND_MAX - максимальное возвращаемое значение функции rand
(он задан в файле stdlib.h, который подключен к твоей программе, да, типа переменной)
так вот (double)rand()/(double) RAND_MAX - это случайное double число от 0 до 1
если это число умножим на b - a, то получим случайное double число от 0 до (b - a),
а если к этому еще прибавим а, то получим случайное double число от a до b, что нам и требуется
а вторым способом можно получить только целое число, т. к. % - остаток от деления может быть только целым
Остальные ответы
Юрий-17 Гений (76488) 12 лет назад
Дробное случайное число получается либо соответствующими генераторами, либо на основе целочисленных генераторов. Последнее лучше в плане хороших вероятностных характеристик. Но проблема в целочисленных генераторах - это невысокая разрядность целочисленной мантиссы. Следовательно вещественные значения не сильно будут отличаться от целочисленных по способу появления. Дело в том, что в ограниченном диапазоне вероятность повторного появления вещественного числа при равномерном законе распределения, равна нулю. А для целых чисел - отлична от нуля. Поэтому, чтобы получить случайное число типа double, нужно определиться с его форматом. Его двоичная нормированная мантисса имеет 53 разряда. Поэтому и генератор должен иметь в генерируемых числах такую же разрядность. С порядком ещё сложнее, так как там не всё так просто будет с равномерностью. Продумайте задачу, точно ли нужно Вам генерировать случайные числа данного типа!
Похожие вопросы