Другие языки программирования и технологии

c++, как отрандомить случайное число типа float в диапазоне от 0 до 10 ? (пример - 0,42; 7,71)

float x = ( 10.0f * rand() ) / RAND_MAX;
Иван Васильев
Иван Васильев
3 321
Лучший ответ
Стандартный 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-разрядных процессоров.
Пример
#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));