C/C++

Как объявить рандомное положительно и рандомное отрицательно значение переменным float double?

Понятно, что через rand(), но как именно будет выглядть код?
#include <iostream>
#include <random>
#include <iomanip>
using namespace std;
class Random {
public:
Random() {
random_device device;
random_generator_.seed(device());
random_generator_64_.seed(device());
}
int next(int first, int last) {
uniform_int_distribution<int> range(first, last);
return range(random_generator_);
}
float next(float first, float last) {
uniform_real_distribution<float> range(first, last);
return range(random_generator_);
}
double next(double first, double last) {
uniform_real_distribution<double> range(first, last);
return range(random_generator_64_);
}
private:
mt19937 random_generator_;
mt19937_64 random_generator_64_;
};
int main() {
const auto pi = 3.141592653589793;
const auto e = 2.718281828459045;
Random rand;
auto a = rand.next(1, 1000);
auto b = rand.next(-e, e);
auto c = rand.next(-pi, pi);
cout << "int: " << a << '\n'
<< "float: " << b << '\n'
<< "double: " << fixed << setprecision(15) << c << '\n';
system("pause > nul");
}
ЭО
Эркинтай Орунбаев
95 452
Лучший ответ
Объявляется переменная. А присваивается ей целое рандомное значение через rand()%n+1 и -(rand()%n+1)
Для Вашего задания, видимо, float или double можно присвоить вещественное значение, деля принесенное rand на, например, 100.
P.S. Как заметил user49913, в C++ cуществуют и много лучшие генераторы псевдослучайных и даже истинно случайных чисел, чем древний rand, и тем более генераторы сразу вещественных чисел, и их использование предпочтительно. Но на уровне начинающего сойдет и rand :)
Андрей Малыгин P.S. А еще лучше, чем делить на 100, вырабатывать вещественное неотрицательное float в диапаоне от 0 до 1 как

#include "iostream"
#include "ctime"
#include "cstdlib"
using namespace std;
int main(){
float s, RM=RAND_MAX; srand(time(NULL));
s=rand()/RM; cout<< s<< endl;}
Андрей Малыгин Точно такой же.
просто умножь случайный результат на вещественную переменную:

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

int main()
{

srand(time(NULL));

printf("\n %.3f",rand()*(-1.1));//случ. отриц. знач.
printf("\n %.3f",rand()*1.2);//случ. положит знач.

return 0;
}
Arystanbek Taskynbaev
Arystanbek Taskynbaev
37 945
> Понятно, что через rand()
Нет, не понятно.
За rand в C++ давно пора бить по рукам. Существует <random>, существует uniform_real_distribution. Используйте их.
Куба
Куба
36 956
Arystanbek Taskynbaev А за такой совет нужно не просто подзатыльник давать, а бить с ноги сразу
Arystanbek Taskynbaev #include<stdio.h>
#include<stdlib.h>
#include<time.h>

int main()
{
srand(time(NULL));//задаём случайный генератор чисел

printf("\n %d",rand()*(-1));//случайное отрицательное значение
printf("\n %d",rand());//случайное положительное значение
printf("\n %d",rand()%1000);/*случайное полрдительное значение в диапозоне между 0 и 999 */
return 0;
}