Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.06.2014, 20:39   #1
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию Рандом

Как зарандомить число от 2.9 до 3.1 на плюсах?
Praud вне форума Ответить с цитированием
Старый 01.06.2014, 21:11   #2
ATL
Форумчанин
 
Аватар для ATL
 
Регистрация: 26.01.2007
Сообщений: 278
По умолчанию

Код:

float RandomFloat(float min, float max) {
    float random = ((float) rand()) / (float) RAND_MAX;

    float range = max - min;  
    return (random*range) + min;
}
Код:
float RandomFloat(float a, float b) {
    float random = ((float) rand()) / (float) RAND_MAX;
    float diff = b - a;
    float r = random * diff;
    return a + r;
}
Код:
float RandomFloat(float a, float b)
{
    float y;
    int x;
    x = rand(); 
    y = a + (x * (b - a)) / RAND_MAX;
    return y;
}
Код:
float RandomFloat(float min, float max) {
// http://www.boost.org/doc/libs/1_38_0/libs/random/index.html
    boost::mt19937 rng;
    boost::uniform_real<float> u(min, max);
    boost::variate_generator<boost::mt19937&, boost::uniform_real<float> > gen(rng, u);
    return gen();
}
Код:
float min = 2.9, max = 3.1;
int r = rand();
float fraction = ((float) r / RAND_MAX) * (max - min);
float x = min + fraction;

Последний раз редактировалось ATL; 01.06.2014 в 21:27.
ATL вне форума Ответить с цитированием
Старый 01.06.2014, 21:22   #3
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию

уточню, нужно чтобы числа были 2.9, 3.0 , 3.1
Praud вне форума Ответить с цитированием
Старый 01.06.2014, 21:25   #4
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,679
По умолчанию

По моему исчерпывающий ответ
От себя немного добавлю...
Код:
        .....
        .....
		cout << " [" << randomDouble(2.9, 3.1) << "]" << endl;
	}
	return 0;
}

double randomDouble(double a, double b)
{
    double y;
    int x;
    x = rand(); 
    y = a + (x * (b - a)) / RAND_MAX;
    return y;
}
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 01.06.2014, 21:30   #5
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию

рандомится 2,9 и точность разная. А мне нужно конкретно или 2.9 или 3.0 или 3.1
Praud вне форума Ответить с цитированием
Старый 01.06.2014, 21:36   #6
ATL
Форумчанин
 
Аватар для ATL
 
Регистрация: 26.01.2007
Сообщений: 278
По умолчанию

Код:
#include <iomanip>

float x = randomDouble(2.9, 3.1);
   std::cout << std::fixed << std::setprecision(1) << x << std::endl;
ATL вне форума Ответить с цитированием
Старый 01.06.2014, 21:40   #7
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию

Постоянно 3.0

Код:
double randomDouble(double a, double b)
{
double y;
int x;
x = rand(); 
y = a + (x * (b - a)) / RAND_MAX;
return y;
}

int main()
{
srand(time(0));
float f=randomDouble(2.9, 3.1);
std::cout « std::fixed « std::setw(11) « std::setprecision(1) « f « std::endl;
_getch();

}
Praud вне форума Ответить с цитированием
Старый 02.06.2014, 04:53   #8
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Берете обычный интовый рандом в 3 значения и маппите их на свои
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Рандом Brocop Общие вопросы Delphi 5 20.06.2012 23:56
Рандом Mortimoro PHP 4 18.06.2012 22:34
Рандом Ya_Aston Помощь студентам 4 17.12.2010 22:43
Рандом mansp Общие вопросы C/C++ 1 12.12.2010 15:18
рандом Arcueid1691 Общие вопросы C/C++ 7 18.06.2009 00:58