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
То есть в скобках укаызвается сколько шагов, а переменная а - это начало.
Другие языки программирования и технологии
c++ рандомное Double число
RAND_MAX - максимальное возвращаемое значение функции rand
(он задан в файле stdlib.h, который подключен к твоей программе, да, типа переменной)
так вот (double)rand()/(double) RAND_MAX - это случайное double число от 0 до 1
если это число умножим на b - a, то получим случайное double число от 0 до (b - a),
а если к этому еще прибавим а, то получим случайное double число от a до b, что нам и требуется
а вторым способом можно получить только целое число, т. к. % - остаток от деления может быть только целым
(он задан в файле stdlib.h, который подключен к твоей программе, да, типа переменной)
так вот (double)rand()/(double) RAND_MAX - это случайное double число от 0 до 1
если это число умножим на b - a, то получим случайное double число от 0 до (b - a),
а если к этому еще прибавим а, то получим случайное double число от a до b, что нам и требуется
а вторым способом можно получить только целое число, т. к. % - остаток от деления может быть только целым
Дробное случайное число получается либо соответствующими генераторами, либо на основе целочисленных генераторов. Последнее лучше в плане хороших вероятностных характеристик. Но проблема в целочисленных генераторах - это невысокая разрядность целочисленной мантиссы. Следовательно вещественные значения не сильно будут отличаться от целочисленных по способу появления. Дело в том, что в ограниченном диапазоне вероятность повторного появления вещественного числа при равномерном законе распределения, равна нулю. А для целых чисел - отлична от нуля. Поэтому, чтобы получить случайное число типа double, нужно определиться с его форматом. Его двоичная нормированная мантисса имеет 53 разряда. Поэтому и генератор должен иметь в генерируемых числах такую же разрядность. С порядком ещё сложнее, так как там не всё так просто будет с равномерностью. Продумайте задачу, точно ли нужно Вам генерировать случайные числа данного типа!
Похожие вопросы
- C++ long double большие числа при умножении искажаются
- Особенности арифметических операций в C++, деление отрицательных чисел, вопрос ниже
- Как в c++ сравнить несколько чисел
- Пожалуйста помогите,C++ .Дана последовательность чисел.Найти в ней наименьшее число.
- Помогите с программой на C++! (Вывод квадратов чисел от 1 до 20). Не знаю, что не так.
- Программа, которая находит разность двух чисел (IEEE 754 стандарт double) ассемблер.
- C# Почему const uint SIZE не воспринимается массивом, как константа, а int работает? Погрешности с double
- Допустим, есть у меня промежуток от 1 до 10000. Компьютер даёт мне рандомное число из этого промежутка и спрашивает
- C++ Двухмерный массив с случайными не повторяющимися числами.
- Помогите испрвить код Переписать первые элементы каждой строки матрицы a(n*m), больше некоторого числа C, в массив b .