Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
xatslise
1 / 1 / 1
Регистрация: 14.06.2017
Сообщений: 46
1

Генерация случайных дробных чисел

09.08.2017, 14:47. Просмотров 2077. Ответов 18
Метки нет (Все метки)

Мне надо сделать массив из случайных дробных чисел от -14 до 26
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.08.2017, 14:47
Ответы с готовыми решениями:

Генерация дробных случайных чисел от 0,1 до 0,9
Нужны дробные случайные числа от 0,1 до 0,9 Сваял на пробу прогу: #include <stdio.h> #include...

Генерация массива случайных чисел
помогите пожалуйста ! нужно написать функцию которая будет генирировать числа от 1 до 60 и...

Генерация случайных четных чисел
Вывести массив из 30-ти случайных чисел с диапазона от 100 до 10000, при этом каждое число массива...

Генерация случайных чисел в двумерном массиве
Помогите найти ошибку в коде. В двухмерный массив нужно сгенерировать неповторяющиеся случайные...

18
MrGluck
Форумчанин
Эксперт CЭксперт С++
8143 / 4994 / 1436
Регистрация: 29.11.2010
Сообщений: 13,460
09.08.2017, 15:02 2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <algorithm>
#include <array>
#include <iostream>
#include <iterator>
#include <random>
 
int main()
{
    std::array<double, 12> a;
    std::default_random_engine gen{ std::random_device()() };
    std::uniform_real_distribution<> dist(-14, 26);
    std::generate(std::begin(a), std::end(a), [&dist, &gen] { return dist(gen); });
    for (const auto &x : a)
        std::cout << x << std::endl;
}
1
xatslise
1 / 1 / 1
Регистрация: 14.06.2017
Сообщений: 46
09.08.2017, 15:07  [ТС] 3
MrGluck, Можно на чистом с
0
MrGluck
Форумчанин
Эксперт CЭксперт С++
8143 / 4994 / 1436
Регистрация: 29.11.2010
Сообщений: 13,460
09.08.2017, 15:09 4
xatslise, в следующий раз выбирайте внимательнее раздел в котором публикуете.
Тему перенёс.
0
xatslise
1 / 1 / 1
Регистрация: 14.06.2017
Сообщений: 46
09.08.2017, 15:14  [ТС] 5
Так ты сможешь переделать?
0
easybudda
Модератор
Эксперт JavaЭксперт CЭксперт С++
10748 / 6476 / 1601
Регистрация: 25.07.2009
Сообщений: 12,223
09.08.2017, 15:26 6
C
1
2
3
4
#include <stdlib.h>
#include <math.h>
 
#define bound_rand() ( fabs(sin(rand())) * 40 - 14 )
0
LFC
732 / 537 / 416
Регистрация: 17.09.2015
Сообщений: 1,599
09.08.2017, 15:29 7
Цитата Сообщение от xatslise Посмотреть сообщение
ты сможешь
Вообще-то он к вам на "вы" обращается...
0
Tree depth
09.08.2017, 15:42
  #8

Не по теме:

Цитата Сообщение от LFC Посмотреть сообщение
Вообще-то он к вам на "вы" обращается
Это его личные проблемы. Здесь принято на "ты". См., например, приветственное сообщение при регистрации:
Привет!

Рад приветствовать на форуме! Надеюсь, что тебе здесь понравится.

1
xatslise
1 / 1 / 1
Регистрация: 14.06.2017
Сообщений: 46
09.08.2017, 15:50  [ТС] 9
Добавлено через 50 секунд
Цитата Сообщение от easybudda Посмотреть сообщение
#include <stdlib.h>
#include <math.h>
#define bound_rand() ( fabs(sin(rand())) * 40 - 14 )
числа одни и те же, а надо чтоб при каждом запуску программы числа были случайными
0
MrGluck
Форумчанин
Эксперт CЭксперт С++
8143 / 4994 / 1436
Регистрация: 29.11.2010
Сообщений: 13,460
09.08.2017, 15:53 10
Цитата Сообщение от xatslise Посмотреть сообщение
при каждом запуску программы числа были случайными
Так для srand сид передайте какой-нибудь нестатичный, например time(NULL), как это обычно делают.
1
xatslise
1 / 1 / 1
Регистрация: 14.06.2017
Сообщений: 46
09.08.2017, 15:56  [ТС] 11
Цитата Сообщение от MrGluck Посмотреть сообщение
Так для srand сид передайте какой-нибудь нестатичный, например time(NULL), как это обычно делают.
Спасибо
0
easybudda
Модератор
Эксперт JavaЭксперт CЭксперт С++
10748 / 6476 / 1601
Регистрация: 25.07.2009
Сообщений: 12,223
09.08.2017, 15:56 12
Лучший ответ Сообщение было отмечено xatslise как решение

Решение

Цитата Сообщение от xatslise Посмотреть сообщение
числа одни и те же
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
 
#define bound_rand() ( fabs(sin(rand())) * 40 - 14 ) 
 
int main(void) {
    int i;
    
    srand(time(NULL));
    
    for ( i = 0; i < 10; ++i )
        printf("%f\n", bound_rand());
        
    return 0;
}
Код
[andrew Numbers]$ gcc rand-14+26.c -lm
[andrew Numbers]$ ./a.out 
5.146485
20.103648
10.152815
7.419724
-11.741578
-8.865329
-2.016571
8.873079
11.216647
16.387408
[andrew Numbers]$ ./a.out 
10.043042
23.310213
21.040210
25.955564
23.608908
3.176810
18.502755
10.347394
-9.462803
19.844136
[andrew Numbers]$
1
xatslise
1 / 1 / 1
Регистрация: 14.06.2017
Сообщений: 46
09.08.2017, 16:02  [ТС] 13
MrGluck, еще вопрос если не затруднит ответить
Цитата Сообщение от easybudda Посмотреть сообщение
fabs(sin(rand())) * 40 - 14
что означает -14 и 40
0
MrGluck
Форумчанин
Эксперт CЭксперт С++
8143 / 4994 / 1436
Регистрация: 29.11.2010
Сообщений: 13,460
09.08.2017, 16:06 14
Цитата Сообщение от xatslise Посмотреть сообщение
что означает -14 и 40
коэффициенты чтобы получить числа
Цитата Сообщение от xatslise Посмотреть сообщение
от -14 до 26
синус даёт распределение от [-1 до 1]. fabs (модуль) это приводит к [0 1]. В итоге мы имеем результат от 0*40 - 14 до 1*40 - 14, то есть от -14 до 26, как и требовалось в задании.
1
xatslise
1 / 1 / 1
Регистрация: 14.06.2017
Сообщений: 46
09.08.2017, 16:10  [ТС] 15
MrGluck, спасибо
0
easybudda
Модератор
Эксперт JavaЭксперт CЭксперт С++
10748 / 6476 / 1601
Регистрация: 25.07.2009
Сообщений: 12,223
09.08.2017, 16:10 16
Цитата Сообщение от xatslise Посмотреть сообщение
что означает -14 и 40
Цитата Сообщение от xatslise Посмотреть сообщение
сделать массив из случайных дробных чисел от -14 до 26
Область значений функции синуса [-1; 1], соответственно модуль от неё [0; 1]. Минимальное значение всего выражения (в теории) будет 0 * 40 - 14 = -14, а максимальное 1 * 40 - 14 = 26. Учитывая псевдослучайные значения аргумента, конструкция будет возвращать числа в этом диапазоне.
Опоздал... Тогда добавлю, что 40 это 26 + 14
0
Байт
Эксперт C
22707 / 14390 / 3017
Регистрация: 24.12.2010
Сообщений: 30,659
09.08.2017, 21:43 17
easybudda, Вот лично мне использование синуса не очень нравится. Имхо, не даст он равномерного распределения. Побольше будет значений ближе к +-единице (горбы). Хотя я и не исключаю того, что где-то я не прав.
Но я бы генерировал отдельно целую и дробную часть. Или целую (большую) делил на 10n.
0
easybudda
Модератор
Эксперт JavaЭксперт CЭксперт С++
10748 / 6476 / 1601
Регистрация: 25.07.2009
Сообщений: 12,223
10.08.2017, 00:32 18
Цитата Сообщение от Байт Посмотреть сообщение
Вот лично мне использование синуса не очень нравится. Имхо, не даст он равномерного распределения. Побольше будет значений ближе к +-единице (горбы).
Это, если её по модулю резать (как у меня в посте выше), то в целом да, но учитывая, что rand() сама по себе то ещё распределение даёт, Ваше предложение
Цитата Сообщение от Байт Посмотреть сообщение
Но я бы генерировал отдельно целую и дробную часть. Или целую (большую) делил на 10n.
в целом вряд ли ситуацию сильно улучшит. Как вариант, лучше синусойду поднять и вытянуть
C
1
#define brand(minVal, maxVal) ( ( ( 1.0 + sin(rand()) ) / 2.0 ) * ( (maxVal) - (minVal) ) + (minVal) )
1
avgoor
1110 / 662 / 161
Регистрация: 05.12.2015
Сообщений: 1,893
10.08.2017, 15:10 19
Цитата Сообщение от easybudda Посмотреть сообщение
в целом вряд ли ситуацию сильно улучшит. Как вариант, лучше синусойду поднять и вытянуть
Чем не устраивает стандартное:
C++
1
 (maxVal-minVal)*rand()/RAND_MAX+minVal;
0
10.08.2017, 15:10
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.08.2017, 15:10

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Генерация случайных чисел в заданном диапазоне
#include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;stdlib.h&gt; int main() { clrscr();...

Генерация случайных чисел из заданного диапазона
как сделать рандом из определенного интервала? т.е if (x&gt;0.15 &amp;&amp; y&lt;0.456) z=//z принимает...

Генерация неповторяющихся различных случайных чисел - программа зависает
зависает програма не могу понять почему #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include...

Генерация массива целых случайных чисел, которые не повторяются
Случайные числа. Генерация случайного целого числа в заданном диапазоне. Генерация массива целых...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.