Другие языки программирования и технологии
c++, как отрандомить случайное число типа float в диапазоне от 0 до 10 ? (пример - 0,42; 7,71)
float x = ( 10.0f * rand() ) / RAND_MAX;
Леонид Сорокин
Спасибо
Стандартный rand хреновенький. Он генерит целые числа от 0 до до 32767. Все преобразования диапазонов будут давать такой же результат: всего 32768 значений. Лучше написать собственный, с большим диапазоном значений.
DWORD g_dwRand;
DWORD Rand()
{
return g_dwRand = 0x4F0C7947 + 0x5D588B65 * g_dwRand;
}
Диапазон - от 0 до 4294967295. Т. е. число значений 2^32. Уже намного лучше, осталось диапазон значенией отрегулировать
double DWORD Rand(double Max)
{
return (g_dwRand = 0x4F0C7947 + 0x5D588B65 * g_dwRand) * Max / 4294967296.0;
}
Будет делать 4294967296 значений от 0 до Max (исключая Max)
PS: стандартный rand устроен точно так же, коэффициенты только малюсенькие, появившиеся еще в эпоху 16-разрядных процессоров.
DWORD g_dwRand;
DWORD Rand()
{
return g_dwRand = 0x4F0C7947 + 0x5D588B65 * g_dwRand;
}
Диапазон - от 0 до 4294967295. Т. е. число значений 2^32. Уже намного лучше, осталось диапазон значенией отрегулировать
double DWORD Rand(double Max)
{
return (g_dwRand = 0x4F0C7947 + 0x5D588B65 * g_dwRand) * Max / 4294967296.0;
}
Будет делать 4294967296 значений от 0 до Max (исключая Max)
PS: стандартный rand устроен точно так же, коэффициенты только малюсенькие, появившиеся еще в эпоху 16-разрядных процессоров.
Пример
#include <iostream>
#include <cstdlib>
using namespace std:
int main()
{
srand(time(0));
bool done;
do
{
int i = rand() 0;
while(true)
{
cout <<"Я загадал число, какое? ";
int j;
cin >> j;
if(i > j)
cout <<"Моё число больше "<< endl;
else
{
if(i < j)
cout << " Моё число меньше"<<endl;>>c ;
done = (c != 'y');
}while( !done);
}
#include <iostream>
#include <cstdlib>
using namespace std:
int main()
{
srand(time(0));
bool done;
do
{
int i = rand() 0;
while(true)
{
cout <<"Я загадал число, какое? ";
int j;
cin >> j;
if(i > j)
cout <<"Моё число больше "<< endl;
else
{
if(i < j)
cout << " Моё число меньше"<<endl;>>c ;
done = (c != 'y');
}while( !done);
}
#include <iostream>
#include <ctime>
using namespace std;
int main()
{
srand(time (NULL));
float x = rand()%11;
cout << x << endl;
}
если хочешь указать диапазон указываешь после rand процент %
и число ( если от 0 до 10 включительно то %11)
не забывай подключить библиотеку #include <ctime>
и чтобы число не повторялось одно и тоже каждый раз пиши еще в начале
srand(time (NULL));
#include <ctime>
using namespace std;
int main()
{
srand(time (NULL));
float x = rand()%11;
cout << x << endl;
}
если хочешь указать диапазон указываешь после rand процент %
и число ( если от 0 до 10 включительно то %11)
не забывай подключить библиотеку #include <ctime>
и чтобы число не повторялось одно и тоже каждый раз пиши еще в начале
srand(time (NULL));
Похожие вопросы
- Запишите функцию для получения случайного числа x из промежутка: [0; 15) [0; 15] [-15; 15) [10; 15)
- Заполнить матрицу из 7 строк и 7 столбцов случайными числами в интервале [10;90]
- линейный массив из 20 элементов заполнить случайными числами в диапазоне от 0 до 1000 и отсортировать по возрастанию
- C++ случайные числа
- Генератор Случайных Чисел
- КАК С ГЕНЕРИРОВАТЬ ДВА МАССИВА ИЗ СЛУЧАЙНЫХ ЧИСЕЛ С ПОМОЩЬЮ RANDOM НА ЯЗЫКЕ СИ? Я смог только заполнить от 0 до 255
- 1.Заполнить массив случайными числами. Вывести элементы массива на экран. Заменить все его минимальные элементы нулями.
- MASM32 случайные числа, , массив
- Правильно я сделал выработку неповторяющихся случайных чисел в диапазоне N?С интернета брал подпрограммки.
- Генератор случайных чисел в Basic или C++