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

Как срандомить случайные вещественные числа N и занести их в массив? C++

#include
#include
using namespace std;
int main()
{

const int size = 15;
int arr[size];
srand(time(NULL));
for (int i = 0; i < size; i++)
{
arr[i] = rand() % 100-50;
cout << arr[i]<<endl;
}
}

Вроде бы так но я хочу чтобы там вывелось вещественные числа т. е. дробные
MY
Maksim Yamaev
60
#include <iostream>
#include <iomanip>
#include <utility>
#include <random>
using namespace std;
int rnd(int a, int b) {
if (a > b) swap(a, b);
uniform_int_distribution<> uid(a, b);
mt19937 gen{ random_device()() };
return uid(gen);
}
int main() {
const auto n = 10U;
int box[n] = { 0 };
const auto a = -50;
const auto b = 50;
for (auto& v : box) v = rnd(a, b);
for (const auto v : box) cout << setw(5) << v;
cout.put('\n');
system("pause");
}
*&
***нюня*** 'ersa'
95 730
Лучший ответ
Александр Иванов Слишком мудрёно для новичков.
Фарход Гиесов Эм.. вроде хотели вещественные =)
см C++ < random > и uniform_real_distribution

https://en.cppreference.com/w/cpp/numeric/random/uniform_real_distribution

https://docs.microsoft.com/ru-ru/cpp/standard-library/uniform-real-distribution-class?view=vs-2019

Если нужно генерировать включая верхнюю границу обратите внимание на std::nextafter в первой ссылке.

Про srand и rand в современном C++ лучше забыть =)
В частности зная "seed" в srand можно узнать ("предсказать") всю последовательность "случайных" чисел. Более того в ряде случаев seed можно вычислить по нескольким генерируемым значениям.
Gennadij Domanickij
Gennadij Domanickij
84 764
для дробных юзай double или float, а не int
Maksim Yamaev не помогает
Александр Иванов Вообще, это так делается:

double range = from<to?to-from:from-to;
double shift = from<to?from:to;

srand(time(nullptr));
double randnum = (double)rand() / (double)RAND_MAX * range + shift;
Вообще, это так делается:
double range = from<to?to-from:from-to; // диапазон
double shift = from<to?from:to; // сдвиг
srand(time(nullptr)); // инициализация рандома от времени
double randnum = (double)rand() / (double)RAND_MAX * range + shift; // рандомное число

Нужно подключить хэдеры:
#include < cstdlib >
#include < ctime >

Твой код с изменениями:
#include < cstdlib >
#include < ctime >
int main()
{
const int size = 15;
int arr[size];
double range = 50 - (-50); // диапазон
double shift = -50; // сдвиг
srand(time(nullptr)); // инициализация рандома от времени
for (int ix = 0; ix < size; ++ix)
{
arr[ix] = (double)rand() / (double)RAND_MAX * range + shift; // рандомное число
std::cout << arr[ix] << std::endl;
}
}
Alekseu Kuchmenko
Alekseu Kuchmenko
9 566

Похожие вопросы